SNAT 和 DNAT
https://bbs.huaweicloud.com/blogs/416624
由网络架构的需求和设备的配置决定的。同一台设备(如你的家用路由器、企业防火墙)通常可以同时执行这两种操作。
核心:关键在于“谁主动发起连接”。
核心区分点:连接的发起方向
-
SNAT (源地址转换):当内网设备主动访问外网时发生。它修改的是数据包的“来源地址”。
-
目的:让内网众多设备共享一个或少量的公网IP上网,并隐藏内网结构。
-
你的例子完全正确:家用路由器为内部手机、电脑提供的“上网功能”,就是最典型的SNAT。
-
-
DNAT (目标地址转换):当外网设备主动访问内网某服务时发生。它修改的是数据包的“目标地址”。
-
目的:将公网IP上的某个服务(如Web、游戏端口)“映射”或“暴露”给内网的某台服务器。
-
经典场景:你在家架设了一个网站服务器(IP: 192.168.1.100),想让它能从公网访问。你会在路由器上设置一条规则:“所有发往路由器公网IP的80端口(HTTP)的请求,都转发给内网的192.168.1.100:80”。这个过程就是DNAT。
-
DNAT的核心是:修改数据包的"目标地址"和"目标端口" 实际应用场景分类
1. 端口映射/端口转发(最常见) 将公网IP的特定端口映射到内网服务器的端口。 # 常见配置:一对一端口映射 公网IP:443 → 内网服务器:443 公网IP:80 → 内网服务器:8080 公网IP:2222 → 内网服务器:22(SSH安全端口映射) 场景1:家庭NAS远程访问 家庭路由器配置: - 公网IP: 114.114.114.114 - 内网NAS: 192.168.1.100 配置DNAT规则: 1. 外部访问 114.114.114.114:5000 → 内网 192.168.1.100:5000(Web管理界面) 2. 外部访问 114.114.114.114:32400 → 内网 192.168.1.100:32400(Plex媒体服务器) 3. 外部访问 114.114.114.114:2222 → 内网 192.168.1.100:22(SSH管理) 场景2:企业对外服务发布 公司防火墙配置: - 公网IP: 202.96.128.86 - 内网服务器: 网站服务器:10.0.0.10:80 邮件服务器:10.0.0.20:25,143,993 FTP服务器:10.0.0.30:21 配置DNAT规则: iptables -t nat -A PREROUTING -d 202.96.128.86 -p tcp --dport 80 -j DNAT --to 10.0.0.10:80 iptables -t nat -A PREROUTING -d 202.96.128.86 -p tcp --dport 443 -j DNAT --to 10.0.0.10:443 iptables -t nat -A PREROUTING -d 202.96.128.86 -p tcp --dport 25 -j DNAT --to 10.0.0.20:25 iptables -t nat -A PREROUTING -d 202.96.128.86 -p tcp --dport 21 -j DNAT --to 10.0.0.30:21 2. 负载均衡分发 将公网IP的流量分发到多个内网服务器。 # 负载均衡DNAT示例 用户访问 202.96.128.86:80 ↓ 轮询分发到: 1. Web服务器1: 10.0.0.11:80 2. Web服务器2: 10.0.0.12:80 3. Web服务器3: 10.0.0.13:80 实际配置(使用iptables + ipvs): # 创建负载均衡池 ipvsadm -A -t 202.96.128.86:80 -s rr ipvsadm -a -t 202.96.128.86:80 -r 10.0.0.11:80 -m ipvsadm -a -t 202.96.128.86:80 -r 10.0.0.12:80 -m ipvsadm -a -t 202.96.128.86:80 -r 10.0.0.13:80 -m # DNAT规则 iptables -t nat -A PREROUTING -d 202.96.128.86 -p tcp --dport 80 -j REDIRECT --to-ports 8080 3. 协议转换和端口重定向 场景:将HTTP自动重定向到HTTPS # 用户访问 http://example.com:80 自动转到 https://example.com:443 iptables -t nat -A PREROUTING -d 202.96.128.86 -p tcp --dport 80 -j REDIRECT --to-port 443 # 或者转发到另一台服务器的HTTPS iptables -t nat -A PREROUTING -d 202.96.128.86 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.10:443 场景:不同协议转发 # 将SMB共享(445端口)转发到特定服务器 iptables -t nat -A PREROUTING -d 202.96.128.86 -p tcp --dport 445 -j DNAT --to-destination 10.0.0.40:445 # 将远程桌面(3389)转发到内网电脑 iptables -t nat -A PREROUTING -d 202.96.128.86 -p tcp --dport 13389 -j DNAT --to-destination 192.168.1.50:3389 4. 故障转移和高可用 当主服务器宕机时,自动将流量切换到备用服务器。
不同设备上的DNAT配置
1. 家用路由器(TP-Link/华硕等)
通过图形界面配置
位置:转发规则 → 虚拟服务器
规则1:
服务端口:8080
内部端口:80
IP地址:192.168.1.100
协议:TCP
2. Linux iptables(最灵活)
# 基本DNAT
iptables -t nat -A PREROUTING -d 公网IP -p tcp --dport 外部端口 \
-j DNAT --to-destination 内网IP:内部端口
3. 企业防火墙配置示例
华为防火墙:
思科ASA防火墙:


负载均衡器对外是“一个入口”,对内是“多个目标”,DNAT负责把每个进来的请求动态转发到不同内网服务器。
案例:
wechatmini.xx.com:443 -> 112.122.2.223:443 -> 内网192.168.80.22:443 (nginx:443) 这是一个非常典型的对外提供Web服务的架构
dns: 112.122.2.223 wechatmini.xx.com
网闸: 112.122.2.223:443 -> 192.168.80.22:443
原理:直接端口转发(DNAT)
流量方向:
-
外网访问内网:微信小程序用户访问xx服务
-
这是典型的DNAT(端口转发/反向代理)
DNS解析流程
客户端(微信小程序)访问流程:
1. 用户打开微信小程序
2. 小程序代码请求 wechatmini.xx.com
3. DNS解析过程:
客户端 → 本地DNS缓存 → 公共DNS(如114.114.114.114)
→ 权威DNS(xx.com的DNS服务器)
→ 返回 A 记录:112.122.2.223
4. 客户端获得IP地址:112.122.2.223
网络访问流程(详细步骤)
时序图:
微信小程序 公网IP 边界设备 内网Nginx
| | | |
| 1. DNS解析: wechatmini.xx.com | | |
|------------------------------>| | |
| 返回: 112.122.2.223 | | |
|<------------------------------| | |
| | | |
| 2. TCP三次握手: 112.122.2.223:443 | | |
|------------------------------>| | |
| SYN | | |
| | 3. DNAT: 112.122.2.223:443 | |
| | → 192.168.80.22:443 | |
| |--------------------------->| |
| | SYN | |
| |<---------------------------| |
| | SYN-ACK | |
|<------------------------------| ACK | |
| SYN-ACK, ACK | | |
| | | |
| 4. SSL/TLS握手 | | |
|------------------------------>| | |
| ClientHello | | |
| |--------------------------->| |
| | | 5. Nginx处理SSL |
| | | - 验证域名: wechatmini.xx.com |
| | | - 使用证书私钥解密 |
| | | - 生成会话密钥 |
| |<---------------------------| |
|<------------------------------| ServerHello, Certificate| |
| Key Exchange, Finished | ChangeCipherSpec, Finished | |
|------------------------------>| | |
| ChangeCipherSpec, Finished |--------------------------->| |
| | | |
| 6. HTTPS应用数据传输 | | |
|<==============================|============================|================================>|

浙公网安备 33010602011771号