iptables实现端口映射

说明:
需要将外网访问本地IP(192.168.75.5)的80端口转换为访问192.168.75.3的8000端口,这就需要用到iptables的端口映射

实现:
1. 需要先开启linux的数据转发功能

# vi /etc/sysctl.conf,将net.ipv4.ip_forward=0更改为net.ipv4.ip_forward=1
# sysctl -p  //使数据转发功能生效

 
2. 更改iptables,使之实现nat映射功能

将外网访问192.168.75.5的80端口转发到192.168.75.3:8000端口。
# iptables -t nat -A PREROUTING -d 192.168.75.5 -p tcp --dport 80 -j DNAT --to-destination 192.168.75.3:8000

将192.168.75.3 8000端口将数据返回给客户端时,将源ip改为192.168.75.5
# iptables -t nat -A POSTROUTING -d 192.168.75.3 -p tcp --dport 8000 -j SNAT 192.168.75.5

 
3. 查看nat,可以使用命令:iptables -t nat –list检查nat列表信息,结果如下图所示
iptables

附录:
附录1. 以上是针对从一台机到另一台机的端口转发,如果要针对本机进行端口转发,就需要按如下操作

将外网访问80端口的数据转发到8080端口
# iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080

将本机访问80端口的转发到本机8080
# iptables -t nat -A OUTPUT -p tcp -d 127.0.0.1 --dport 80 -j DNAT --to 127.0.0.1:8080
# iptables -t nat -A OUTPUT -p tcp -d 192.168.4.177 --dport 80 -j DNAT --to 127.0.0.1:8080
本地连接指的是在本机上,用 127.0.0.1 或者本机 IP 来访问本机的端口。本地连接的数据包不会通过网卡,而是由内核处理后直接发给本地进程。这种数据包在 iptables 中只经过 OUTPUT 链,而不会经过 PREROUTING 链。所以需要在 OUTPUT 链中进行 DNAT。除了对 127.0.0.1 之外,对本机 IP (即 192.168.4.177) 的访问也属于本地连接。

“iptables实现端口映射”的2个回复

  1. “iptables -t nat -A POSTROUTING -d 192.168.75.3 -p tcp –dport 8000 -j SNAT 192.168.75.5″你文章里面这条规则如果不添加到iptables好像也能正常工作,你有测试过吗? 用DNAT做端口转发的话,好像不用管数据包的返回路径,返回路径好像会被自动安排好. -> The gateway computer redirects connections to the specified ports to the designated internal computers and ports and arranges for return traffic to go back to the original address outside the network. –Oreilly.Linux.iptables.Pocket.Reference.Aug.2004

发表评论

邮箱地址不会被公开。 必填项已用*标注