核心是配置SNAT:先开启IP转发(临时用echo 1 > /proc/sys/net/ipv4/ip_forward,永久改/etc/sysctl.conf并sysctl -p),再用iptables -t nat -A POSTROUTING设置SNAT或MASQUERADE规则,最后放行FORWARD链流量并保存规则。

要让局域网内多台服务器共用一个公网IP访问外网,核心是配置SNAT(源地址转换),关键动作有三步:开启IP转发、设置NAT规则、确保流量能被正确转发。
开启IP转发功能
Linux默认不转发数据包,必须显式启用。这一步是网关工作的基础:
- 临时开启(重启后失效):echo 1 > /proc/sys/net/ipv4/ip_forward
- 永久生效:编辑/etc/sysctl.conf,添加或修改为net.ipv4.ip_forward = 1,再执行sysctl -p加载
配置SNAT规则
使用iptables -t nat在POSTROUTING链上做源IP替换。根据外网接口IP是否固定,选不同方式:
- 外网IP固定(如云服务器):iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j SNAT --to-source 203.0.113.45
- 外网IP动态(如ADSL拨号):iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth1 -j MASQUERADE(自动取eth1当前IP,更稳妥)
注意:-s指定需转换的内网网段,-o指定通往公网的出口网卡名(如eth1、ens33等,需用ip a确认)。
放行FORWARD链流量
仅改地址还不够,Linux防火墙默认会拦住转发包。需允许内网→外网及返回的流量通过:
- 允许内网发往外网:iptables -I FORWARD -s 192.168.1.0/24 -j ACCEPT
- 允许外网回应内网:iptables -I FORWARD -d 192.168.1.0/24 -m state --state RELATED,ESTABLISHED -j ACCEPT
推荐用state模块匹配已建立连接,比单独开端口更安全简洁。
验证与保存
配置完立即测试:
- 从局域网机器ping公网地址(如8.8.8.8)或curl公网网站
- 在网关上执行iptables -t nat -L -n -v,确认POSTROUTING规则计数器有增长
- 规则持久化(避免重启丢失):iptables-save > /etc/sysconfig/iptables(CentOS/RHEL)或iptables-save > /etc/iptables/rules.v4(Debian/Ubuntu)


















