Iptables实现公网IP DNAT/SNAT
Iptables实现NAT是最基本的功能,大部分家用路由都是基于其SNAT方式上网,使用Iptables实现外网DNAT也很简单,不过经常会出现不能正常NAT的现象。
以下命令将客户端访问1.1.1.1的HTTP数据DNAT到2.2.2.2,很多人往往只做这一步,然后测试不能正常连接。
1
|
iptables -t nat -A PREROUTING -p tcp -d 1.1.1.1 --dport 80 -j DNAT --to 2.2.2.2:80 |
想像一下此时客户端访问1.1.1.1的数据流程:
1
2
3
4
|
客户端访问1.1.1.1 1.1.1.1根据Iptables DNA将数据包发往2.2.2.2,此时源IP为客户端IP 2.2.2.2处理后根据源IP直接向客户端返回数据,要知道此时客户端是直接和1.1.1.1连接的 然后呢,客户端不知所云,不能正常连接 |
最后还要添加一条SNAT规则,将发到2.2.2.2的数据包SNAT,1.1.1.1充当代理服务器的角色。
1
|
iptables -t nat -A POSTROUTING -d 2.2.2.2 -j SNAT --to- source 1.1.1.1 |
别忘记开启内核转发功能:
1
|
echo 1 > /proc/sys/net/ipv4/ip_forward |
实例配置:
cat /etc/sysconfig/iptables -A PREROUTING -d 60.190.*****.236/32 -p tcp -m tcp --dport 8004 -j DNAT --to-destination 172.20.18.104:80 -A PREROUTING -d 60.190.*****236/32 -p udp -m udp --dport 8004 -j DNAT --to-destination 172.20.18.104:80
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步