SNATvsDNAT
本文最后更新于 2025-07-25,本文发布时间距今超过 90 天, 文章内容可能已经过时。最新内容请以官方内容为准
🔄 SNAT & DNAT 通俗解释 + 图解
一、SNAT(源地址转换)
➡️ 出门“换马甲”,内网设备集体上网
网络场景
- 公司或家庭内网有多台设备(A、B、C),通过路由器/防火墙统一访问外网网站。
原理/过程
- 内网主机A(192.168.1.10)要访问外网服务器C(8.8.8.8),请求到达网关B。
- 网关B把请求包源地址改成自己的公网IP(1.2.3.4),发给C。
- 外网C看到的请求来自1.2.3.4,回复也发往这个地址。
- 网关B收到外网回复后,再把目标还原为A的内网IP,转交回A。
一句话总结
内网设备出网时统一“穿外衣”,外网只认识网关的公网IP,看不见真实内网地址。
应用场景
- 家庭/公司路由器让所有设备“共享”一个公网IP上网。
文字图解
你家电脑(A:192.168.1.10) → 网关B(1.2.3.4) → 外网服务器C(8.8.8.8)
│ [SNAT:源192.168.1.10→1.2.3.4] │
└───────────────────→【换马甲】──────────────────→
←───────────────────────【收回复】←───────────────
│ [SNAT还原→192.168.1.10] │
生活类比
- 快递柜:你(内网设备)寄快递,柜员(网关)把你的地址换成小区门口统一编号(公网IP),朋友(外网)只能回信到快递柜,柜员再转交给你。
二、DNAT(目标地址转换)
⬅️ 门口“挂招牌”,外部访问内网服务
网络场景
- 外部用户要访问公司/家庭内网服务器(如远程桌面、搭网站等)。
原理/过程
- 外部用户C请求公网IP(B:1.2.3.4:80)。
- 网关B在PREROUTING阶段把包的目标地址改成内网服务器A(192.168.1.10:80),并转发。
- 内网A响应,B再把响应包的源地址改回公网IP(即B:1.2.3.4),发回C。
一句话总结
外部访问时“门卫带路”,用公网IP把外部请求引到内网服务器,外部看不见真实内网地址。
应用场景
- 在公网开放内网服务(如家用NAS、公司WEB服务器、远程桌面)。
文字图解
外部用户C(8.8.8.8) → 网关B(1.2.3.4:80) → 内网服务器A(192.168.1.10:80)
│ [DNAT:目标→192.168.1.10:80] │
└──────→【门卫引路】───────────────→
←────────【收服务响应】←────────────
│ [源还原→1.2.3.4] │
生活类比
- 门口招牌:你家(内网)开了个超市(服务),小区门口(网关)挂了招牌(公网IP),外人(外网)找超市,门卫把他引导到你家。外人只认识门口招牌,不知道你家真实门牌号。
三、SNAT vs DNAT 快速对比表
| 类型 | 方向 | 修改内容 | 场景 |
|---|---|---|---|
| SNAT | 内网 → 外网 | 源地址 | 多设备共享上网 |
| DNAT | 外网 → 内网 | 目标地址 | 内网服务对外开放 |
- SNAT:一般用于POSTROUTING(出网前),改“源地址”。
- DNAT:一般用于PREROUTING(入网前),改“目标地址”。
四、和Nginx等反向代理的区别和联系
- DNAT和反向代理(如Nginx、Caddy)都能把公网请求转发到内网服务,区别在于:
- DNAT是在网络层(直接改IP)自动完成,客户端“以为”自己直连服务。
- 反向代理是在应用层,可以做更多处理(缓存、认证、负载均衡等)。
- 你用Nginx反代内网网站,本质上和DNAT的思路很像:都是“门口接待、内部转发”。
五、总结归纳
- SNAT = 内网“统一马甲”,所有出网流量看起来来自一个公网IP。
- DNAT = 公网“门口引路”,所有进来的请求被门卫转发到内网真实地址。
- 理解了这两个NAT技术,你就能理解绝大多数路由器/防火墙是怎么实现内外网互通和服务暴露的。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 Unic
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果