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



在网上搜索好多,对linux配置端口映射都不够详细,我在RedHat8.0上用iptables配置了端口映射,讲述详细的配置过程,供大家参考。

步骤/方法

  1. 首先应该做的是/etc/sysctl.conf配置文件的 net.ipv4.ip_forward = 1 默认是0。
    这样允许iptalbes FORWARD。
  2. 在/etc/rc.d/init.d目录下有iptables 文件,使用格式如下
    Usage: ./iptables {start|stop|restart|condrestart|status|panic|save}
    相当与service iptables {....}
    把iptables 服务停止,清除以前的规则,存盘
    到/etc/rc.d/init.d目录下,运行
    ./iptables stop
    iptalbes -F
    iptalbes -X
    iptalbes -Z
    ./iptables save
  3. 重新配置规则
    iptables -t nat -A PREROUTING -d 219.239.xx.xx -p tcp --dport 8080 -j DNAT --to-destination 172.18.10.205:80
    iptables -t nat -A POSTROUTING -d 172.18.10.205 -p tcp --dport 80 -j SNAT --to 172.18.10.212
    iptables -A FORWARD -o eth0 -d 172.18.10.205 -p tcp --dport 80 -j ACCEPT
    iptables -A FORWARD -i eth0 -s 172.18.10.205 -p tcp --sport 80 -j ACCEPT
    DNAT SNAT 的请参考帮助,这里不再陈述。
  4. 新的规则存盘
    ./iptables save
    规则存盘后在/etc/sysconfig/iptables这个文件里面,若你对这个文件很熟悉
    直接修改这里的内容也等于命令行方式输入规则。
  5. 启动iptables 服务
    ./iptables start
    在/proc/net/ip_conntrack文件里有包的流向,如下面
    tcp 6 53 TIME_WAIT src=221.122.59.2 dst=219.239.xx.xx sport=7958 dport=8080 packets=9 bytes=1753
    src=172.18.10.205 dst=172.18.10.212 sport=80 dport=7958 packets=9 bytes=5777 [ASSURED] use=1


使用Ubuntu iptables 有许多地方能进行运作,比如:内网端口映射

1.系统环境

内网两台服务器:

A 172.16.119.128

B 172.16.119.129

希望将A机器的80端口映射到B机器的8013端口。

  2.设置步骤

2.1./etc/sysctl.conf配置文件修改

删除“# net.ipv4.ip_forward = 1”行前面的“#”。 默认该行被注释掉的。

2.2.查看现有配置信息

iptables -L

如果显示内容如下:

Chain INPUT (policy ACCEPT)

target prot opt source destination

Chain FORWARD (policy ACCEPT)

target prot opt source destination

Chain OUTPUT (policy ACCEPT)

target prot opt source destination

表示无任何设置,可以继续下一步操作。

否则执行:

iptalbes -F

iptalbes -X

iptalbes -Z

2.3.设置端口映射

分别执行:

iptables -t nat -A PREROUTING -d 172.16.119.128 -p tcp --dport 80 -j DNAT --to-destination 172.16.119.129:8013

iptables -t nat -A POSTROUTING -d 172.16.119.129 -p tcp --dport 8013 -j SNAT --to 172.16.119.128

iptables -A FORWARD -o eth0 -d 172.16.119.129 -p tcp --dport 8013 -j ACCEPT

iptables -A FORWARD -i eth0 -s 172.16.119.129 -p tcp --sport 8013 -j ACCEPT

2.4.验证端口映射

此时,访问http://172.16.119.128/abc.htm,应该能访问到对应129服务器上端口为8013网站的abc.htm页面。

3.设置开机自动加载iptables的配置文件

3.1 保存配置

执行命令:

# iptables-save > /etc/init.d/iptables.up.rules

将当前配置保存再iptables.up.rules文件中,文件名可以自己决定。

3.2 修改网卡配置文件

在网卡IP配置文件/etc/network/interfaces末行加入(/etc/init.d/iptables.up.rules可改成自己定义的配置文件位置和名称)

pre-up iptables-restore < /etc/init.d/iptables.up.rules

3.3 重启服务器验证

shutdown -r now

通过是正文的三大步介绍,我们清楚的知道了Ubuntu iptables 内网端口映射的组建情况!希望对你们有用!


测试 :笔记本IP 192.168.1.2  PING WWW.BAIDU.COM



Logo

更多推荐