SNAT 与 DNAT 的区别
SNAT 改的是源地址,解决「内网主机怎么出公网」;DNAT 改的是目的地址,解决「公网请求怎么进到内网服务」。两者方向相反、用途完全不同:遇到对外提供服务不通就去查 DNAT 链条,遇到内网访问外网不通就去查 SNAT 链条。排障时先把「谁主动发起连接」这一个问题确定下来,方向判断对了,排查范围立刻缩小一半。
对比
| 维度 | SNAT | DNAT |
|---|---|---|
| 转换对象 | 源地址(内网到公网) | 目的地址(公网到内网) |
| 典型用途 | 实例访问外部 API、拉取依赖 | 公网端口映射到内网服务 |
| 生效范围 | 按源网段(子网) | 按公网端口映射 |
| 常见问题 | 来源未覆盖、连接数上限 | 端口冲突、安全组放行错位 |
基本信息
| 方向判断 | 内网主动出访用 SNAT,公网主动入访用 DNAT |
|---|---|
| 配置位置 | 都在 NAT 网关上,按子网或端口分别定义 |
| 共用 EIP | 同一 EIP 可同时承载两个方向,需规划端口 |
| 排障顺序 | 先定方向,再逐段核对映射、路由与安全组 |
典型使用场景
- 容器集群拉取镜像与依赖,用 SNAT 统一出网并隐藏内部地址
- 把内部管理后台通过 DNAT 映射到指定公网端口,配合来源白名单访问
- 内网服务调用第三方 API 出现超时,排查 SNAT 的连接数与带宽
- 公网用户访问服务异常,排查 DNAT 映射与私网端口放行
同一网关承载两个方向
同一网关承载两个方向
SNAT:10.10.1.0/24 → 经 eip-01 访问公网
DNAT:eip-01:443 → 10.10.1.20:8443(对外提供 API)
注意:同一 EIP 的同一端口不能既做映射又做其他用途先明确「谁主动发起」,再决定排查 SNAT 还是 DNAT 链条。
两个方向共用的注意点
同一 NAT 网关同时承载 SNAT 与 DNAT 时,规划重点是端口与地址的复用关系:DNAT 占用的公网端口要和 SNAT 使用的源端口分开考虑,避免高并发时互相挤压;绑定多个 EIP 时还要明确哪些用于出访、哪些用于映射,不要出现同一个地址既承载入向映射又承担大流量出访。变更前把映射表与 SNAT 来源网段列成一张清单,任何调整都回到清单上核对,能避免绝大多数方向性错误。