共计 1668 个字符,预计需要花费 5 分钟才能阅读完成。
iptables 端口映射设置如下:
设我们有一台计算机, 有两块网卡,eth0 连外网,ip 为 1.2.3.4;eth1 连内网,ip 为 192.168.0.1. 现在需要把发往地址 1.2.3.4 的 81 端口的 ip 包转发到 ip 地址 192.168.0.2 的 8180 端口, 设置如下:
1. iptables -t nat -A PREROUTING -d 1.2.3.4 -p tcp -m tcp –dport 81 -j DNAT –to-destination192.168.0.2:8180
2. iptables -t nat -A POSTROUTING -s 192.168.0.0/255.255.0.0 -d 192.168.0.2 -p tcp -m tcp –dport 8180 -j SNAT –to-source 192.168.0.1
真实的传输过程如下所示:
假设某客户机的 ip 地址为 6.7.8.9, 它使用本机的 1080 端口连接 1.2.3.4 的 81 端口, 发出的 ip 包源地址为 6.7.8.9, 源端口为 1080, 目的地址为 1.2.3.4, 目的端口为 81.
主 机 1.2.3.4 接收到这个包后, 根据 nat 表的第一条规则, 将该 ip 包的目的地址更该为 192.168.0.2, 目的端口更该为 8180, 同时在连接跟 踪表中创建一个条目,(可从 /proc/net/ip_conntrack 文件中看到), 然后发送到路由模块, 通过查路由表, 确定该 ip 包应发送到 eth1 接口. 在向 eth1 接口发送该 ip 包之前, 根据 nat 表的第二条规则, 如果该 ip 包来自同一子网, 则将该 ip 包的源地址更该为 192.168.0.1, 同时更新该连接跟踪表中的相应条目, 然后送到 eth1 接口发出.
此时连接跟踪表中有一项:
连接进入: src=6.7.8.9 dst=1.2.3.4 sport=1080 dport=81
连接返回: src=192.168.0.2 dst=6.7.8.9 sport=8180 dport=1080
是否使用: use=1
而 从 192.168.0.2 发回的 ip 包, 源端口为 8180, 目的地址为 6.7.8.9, 目的端口为 1080, 主机 1.2.3.4 的 TCP/IP 栈接收到该 ip 包后, 由核心查找连接跟踪表中的连接返回栏目中是否有同样源和目的地址和端口的匹配项, 找到后, 根据条目中的记录将 ip 包的源地址由 192.168.0.2 更该为 1.2.3.4, 源端口由 8180 更该为 81, 保持目的端口号 1080 不变. 这样服务器的返回包就可以正确的返回发起连接的客户机, 通讯就这样开始.
还有一点, 在 filter 表中还应该允许从 eth0 连接 192.168.0.2 地址的 8180 端口:
iptables -A INPUT -d 192.168.0.2 -p tcp -m tcp –dport 8180 -i eth0 -j ACCEPT
通过上面的例子,我们就知道 iptables 端口映射设置其实不难!
更多 iptables 相关教程见以下内容:
CentOS 7.0 关闭默认防火墙启用 iptables 防火墙 http://www.linuxidc.com/Linux/2015-05/117473.htm
iptables 使用范例详解 http://www.linuxidc.com/Linux/2014-03/99159.htm
Linux 防火墙 iptables 详细教程 http://www.linuxidc.com/Linux/2013-07/87045.htm
iptables 的备份、恢复及防火墙脚本的基本使用 http://www.linuxidc.com/Linux/2013-08/88535.htm
Linux 下防火墙 iptables 用法规则详解 http://www.linuxidc.com/Linux/2012-08/67952.htm
Linux 下 iptables 防火墙设置 http://www.linuxidc.com/Linux/2015-10/123843.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-12/125873.htm