关键在于NAT规则、内核转发与路由路径三者协同:必须开启IPv4转发(net.ipv4.ip_forward=1),配置iptables nat表POSTROUTING链的SNAT或MASQUERADE规则,放行FORWARD链流量,并确保内网服务器默认网关指向网关内网IP、网关自身路由可达公网。

开启IPv4转发:让Linux真正当“路由器”
默认Linux不转发非本机地址的数据包,这是第一步,否则后面全无效。
-
临时启用:
echo 1 > /proc/sys/net/ipv4/ip_forward -
永久生效:编辑
/etc/sysctl.conf,确保含net.ipv4.ip_forward = 1,再执行sysctl -p - 验证是否开启:
sysctl net.ipv4.ip_forward返回1即成功
配置NAT表POSTROUTING链:做源地址转换
这一条规则决定“内网流量出去时,源IP替换成谁”。必须用 -t nat 指定表,并严格在 POSTROUTING 链上操作。
开箱即用的技能链路由引擎。13 条预定义链覆盖搜索、开发、审查、MLOps、法律、创意等场景,三层路由架构(触发词→SAD反馈→DAG编排),recall@10=96.97%。配置驱动(chains.yaml),零代码扩展。pip install skill-weave-chains 一键安装。
- 若网关外网IP固定(如阿里云ECS绑定EIP):
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j SNAT --to-source 203.0.113.45 - 若外网IP动态(如PPPoE拨号、DHCP获取):
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ppp0 -j MASQUERADE - 注意:
-s是内网网段,-o是出口网卡名(用ip link show确认),别写错接口
放行FORWARD链:允许数据包被转发
如果iptables默认策略是 DROP(很多生产环境如此),仅配NAT还不够——包在到达NAT前就被拦在FORWARD链了。
- 允许内网发起的连接出去:
iptables -A FORWARD -s 192.168.10.0/24 -j ACCEPT - 允许响应流量回来(已建立连接):
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT - 可选加固:限制只转发到外网接口方向:
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT(eth1=内网口,eth0=外网口)
确保路由表指向正确:内网机器和网关都要对
路由表决定“包往哪发”,它和iptables规则是并行协作的关系:
-
内网服务器上:默认网关必须设为网关机器的内网IP,例如:
ip route add default via 192.168.10.1或写入网卡配置文件 -
网关机器本身:它的路由表要能正常出外网(比如有默认路由
default via 203.0.113.1 dev eth0),可通过ip route show查看 - 云环境额外注意(如阿里云VPC):需在控制台添加一条VPC路由,目标
0.0.0.0/0,下一跳指向该网关ECS实例


















