iptable实现端口转发

利用iptables的规则来实现端口转发:

第一步需要将内核参数的net.ipv4.ip_forward=1 

场景一:实现本地端口转发 : client端访问本地端口一 实际要转移至本地端口二;

本地端口转发是在PREROUTING链中将端口做NAT转换:

# iptable -t nat -A  PREROUTING -p tcp --dport   "$原端口"  -j REDIRECT --to-port  "$目标端口"

场景二、实现端口远程端口转发

远程端口转发原理,是在本地PREROUTING链中将端口进行NAT转换,然后通过FORWARD链转至POSTROUTING链中,然后在POSTROUTING中将原client地址进行SNAT的转换

1、 DNAT转换  iptable -t nat -A PREROUTING -p tcp -m tcp --dport   "$原端口" -j DNAT --to-destination xxx:xxx:xxx:xxx:$目标端口          note:xxx:xxx:xxx:xxx为目标机器地址

2、FORWARD放行: iptable -t filter -A FORWARD -j ACCEPT      ### 此处可设置其他的过滤条件

3、SNAT转换: iptable -t nat -A POSTROUTING -p tcp -m tcp --dport $目标端口 -j SNAT --to-source "xxx:xxx:xxx:xxx"                             note: xxx:xxx:xxx:xxx 为端口转发机器地址

 场景三、本地应用程序访问server端端口一、在本地进行NAT转换,将端口转换成实际server端运行的端口二

 如果要实现本地应用程序访问目标端口:如 curl http://xxx.xxx.xxx.xxx:$目标端口/                                                                                        note: xxx:xxx:xxx:xxx 为端口转发机器地址

因为本地应用(用户空间)访问目标端口时,是通过OUT链路出用户空间,必须在OUT 链中添加相应DNAT的规则,再经过POSTROUTING链出去目标机器

iptables -t nat -A OUTPUT -p tcp -m tcp --dport    "$原端口"  -j DNAT --to-destination   xxx:xxx:xxx:xxx:$目标端口                                        note: xxx:xxx:xxx:xxx 为目标机器地址      

 

posted @ 2019-10-24 16:58  xiao_pai_pai  阅读(5468)  评论(1编辑  收藏  举报