SNAT 和 DNAT 区别
SNAT(Source Network Address Translation,源地址转换)和 DNAT(Destination Network Address Translation,目的地址转换)是 NAT 网关的两种核心功能。
它们的根本区别在于修改的是数据包里的“源 IP”还是“目的 IP”,以及由此决定的流量方向和应用场景。
简单的一句话总结:
- SNAT:让内网机器主动访问外网(内 →→ 外)。

- DNAT:让外网用户主动访问内网机器(外 →→ 内)。

1. 深度解析:SNAT (源地址转换)
- 全称:Source Network Address Translation
- 修改对象:数据包的 源 IP 地址 (Source IP)。
- 流量方向:内部 →→ 外部 (Outbound)。
- 工作原理:
- 内网服务器(私网 IP,如
192.168.1.5)发起请求访问互联网(如www.google.com)。 - 数据包到达 NAT 网关。
- NAT 网关将数据包的源 IP 从
192.168.1.5替换为 NAT 网关的公网 IP(如203.0.113.1)。 - 互联网服务器收到请求,认为是
203.0.113.1发来的,于是回复给这个公网 IP。 - NAT 网关收到回复,根据记录表,将目的 IP 还原为
192.168.1.5,转发给内网服务器。
- 内网服务器(私网 IP,如
- 核心目的:
- 节省公网 IP:多台内网服务器可以共享一个公网 IP 上网。
- 隐藏内网结构:外部只能看到 NAT 网关的 IP,不知道内网有多少台机器、IP 是多少,提高安全性。
- 单向访问控制:允许内网主动连外网,但阻止外网主动连内网(因为没有映射关系,外网发起的包会被丢弃)。
- 典型场景:
- 私有子网中的数据库服务器需要下载系统补丁。
- 后端应用服务器需要调用微信支付/支付宝 API。
- 员工办公网访问互联网。
2. 深度解析:DNAT (目的地址转换)
- 全称:Destination Network Address Translation
- 修改对象:数据包的 目的 IP 地址 (Destination IP)。
- 流量方向:外部 →→ 内部 (Inbound)。
- 工作原理:
- 互联网用户发起请求,访问 NAT 网关的公网 IP(如
203.0.113.1)的特定端口(如 8080)。 - 数据包到达 NAT 网关。
- NAT 网关查找配置规则,发现“访问
203.0.113.1:8080的请求应转发给内网192.168.1.5:80”。 - NAT 网关将数据包的目的 IP 从
203.0.113.1替换为192.168.1.5,目的端口从8080替换为80。 - 内网服务器收到请求,处理后将响应发回给 NAT 网关。
- NAT 网关将响应的源 IP 还原为公网 IP
203.0.113.1,返回给用户。
- 互联网用户发起请求,访问 NAT 网关的公网 IP(如
- 核心目的:
- 端口映射:将公网 IP 的某个端口映射到内网服务器的某个端口。
- 暴露服务:让没有公网 IP 的内网服务器能被互联网访问,同时隐藏真实的内网 IP。
- 典型场景:
- 将公网 IP 的 80 端口映射到内网 Web 服务器的 80 端口,提供网站服务。
- 将公网 IP 的 3389 端口映射到内网 Windows 服务器的远程桌面端口,方便运维管理(需注意安全风险)。
- 游戏服务器部署在内网,通过 DNAT 让玩家连接。
3. 核心区别对比表

4. 通俗类比:公司前台
想象一家大公司(VPC),员工坐在办公室里(内网服务器),外面是街道(互联网)。公司只有一个对外的总机号码(NAT 网关公网 IP)。
-
SNAT 场景(员工打电话出去):
- 员工 A(内网 IP)想给外面的客户打电话。
- 他不能直接用分机号打出去,必须通过前台(NAT 网关)。
- 前台用公司总机号码帮员工拨出电话。
- 客户看到的是公司总机号码,不知道是哪个员工打的。
- 客户回电只能打到总机,如果前台没有记录,无法转接给特定员工(外部无法主动发起)。
- 这就是 SNAT:内网主动访问外网,隐藏内部身份。
-
DNAT 场景(客户打电话进来找特定部门):
- 公司规定:拨打总机号码按
1转销售部(内网服务器 A),按2转技术部(内网服务器 B)。 - 外面的客户拨打总机号码,并输入分机号(端口映射)。
- 前台(NAT 网关) 接到电话,根据规则,将电话转接到具体的内部分机(修改目的地址)。
- 这样,客户不需要知道销售部的直接分机号,只要知道总机和规则就能联系到内部。
- 这就是 DNAT:外网主动访问内网,通过映射规则找到具体目标。
- 公司规定:拨打总机号码按
5. 在云厂商中的实际应用
在阿里云、AWS、腾讯云等控制台中:
- 创建 NAT 网关时:通常默认开启或配置 SNAT 条目(让子网能上网)。
- 配置 DNAT 时:需要手动添加 DNAT 条目(端口映射),指定
公网IP:端口映射到私网IP:端口。 - 注意:为了安全,生产环境中通常尽量少用 DNAT 直接暴露单个 ECS。如果需要对外提供服务,最佳实践是使用 负载均衡 (SLB/ELB) + NAT 网关 (仅 SNAT) 的组合,或者将 Web 服务器放在公有子网配合安全组,而数据库等核心资产永远只配 SNAT,不配 DNAT。
总结
- 想让你的服务器去访问百度、谷歌、API 接口? →→ 用 SNAT。
- 想让互联网用户来访问你的网站、游戏、数据库? →→ 用 DNAT(但要注意安全加固)。
浙公网安备 33010602011771号