dnat核心是将公网ip端口流量精准转发至内网服务器ip和端口,适用于外部访问web、ssh等场景;需确保nat网关绑定eip、内网服务器运行且路由/安全组放行、避免直连公网ip导致路径不对称。

配置DNAT让公网用户访问内网服务,核心是把公网IP的某个端口流量,精准转发到内网服务器的对应IP和端口。操作本身不难,但关键在规则匹配、网络路径和安全联动。
明确DNAT适用场景和前提
DNAT适用于“外部主动访问内网服务”,比如用域名或公网IP打开Web页面、连SSH、访问数据库端口等。它不解决内网用户自己通过公网地址访问内网服务的问题(即“NAT回流”问题,需额外处理)。配置前请确认:
- 已创建公网NAT网关,并成功绑定至少一个弹性公网IP(EIP)
- 目标内网服务器(如ECS)处于运行中,且所在子网路由表指向该NAT网关(或已配置默认路由)
- 内网服务器操作系统防火墙、云平台安全组均已放行对应端口(如TCP 80、443、22等)
- 避免内网服务器同时绑定公网IP——否则请求进DNAT、响应走直连,导致路径不对称、连接失败
添加DNAT规则的关键参数设置
在云控制台(如天翼云、华为云等)进入NAT网关详情页 → DNAT页签 → 添加规则。重点填好以下几项:
- 弹性IP:选你已绑定的公网IP,这是用户实际访问的目标地址
- 类型:推荐选“VPC内主机或网卡”,再从下拉列表中指定具体云主机和其内网网卡IP
-
端口设置:
- 若只映射单个服务(如Web),选“具体端口”,填“公网端口=80”,“内网端口=8080”
- 若需整机透传(如远程桌面、游戏服务器),可选“任意端口”,此时所有发往该EIP的流量都转给这台内网主机
- 协议:按服务实际使用协议选择TCP或UDP(HTTP/HTTPS/SSH选TCP;DNS/视频流可能需UDP)
常见问题与避坑提醒
配置完成后仍不通?大概率卡在这几个地方:
- 端口冲突:同一EIP上不能为不同内网服务器配置相同公网端口(如两个DNAT规则都用80端口)
-
内网服务未监听正确地址:检查内网服务器是否监听
0.0.0.0:8080而非127.0.0.1:8080,否则收不到转发来的请求 - 回流失效:内网用户用公网IP或域名访问自己部署的服务时失败,属于典型NAT回流问题,需在网关或内网DNS层面做本地解析(如Hosts或内网DNS返回内网IP)
- 状态未生效:规则添加后显示“运行中”才算真正启用,部分平台有1–2分钟延迟,勿立即测试
命令行方式(Linux iptables参考)
如果你在自建Linux网关上配置,常用命令如下(以将公网IP 203.0.113.10的80端口映射到192.168.1.100:8080为例):
- 目的地址转换(PREROUTING链):
iptables -t nat -A PREROUTING -d 203.0.113.10 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080 - 源地址伪装(确保响应能回包):
iptables -t nat -A POSTROUTING -s 192.168.1.100 -j SNAT --to-source 203.0.113.10 - 开启IPv4转发:
echo 1 > /proc/sys/net/ipv4/ip_forward并写入/etc/sysctl.conf持久化










