使用 iptables + NAT 把一台有网的机器(称为 A 网关机)变成内网中其他机器(B1、B2...)的上网跳板 场景目标你有这样一个环境[公网/互联网] ↑ 有网机器A ↙ ↘ B1无网 B2无网目标让 B1/B2 通过访问 A就能访问公网和真正联网一样。技术原理iptables NAT伪装我们用 A 做一个「NAT 网关」A 拥有公网连接通过eth0接口A 和内网 B1/B2 相连通过eth1接口使用iptables伪装 NAT 出口实现「出口地址伪装 内网转发」启用 IP 转发功能操作步骤Debian/Ubuntu/CentOS 都适用第一步确认网络连接拓扑假设主机IP地址网络作用是否能访问公网A172.16.80.6内网机器、有公网访问能力✅ 有网B172.16.80.94内网机器、无公网访问能力❌ 无网但能 ping 通 A确保 A 和 B1、B2 能互 ping 通。第二步A 机开启 IP 转发功能# 临时生效 sudo sysctl -w net.ipv4.ip_forward1 # 永久生效 echo net.ipv4.ip_forward1 | sudo tee -a /etc/sysctl.conf sudo sysctl -p第三步添加 NAT 转发规则A 的出口接口假设是eth0# 找到默认网关接口 ip route | grep default # 示例输出default via 172.16.80.1 dev eth0 # 那就是 eth0 # 添加 NAT 规则 sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # 允许流量转发 sudo iptables -A FORWARD -i eth0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -s 172.16.80.0/24 -j ACCEPT第四步保存iptables 规则可选# Debian/Ubuntu sudo apt install iptables-persistent sudo netfilter-persistent save # Centos sudo yum install iptables-services sudo service iptables save第五步B 机配置网络静态 IPsudo ip route add default via 172.16.80.6第六步验证ping 172.16.80.6 # ping A 网关 ping 8.8.8.8 # ping 公网 DNS看是否能出网 curl http://www.baidu.com # 真实测试是否能解析 连网问题把 B 机172.16.80.94的默认网关改为 A172.16.80.6之后是否还能从其他机器 SSH 连接到 B答案是取决于发起 SSH 的“控制端”机器的 IP 是否与 B 处于同一个子网。假设有机器C如果C与B在同一个子网则不受影响。如果C与B在不同的网段就会连接不通。✅ 如何解决这个问题✅ 方法一C 和 B 保持在同一网段最简单比如 C、B 都是 172.16.80.x且掩码是 255.255.255.0那么不会有问题。✅ 方法二配置 B 机的静态路由规则更灵活你可以让 B “有条件地”通过 A 上网其他地址走正常路由。在 B 上设置# 先确定网卡名 ip link # 假设是 ens3则执行以下命令 sudo ip route del 172.16.10.0/24 sudo ip route add 172.16.10.0/24 via 172.16.80.254 dev ens3其中172.16.80.254是你当前网段的真实默认网关可以按以下方式查看ip route | grep default比如default via 172.16.80.254 dev ens3 # 当已经配置完80.6做网络代理后此处可能会出现两个。要使用不是80.6的那一个那就用它做via的地址。更新以上方法为临时生效遇到机器重启配置就会失效。下面记录一种稳定操作。保持A机的操作不变只对B机的配置操作变更如下# 显示网络连接 name nmcli connection show # 1. 永久添加默认路由优先级设为 50数值越小优先级越高 sudo nmcli connection modify 有线连接 2 ipv4.routes 0.0.0.0/0 172.16.80.6 50 # 2. 永久添加办公网段路由 sudo nmcli connection modify 有线连接 2 ipv4.routes 172.16.10.0/24 172.16.80.254 50 # 3. 禁止 DHCP 下发默认网关避免出现两条默认路由 sudo nmcli connection modify 有线连接 2 ipv4.never-default yes # 4. 忽略 DHCP 下发的 DNS避免被覆盖 sudo nmcli connection modify 有线连接 2 ipv4.ignore-auto-dns yes # 5. 永久添加公共 DNS sudo nmcli connection modify 有线连接 2 ipv4.dns 8.8.8.8 # 6. 刷新连接使配置生效 sudo nmcli connection up 有线连接 2 # 7. 验证路由表是否干净应只有手动配置的路由 ip route show # ⚠️ 前提条件网关必须开启 NAT 转发 # 如果网关是 Linux 服务器需在网关机上执行以下操作 # 确认 IP 转发已开启输出为 1 才正常 cat /proc/sys/net/ipv4/ip_forward # 若为 0则开启并永久生效 echo net.ipv4.ip_forward 1 /etc/sysctl.conf sysctl -p # 添加 NAT 规则eth0 替换为网关的出口网卡名 iptables -t nat -A POSTROUTING -s 172.16.80.0/24 ! -d 172.16.80.0/24 -o eth0 -j MASQUERADE # 保存 iptables 规则重启后永久生效 iptables-save /etc/sysconfig/iptables systemctl enable iptables