什么是 NAT?家用路由器与端口转发
NAT(网络地址转换)会在网络边界处修改数据包中的地址。在家庭网络中,路由器通常让多台使用私有地址的 IPv4 设备共用一个外部 IPv4 地址。它往往还会修改端口号,以便区分同时存在的多个连接。
跟随一次出站请求
假设一台地址为 192.168.1.20 的笔记本电脑通过路由器打开一个网站。路由器会记录一条映射:一边是笔记本的内部地址和端口,另一边是路由器的外部地址和它选定的端口。网站看到的是外部地址,并向这个地址发送回复。路由器根据映射把回复交给正确的笔记本电脑,即使另一部手机在同一时间访问了同一个网站也不会弄混。这是常见的地址和端口转换的简化示例,具体行为取决于路由器。RFC 3022 描述了 NAT 的基本模型。
入站连接为什么可能失败
从外部主动发来的请求,找不到由出站连接建立的对应映射。要对外提供服务,管理员可以配置一条规则,把某个外部端口转发到局域网中的某台设备及端口。例如,可以把外部 TCP 8443 端口指向内部的某个 Web 应用。规则必须指定正确的传输协议:TCP 端口和 UDP 端口是相互独立的。开放之前,请确认该服务有人维护、需要身份验证,并且确实需要从公网访问。端口看上去是开放的,并不能证明应用本身运行正常。
NAT 不是防火墙策略
地址转换描述的是地址如何被修改、回复如何与连接对应起来。决定哪些流量可以通过的,是防火墙策略。家用路由器往往把这两项功能合二为一,所以很容易把它们混为一谈。不要把 NAT 当作唯一的安全边界:一条转发规则、一项自动端口映射功能或一次配置失误,都可能改变暴露情况。配置完成后,请测试实际的服务,而不只是端口号。2IP 端口检测可以从外部给出参考信号,但无法确认服务是否采用了强身份验证。
检查失效的转发规则
先检查服务器的本地地址,看看它在同一局域网内是否有响应。然后核对路由器上的端口和传输协议规则,以及服务器自身的防火墙。把路由器的外部地址与互联网上的网站看到的地址进行比较。如果上游还有另一台路由器或运营商的运营商级 NAT,仅靠家中的规则可能不够。不要为了排查问题就把整个防火墙关掉;请检查具体的那条规则和应用日志。