NAT、端口映射和反向代理到底有什么区别

2026-10-9 / 0 评论 / 1 阅读

NAT、端口映射和反向代理到底有什么区别 原创示意图

NAT、端口映射和反向代理都可能出现在“从公网访问家中服务器”的链路上,但它们工作的层次不同。把三者混在一起,会出现明明域名解析正确却仍然访问不了的情况。

一、NAT 与 NAPT

基础 NAT 负责在一组 IP 地址之间转换。家庭路由器更常用 NAPT/PAT:多台内网设备共享一个公网 IPv4,并用 TCP/UDP 端口区分连接。终端主动访问公网时,路由器建立状态表,让返回流量能回到正确的内网设备。

公网主动发起的新连接没有现成状态,路由器不知道该交给谁,所以需要端口映射(Port Forwarding/DNAT),例如:

公网 TCP 4430  →  192.168.2.20 TCP 443
公网 TCP 10443 →  192.168.2.30 TCP 443

端口映射只根据协议、地址和端口转发,不会理解 HTTP 域名或网页路径。外部使用非标准端口时,访问者通常必须写 https://域名:4430。

二、反向代理做什么

反向代理是应用层入口。Nginx 接收 HTTP/HTTPS 请求后,可以根据域名把请求送到不同后端:

server {
    listen 443 ssl;
    server_name blog.example.com;

    location / {
        proxy_pass http://192.168.2.20:2080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

同一个 443 端口可以按 server_name 承载多个网站,并集中处理证书。但浏览器必须先到达这台反向代理;如果家庭宽带的 443 被封、没有公网地址或上级 NAT 不允许入站,仅配置 Nginx 不能突破网络限制。

三、DDNS 解决什么、不解决什么

动态 DNS 只是在公网 IP 改变后更新域名记录。它不负责开放端口,也不保证运营商允许入站。排查时比较路由器 WAN 地址与公网查询到的地址:如果 WAN 是私网或共享地址,可能存在光猫路由、上级路由或运营商 CGNAT。

双重 NAT 场景需要在每一层正确转发,或把其中一层改桥接/DMZ,但改动前要评估管理和安全。CGNAT 通常无法由用户自行做入站映射,可考虑有公网入口的云服务器、IPv6、VPN 组网或隧道方案。

四、怎样选架构

  • 只有一个非 HTTP 服务:路由器端口映射最直接,但要严格限制来源并强化认证。
  • 多个网站共用标准 HTTPS:让反向代理占用一个公网 443,再按域名分流。
  • 家宽没有 80/443:使用 域名:非标准端口,或由具备标准端口的云服务器反代/隧道回家。
  • 管理面板、路由器、虚拟化平台:优先通过 VPN 访问,不建议直接暴露全网。

反向代理到家庭网络时,连接方向、证书终止位置和健康检查要写清。若云端终止 TLS,再用明文 HTTP 穿越不可信公网,链路中段不再受 TLS 保护;应使用 VPN、加密隧道,或让代理到后端仍走 HTTPS。

五、按层检查

先用 nslookup/dig 确认域名,再用 nc -vz 域名 端口 或 Test-NetConnection 检查 TCP。到达代理后看访问日志和错误日志,再从代理机直接 curl 后端。最后检查应用是否生成了错误的跳转端口、Host 头和 X-Forwarded-Proto。

不要把“端口通”当成“服务安全”。公网入口应启用更新、强认证、访问控制、日志和备份;能放进 VPN 的管理服务尽量不直接发布。

本文为中文原创学习整理。地址与端口转换原理参考 IETF RFC 3022:Traditional NAT;反向代理指令参考 Nginx 官方 ngx_http_proxy_module。

评论一下?

OωO
取消