自建 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 更适合地址不固定的场景。