linux配置snat实现内网共享上网需三步:开启ip转发(echo 1 > /proc/sys/net/ipv4/ip_forward或修改sysctl.conf并sysctl -p)、在nat表postrouting链配置snat/masquerade规则、放行forward链流量(含正向和返回连接)。

Linux 配置 SNAT 实现内网共享上网,关键就三件事:打开 IP 转发、写对 NAT 规则、放行转发流量。缺一不可,90% 的“配完不通”都卡在第一步。
开启 IPv4 转发功能
Linux 默认不转发非本机数据包,必须手动启用:
- 临时生效(重启后失效):
echo 1 > /proc/sys/net/ipv4/ip_forward - 永久生效:编辑
/etc/sysctl.conf,确保含net.ipv4.ip_forward = 1,然后执行sysctl -p
确认内外网接口与地址
先用 ip a 查清哪块网卡接内网、哪块接外网,例如:
- 内网口(如
ens33)IP 是192.168.10.1/24 - 外网口(如
ens32)获取到公网 IP(固定或动态) - 内网主机需把默认网关设为
192.168.10.1,DNS 可设8.8.8.8
配置 SNAT 或 MASQUERADE 规则
进 nat 表,在 POSTROUTING 链添加规则:
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 外网 IP 固定(如云服务器):
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens32 -j SNAT --to-source 203.0.113.45 - 外网 IP 动态(如 DHCP 或 PPPoE):
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o ens32 -j MASQUERADE
注意:SNAT 只能用于 POSTROUTING;MASQUERADE 是 SNAT 的自动版,适合 IP 不固定的场景,更推荐新手用。
放行 FORWARD 链流量
只改源地址还不够,防火墙默认会拦住转发包,需显式放行:
- 允许内网 → 外网:
iptables -I FORWARD -i ens33 -o ens32 -j ACCEPT - 允许返回流量(已建立连接):
iptables -I FORWARD -i ens32 -o ens33 -m state --state RELATED,ESTABLISHED -j ACCEPT
这两条缺一不可,否则 ping 得通但网页打不开。










