EIP还是NAT网关?华为云内网服务器上网方案与五个常见坑
在华为云上部署业务时,几乎每个人都会遇到同一个问题:VPC 里的服务器只有私网 IP,怎么让它访问公网(拉镜像、装依赖、调第三方 API),又怎么让外部用户访问到它?华为云给出的主要答案有两个:弹性公网IP(EIP) 和 公网NAT网关。本文结合官方文档,梳理两者的原理、计费方式、选型思路,以及实际运维中最容易踩的五个坑。
一、两种方式的本质区别
- EIP 直接绑定:一台云服务器独占一个公网 IP,出入方向都走这个 IP,简单直接。
- 公网NAT网关:多台云服务器共享一个或多个 EIP。其中 SNAT 负责“出”,让子网内的主机通过共享 EIP 访问公网;DNAT 负责“入”,通过 IP 映射(所有端口)或端口映射(具体端口)把公网请求转发到内网主机。
官方 FAQ 的说法很明确:直接绑定 EIP 是独占 IP 的方式,NAT 网关则允许多台云服务器共享 EIP。
二、EIP 的带宽计费怎么选
EIP 有包年/包月和按需计费两种模式,按需计费下又分三种方式:
| 方式 | 特点 | 适合场景 |
|---|---|---|
| 按带宽计费 | 按指定带宽大小和使用时长计费,不限流量 | 流量大或访问量稳定 |
| 按流量计费 | 按实际出云流量计费,带宽只作限速 | 流量低或波动大 |
| 加入共享带宽 | 多个 EIP 共用一条带宽,按共享带宽计费 | 多业务高峰错开,需节约成本 |
几个容易忽略的细节:
- 华为云只对出云方向(上行)的带宽/流量收费,入云流量不收费。
- 按需计费的 EIP 如果未绑定实例又未释放,会收取 IP 保有费。
- 按带宽计费时,即使 ECS 关机,带宽费照常收取;按流量计费则是不产生流量就不收流量费。
- 文档给出的经验参考:带宽大于 5 Mbit/s 且带宽使用率大于 20% 时,一般按带宽计费更划算。可以先用云监控看一段时间的带宽使用率再决定。
- 按流量计费的 EIP 有单个带宽峰值上限(文档当前写明为 300 Mbit/s,且同区域同账号有总量限制,以控制台公告为准),对带宽有更高或有保障要求的业务应使用按带宽计费。
共享带宽适合“一个项目有多个 EIP”的场景:几台 Web 服务器、NAT 网关上的 EIP 一起加入同一条共享带宽,峰谷互补,账单也更清晰。注意可以加入共享带宽的是按需计费的 EIP。
三、公网NAT网关:SNAT 与 DNAT
SNAT 规则 按子网或网段配置。官方约束是:VPC 内每个子网只能添加一条 SNAT 规则,多个子网需要上网就建多条 SNAT 规则,可以共享一个或多个 EIP。
DNAT 规则 一条对应一个云主机的一个端口。端口类型有两种:
- 所有端口:IP 映射,相当于给云主机配了一个 EIP;
- 具体端口:端口映射,例如把 EIP 的 8080/TCP 转发到 192.168.1.10:80。
配置完成后,规则状态为“运行中”才表示创建成功。
安全组的作用方向也要分清:SNAT 场景下,内网主机主动发起访问,需要的是安全组出方向规则放行(默认出方向通常全放通,若被收紧过要注意);DNAT 场景下,外部主动访问内网主机,需要的是入方向规则放行。安全组作用于云服务器网卡,网络 ACL 作用于子网,两者叠加可以实现更精细的控制,排查时两层都要看。
四、该选哪种?
- 单台服务器、需要独立公网地址(例如对外 Web、需固定 IP 做白名单):直接绑定 EIP 最简单。
- 大量内网服务器只需出网(装包、拉镜像、调用外部 API):公网NAT网关 + SNAT,公网 IP 不暴露在每台主机上,攻击面更小,也便于统一出口 IP 给第三方加白名单。
- 少量端口对外提供服务、又想节省 EIP:NAT 网关 + DNAT 端口映射。
- 多个 EIP 流量峰谷互补:再叠加共享带宽控制成本。
五、上网验证与排查命令
先在内网服务器上确认实际出口 IP,看它是 EIP 还是 NAT 网关上的 EIP:
# 查看公网出口 IP
curl -s ifconfig.me; echo
curl -s https://ipinfo.io/ip; echo
# 测试 DNS 与连通性(区分“DNS 坏了”还是“出不去”)
nslookup mirrors.huaweicloud.com
curl -I -m 5 https://mirrors.huaweicloud.com
然后检查操作系统内的路由和防火墙,排除“云上配置没问题、是系统内部挡住了”的情况:
# 默认路由应指向子网网关(通常是子网的 .1 地址)
ip route
# default via 192.168.1.1 dev eth0 ...
# 查看 iptables / firewalld 是否拦截
iptables -L -n -v
iptables -t nat -L -n
systemctl status firewalld
DNAT 不通时,确认服务确实在监听,且不是只监听在 127.0.0.1:
ss -tlnp | grep 80
# 期望看到 0.0.0.0:80 或 192.168.x.x:80,而不是 127.0.0.1:80
六、五个常见坑
坑1:同时绑了 EIP 和配置了 NAT 规则
官方说明:ECS 同时配置 EIP 和 SNAT 时,优先走 EIP。所以“SNAT 出口 IP 加了白名单却不生效”,往往是机器上还绑着一个 EIP。更隐蔽的是 DNAT + EIP:入方向走 DNAT 的 EIP,出方向却优先走 ECS 自身绑定的 EIP,入出 IP 不一致导致不通。官方建议不要让云服务器同时使用公网NAT网关和直接绑定 EIP。
坑2:路由表里没有指向 NAT 网关的路由
NAT 网关能否处理流量,取决于 VPC 关联的路由表中是否有指向它的路由(0.0.0.0/0 或指定网段)。如果子网关联的是自定义路由表,尤其需要逐个检查。
坑3:DNAT 配好了,安全组没放通
DNAT 只负责转发,不具备访问控制能力。流量经过 NAT 网关后,仍要经过 ECS 安全组和网络 ACL 的过滤,需要在入方向放通对应协议、端口和客户端源 IP。想限制访问范围,应该靠安全组和网络 ACL,而不是指望 NAT 网关。
坑4:SNAT 与全端口 DNAT 共用一个 EIP
SNAT 和 DNAT 可以共用 EIP 节省资源,但全端口 DNAT 会占用全部端口,SNAT 就无端口可用。文档明确:SNAT 规则不能和全端口的 DNAT 规则共用 EIP。另外,同一子网只能有一条 SNAT 规则,规划子网时要提前考虑。
坑5:计费方式没想清楚
常见情况包括:按流量计费却没设合理的带宽上限,遇到突发流量账单激增;释放了实例却忘了释放 EIP,持续产生 IP 保有费;ECS 关机以为不收费,结果按带宽计费的 EIP 仍在计费。建议定期在费用中心核对账单,并结合云监控设置带宽告警。
七、总结
- 单机、需独立公网 IP:直接绑定 EIP。
- 多机只出不入:公网NAT网关 + SNAT,每个子网一条规则。
- 少量端口对外:DNAT 端口映射,并在安全组放通对应端口和源 IP。
- 流量稳定选按带宽计费,流量小且波动大选按流量计费,多 EIP 错峰用共享带宽。
- 不要让同一台 ECS 同时使用 EIP 和 NAT 规则,避免出口不一致。
- 排查顺序:出口 IP → 系统路由/防火墙 → VPC 路由表 → NAT 规则状态 → 安全组/网络 ACL → 服务监听。
把这几条记住,内网服务器“上网”和“被访问”的问题基本都能快速定位。具体限制与参数以华为云官方文档和控制台显示为准。
- 点赞
- 收藏
- 关注作者
评论(0)