首页/云/云网络与负载均衡速查/自建 NAT 出口(iptables)

自建 NAT 出口(iptables)

没有托管 NAT 网关时,可以用一台带 EIP 的实例做出口:开启内核转发、配置 MASQUERADE 源地址转换,内网实例把默认路由指向该机器。灵活且成本可控,但高可用与吞吐上限需要自己承担。

自建 NAT 出口怎么用

没有托管 NAT 网关时,可以用一台带 EIP 的实例当出口:在它上面开启内核转发,用 iptables 做源地址转换(MASQUERADE),内网实例把默认路由指向这台机器。这套方案配置直观、成本可控,适合小规模环境或临时过渡,但高可用、吞吐上限与运维责任都要自己承担。

基本信息

适用平台Linux(iptables / nftables),出口机需具备公网访问能力
客户端侧把默认路由或目标路由指向出口机的内网地址
出口机侧开启 ip_forward、配置 MASQUERADE、放行 FORWARD 链
持久化sysctl 参数与 iptables 规则都要做开机恢复
容量上限受出口机规格的带宽与转发能力限制

典型使用场景

  • 小规模环境临时上网,不想单独购买 NAT 网关
  • 托管 NAT 网关不支持的目标地址或协议,需要自定义处理
  • 灰度验证出口链路质量,用一台机器横向对比
  • 测试环境中快速搭建受控出口,用完即销毁
  • 作为托管 NAT 的备份路径,演练切换流程

出口机配置

出口机配置
# 1) 开启内核转发(临时生效)
sudo sysctl -w net.ipv4.ip_forward=1
# 持久化:在 /etc/sysctl.d/99-nat.conf 写入 net.ipv4.ip_forward = 1
# 2) 源地址转换,eth0 为公网网卡
sudo iptables -t nat -A POSTROUTING -s 10.10.0.0/16 -o eth0 -j MASQUERADE
# 3) 放行转发流量,注意有状态放行要允许回包
sudo iptables -A FORWARD -s 10.10.0.0/16 -j ACCEPT
sudo iptables -A FORWARD -d 10.10.0.0/16 -j ACCEPT
# 4) 客户端侧:把默认路由指向出口机内网地址
ip route replace default via 10.10.0.10

自建与托管 NAT

维度自建 NAT(iptables)托管 NAT 网关
可用性单机故障即断网,需自行冗余厂商保证多可用区
吞吐受实例规格限制按规格购买,弹性更好
运维规则、持久化、监控全自己做控制台与云监控覆盖
成本一台实例的价格按规格与流量计费
自建出口的吞吐上限取决于出口机规格,扩容需要换规格或做多机分流;单点故障会切断整个环境的外网访问。
除 MASQUERADE 外也可用 SNAT 指定固定源地址,二者对出接口变化的适应能力不同:MASQUERADE 更适合地址不固定的场景。

易错点

  • iptables 规则与 sysctl 未持久化,出口机重启后整个环境失去外网访问
  • 只开启转发未放行 FORWARD 链,回包被本机 iptables 丢弃,表现为单向通
  • 出口机安全组没有限制来源,任何来源都能借它做转发,形成开放代理
  • 单台出口机承载全部流量,机器故障或规格触顶后所有实例同时断网

数据来源与参考

  • iptables 官方文档(MASQUERADE)
  • Linux 内核文档(ip_forward)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌