基于Linux系统Firewall实现SNAT+DNAT
1. 开启系统的转发功能
vi /etc/sysctl.conf 将 net.ipv4.ip_forward=0 修改成 net.ipv4.ip_forward=1
编辑后使用命令让配置马上生效 sysctl -p
开启目标服务器/中转服务器端口**(本例仅限于http服务) python -m SimpleHTTPServer 1024
查询端口**状态 netstat -tupln
2. iptables 的命令
iptables -t nat -A PREROUTING -p tcp --dport [端口号] -j DNAT --to-destination [目标IP]
iptables -t nat -A PREROUTING -p udp --dport [端口号] -j DNAT --to-destination [目标IP]
iptables -t nat -A POSTROUTING -p tcp -d [目标IP] --dport [端口号] -j SNAT --to-source [本地服务器IP]
iptables -t nat -A POSTROUTING -p udp -d [目标IP] --dport [端口号] -j SNAT --to-source [本地服务器IP]
中转服务器添加如下规则:
DNAT
iptables -t nat -D PREROUTING -p tcp --dport {外部端口} -j DNAT --to-destination {内部IP:内部端口}
SNAT
iptables -t nat -A POSTROUTING -p tcp -d {内部IP} --dport {内部端口} -j SNAT --to-source {外部IP:外部端口}
3. 重启 iptables 使配置生效
service iptables save
service iptables restart
4. 验证规则生效
在第三方节点 curl http://{外部IP}:{外部端口}
在中转服务器抓包观察IP转发情况
5. 扩展需求
多端口转发修改方案: ( 将本地服务器的 50000~65535 转发至目标 IP 为 1.1.1.1 的 50000~65535 端口 )
-A PREROUTING -p tcp -m tcp --dport 50000:65535 -j DNAT --to-destination 1.1.1.1
-A PREROUTING -p udp -m udp --dport 50000:65535 -j DNAT --to-destination 1.1.1.1
-A POSTROUTING -d 1.1.1.1/32 -p tcp -m tcp --dport 50000:65535 -j SNAT --to-source [本地服务器IP]
-A POSTROUTING -d 1.1.1.1/32 -p udp -m udp --dport 50000:65535 -j SNAT --to-source [本地服务器IP]
非同端口号修改方案:(使用本地服务器的 60000 端口来转发目标 IP 为 1.1.1.1 的 50000 端口)
-A PREROUTING -p tcp -m tcp --dport 60000 -j DNAT --to-destination 1.1.1.1:50000
-A PREROUTING -p udp -m udp --dport 60000 -j DNAT --to-destination 1.1.1.1:50000
-A POSTROUTING -d 1.1.1.1/32 -p tcp -m tcp --dport 50000 -j SNAT --to-source [本地服务器IP]
-A POSTROUTING -d 1.1.1.1/32 -p udp -m udp --dport 50000 -j SNAT --to-source [本地服务器IP]
- 点赞
- 收藏
- 关注作者
评论(0)