iptables学习笔记:同一端口号同时支持tcp和udp的转发
2016-01-13 14:17
218 查看
前段时间,某项目中遇到一个端口转发问题,虽然我无缘参与项目,但由于项目使用到的一个平台恰好是我前不久搞过的,所以最终还是找我,于是中断了正在进行的任务进行协助。他们定位到只有udp无法转发成功,而tcp是成功的。我看了代码,里面只针对tcp进行转发的。因此,需要对该端口同时支持tcp和udp转发。下面记录一下转发命令。
原先的端口转发的命令如下(172.18.18.18的端口100,转发到100.10.10.168的80端口):
iptables -t nat -A PREROUTING -d 172.18.18.188 -p tcp --dport 100 -j DNAT --to-destination 100.100.100.168:80
iptables -t nat -A POSTROUTING -d 100.100.100.168 -p tcp --dport 80 -j SNAT --to 172.18.18.188
iptables -A FORWARD -o eth0 -d 100.100.100.168 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -s 100.100.100.168 -p tcp --sport 80 -j ACCEPT
上述命令只是针对tcp协议进行转发,下面是修改后的命令,同时支持tcp和udp:
iptables -t nat -A PREROUTING -d 172.18.18.18 -p udp --dport 100 -j DNAT --to-destination 100.10.10.168:80
iptables -t nat -A POSTROUTING -s 100.10.10.168 -p udp --dport 80 -j SNAT --to-source 172.18.18.18:100
iptables -A FORWARD -o eth0 -d 100.10.10.168 -p udp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -s 100.10.10.168 -p udp --sport 80 -j ACCEPT
iptables -t nat -A PREROUTING -d 172.18.18.18 -p tcp --dport 100 -j DNAT --to-destination 100.10.10.168:80
iptables -t nat -A POSTROUTING -s 100.10.10.168 -p tcp --dport 80 -j SNAT --to-source 172.18.18.18:100
iptables -A FORWARD -o eth0 -d 100.10.10.168 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -s 100.10.10.168 -p tcp --sport 80 -j ACCEPT对比发现,只是改了POSTROUTING链,将“-d”改为“-s”,然后将“-to”改为“--to-source”,其它不变,但却能同时进行tcp和udp转发。原理方面还有待继续学习。
如果要删除转发命令,使用下面的命令:
iptables -t nat -D PREROUTING -d 172.18.18.18 -p udp --dport 100 -j DNAT --to-destination 100.10.10.168:80
iptables -t nat -D POSTROUTING -s 100.10.10.168 -p udp --dport 80 -j SNAT --to-source 172.18.18.18:100
iptables -D FORWARD -o eth0 -d 100.10.10.168 -p udp --dport 80 -j ACCEPT
iptables -D FORWARD -i eth0 -s 100.10.10.168 -p udp --sport 80 -j ACCEPT
iptables -t nat -D PREROUTING -d 172.18.18.18 -p tcp --dport 100 -j DNAT --to-destination 100.10.10.168:80
iptables -t nat -D POSTROUTING -s 100.10.10.168 -p tcp --dport 80 -j SNAT --to-source 172.18.18.18:100
iptables -D FORWARD -o eth0 -d 100.10.10.168 -p tcp --dport 80 -j ACCEPT
iptables -D FORWARD -i eth0 -s 100.10.10.168 -p tcp --sport 80 -j ACCEPT
注:
1、参考原来的命令,将tcp换成udp,无法转发,失败。
2、指定端口时,必须要用-p指定传输协议,如果不指定会有语法错误。-p只能同时指定一种协议,不能使用“-p udp,tcp”或“-p all”,这些格式同样有语法错误。
李迟 2016.01.13 周三调休
原先的端口转发的命令如下(172.18.18.18的端口100,转发到100.10.10.168的80端口):
iptables -t nat -A PREROUTING -d 172.18.18.188 -p tcp --dport 100 -j DNAT --to-destination 100.100.100.168:80
iptables -t nat -A POSTROUTING -d 100.100.100.168 -p tcp --dport 80 -j SNAT --to 172.18.18.188
iptables -A FORWARD -o eth0 -d 100.100.100.168 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -s 100.100.100.168 -p tcp --sport 80 -j ACCEPT
上述命令只是针对tcp协议进行转发,下面是修改后的命令,同时支持tcp和udp:
iptables -t nat -A PREROUTING -d 172.18.18.18 -p udp --dport 100 -j DNAT --to-destination 100.10.10.168:80
iptables -t nat -A POSTROUTING -s 100.10.10.168 -p udp --dport 80 -j SNAT --to-source 172.18.18.18:100
iptables -A FORWARD -o eth0 -d 100.10.10.168 -p udp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -s 100.10.10.168 -p udp --sport 80 -j ACCEPT
iptables -t nat -A PREROUTING -d 172.18.18.18 -p tcp --dport 100 -j DNAT --to-destination 100.10.10.168:80
iptables -t nat -A POSTROUTING -s 100.10.10.168 -p tcp --dport 80 -j SNAT --to-source 172.18.18.18:100
iptables -A FORWARD -o eth0 -d 100.10.10.168 -p tcp --dport 80 -j ACCEPT
iptables -A FORWARD -i eth0 -s 100.10.10.168 -p tcp --sport 80 -j ACCEPT对比发现,只是改了POSTROUTING链,将“-d”改为“-s”,然后将“-to”改为“--to-source”,其它不变,但却能同时进行tcp和udp转发。原理方面还有待继续学习。
如果要删除转发命令,使用下面的命令:
iptables -t nat -D PREROUTING -d 172.18.18.18 -p udp --dport 100 -j DNAT --to-destination 100.10.10.168:80
iptables -t nat -D POSTROUTING -s 100.10.10.168 -p udp --dport 80 -j SNAT --to-source 172.18.18.18:100
iptables -D FORWARD -o eth0 -d 100.10.10.168 -p udp --dport 80 -j ACCEPT
iptables -D FORWARD -i eth0 -s 100.10.10.168 -p udp --sport 80 -j ACCEPT
iptables -t nat -D PREROUTING -d 172.18.18.18 -p tcp --dport 100 -j DNAT --to-destination 100.10.10.168:80
iptables -t nat -D POSTROUTING -s 100.10.10.168 -p tcp --dport 80 -j SNAT --to-source 172.18.18.18:100
iptables -D FORWARD -o eth0 -d 100.10.10.168 -p tcp --dport 80 -j ACCEPT
iptables -D FORWARD -i eth0 -s 100.10.10.168 -p tcp --sport 80 -j ACCEPT
注:
1、参考原来的命令,将tcp换成udp,无法转发,失败。
2、指定端口时,必须要用-p指定传输协议,如果不指定会有语法错误。-p只能同时指定一种协议,不能使用“-p udp,tcp”或“-p all”,这些格式同样有语法错误。
李迟 2016.01.13 周三调休
相关文章推荐
- 网络编程 一个服务器同时为多个客户端服务
- http抓包工具
- FC SAN - 光纤通道存储区域网络
- 使用PHPProxy把虚拟空间变成HTTP代理(ZT)
- httpd(2.2&2.4)RPM搭建配置定义详解
- linux网络命令(八)之top、htop
- 从僵尸网络追踪到入侵检测 第9章 Nepenthesp 配置二
- asp.net访问网络路径方法(模拟用户登录)
- 网络编程六阶段总结
- 第05章 计算机网络 之 网络存储技术
- 第05章 计算机网络 之 虚拟局域网
- 第05章 计算机网络 之 网络规划与设计
- 第05章 计算机网络 之 计算机网络分类
- 第05章 计算机网络 之 网络接入技术
- 第05章 计算机网络 之 TCP/IP协议族
- Windows 10家庭版也能共享打印机(中)解除Guest账户网络登录限制,实现局域网共享
- 第05章 计算机网络 之 开放系统互连参考模型
- Android Asynchronous Http Client
- 从僵尸网络追踪到入侵检测 第9章 Nepenthes安装和配置
- CentOS 6.5 64位下安装httpsqs