NAT表SNAT操作
[root@localhost ~]#iptables -t nat -A POSTROUTING -s 172.16.213.230/32 -j SNAT –to-source 223.221.189.166
这条命令是:让内网一台机器伪装成公网IP出去上网
一、一句话解释
iptables -t nat -A POSTROUTING -s 172.16.213.230/32 -j SNAT --to-source 223.221.189.166
意思:
把源IP为 172.16.213.230 的包,在发出前把源IP改成 223.221.189.166,然后发出去。
二、拆解成人话
| 参数 | 含义 | 白话版 |
|---|---|---|
| -t nat | 操作NAT表 | 专门改地址的表 |
| -A POSTROUTING | 追加到POSTROUTING链 | 包要出门前动手脚 |
| -s 172.16.213.230/32 | 源IP是这个 | 只针对这台内网机器 |
| -j SNAT | 做源地址转换 | 改源头IP |
| –to-source 223.221.189.166 | 改成这个IP | 伪装成这个公网IP出门 |
三、实战场景
场景1:内网服务器要上网,但只有一个公网IP
内网服务器 A: 172.16.213.230
公网IP: 223.221.189.166(绑定在防火墙外网口)
172.16.213.230 → 访问百度
路由器执行这条SNAT:
包出去时源IP 172.16.213.230 → 换成 223.221.189.166
百度看到:223.221.189.166 来访问我
百度回包:发给 223.221.189.166
路由器收到,自动还原 → 转给 172.16.213.230
✅ 内网机器上网成功!
场景2:指定某台机器走特定公网IP(多线策略)
电信线: 223.221.189.166
联通线: 218.22.15.8
iptables -t nat -A POSTROUTING -s 172.16.213.230 -j SNAT --to-source 223.221.189.166
iptables -t nat -A POSTROUTING -s 172.16.213.231 -j SNAT --to-source 218.22.15.8
四、SNAT vs MASQUERADE
| 对比项 | SNAT | MASQUERADE |
|---|---|---|
| 写法 | --to-source 1.2.3.4 | -j MASQUERADE |
| 公网IP | 固定IP | 动态IP(PPPoE) |
| 性能 | 高(直接改) | 稍低(每次查IP) |
| 场景 | 机房固定IP | 拨号宽带、云主机 |
你的这条用SNAT → 公网IP是固定的
五、常见变种
1. 让整个内网上网
iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j SNAT --to-source 223.221.189.166
2. 动态公网IP用MASQUERADE
iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -j MASQUERADE
3. 多个公网IP负载均衡
iptables -t nat -A POSTROUTING -s 172.16.213.230 -j SNAT --to-source 223.221.189.166-223.221.189.170
六、查看与验证
# 1. 查看SNAT规则
iptables -t nat -L POSTROUTING -n -v
# 2. 查看连接跟踪(看有没有转成功)
conntrack -L | grep 172.16.213.230
# 3. 测试上网
curl --interface eth0 ifconfig.me # 看到的应该是223.221.189.166
七、一句话总结
SNAT = 内网机器借公网IP出门,回来时自动还原
你这句是:只让 172.16.213.230 借 223.221.189.166 上网,其他机器不管
发表回复