linux作网关需开启ip转发并配置iptables:临时用echo 1 > /proc/sys/net/ipv4/ip_forward,永久改/etc/sysctl.conf;snat用masquerade或snat规则实现内网上网;dnat通过prerouting和forward链发布内网服务;排错需检查转发、规则命中及云平台源目的检查。

Linux 作为网关或中间设备时,常需开启 NAT(网络地址转换)实现内网访问外网,或对外提供内网服务。关键在于启用 IP 转发、配置 iptables(或 nftables)规则,并确保路由可达。
启用内核 IP 转发
Linux 默认禁用 IPv4 转发,需手动开启:
- 临时生效(重启后失效):echo 1 > /proc/sys/net/ipv4/ip_forward
- 永久生效:编辑 /etc/sysctl.conf,取消注释或添加 net.ipv4.ip_forward = 1,再运行 sysctl -p
- 验证是否生效:sysctl net.ipv4.ip_forward 应返回 net.ipv4.ip_forward = 1
配置 SNAT 实现内网访问互联网
适用于内网主机(如 192.168.10.0/24)通过 Linux 网关(外网接口 eth0,IP 203.0.113.5)访问公网:
TeemIp是一个免费、开源、基于WEB的IP地址管理(IPAM)工具,提供全面的IP管理功能。它允许您管理IPv4、IPv6和DNS空间:跟踪用户请求,发现和分配IP,管理您的IP计划、子网空间、区域和DNS记录,符合最佳的DDI实践。同时,TeemIp的配置管理数据库(CMDB)允许您管理您的IT库存并将您的配置项(CIs)与它们使用的IP关联起来。项目源代码位于https://github.com/TeemIP
- 确保内网主机默认网关指向该 Linux 的内网 IP(如 192.168.10.1)
- 添加 SNAT 规则(iptables):iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE
- 若外网 IP 固定,也可用 -j SNAT --to-source 203.0.113.5 替代 MASQUERADE
- 保存规则(如 Debian/Ubuntu):iptables-save > /etc/iptables/rules.v4
配置 DNAT 对外发布内网服务
例如将公网 IP 的 TCP 8080 端口映射到内网 Web 服务器 192.168.10.100:80:
- 添加 DNAT 规则:iptables -t nat -A PREROUTING -d 203.0.113.5 -p tcp --dport 8080 -j DNAT --to-destination 192.168.10.100:80
- 确保 FORWARD 链允许该流量:iptables -A FORWARD -d 192.168.10.100 -p tcp --dport 80 -j ACCEPT
- 若内网服务器回包不经过本机(非对称路由),需额外处理 conntrack 或调整其路由
检查与排错要点
常见问题多源于转发未开、规则顺序错误或防火墙拦截:
- 用 tcpdump -i eth0 port 80 查看原始包是否到达网关接口
- 执行 iptables -t nat -L -vn 和 iptables -L -vn 检查规则是否命中
- 确认内网主机能 ping 通网关内网口;网关能 ping 通外网目标(如 8.8.8.8)
- 注意:云服务器(如 AWS、阿里云)通常禁用源/目的检查,需在控制台显式关闭,否则 DNAT/SNAT 失效









