Linux NAT 转发配置实践

1次阅读

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

Linux NAT 转发配置实践

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)访问公网:

  • 确保内网主机默认网关指向该 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 -vniptables -L -vn 检查规则是否命中
  • 确认内网主机能 ping 通网关内网口;网关能 ping 通外网目标(如 8.8.8.8)
  • 注意:云服务器(如 AWS、阿里云)通常禁用源/目的检查,需在控制台显式关闭,否则 DNAT/SNAT 失效
text=ZqhQzanResources