家用路由器上的 NAT 选项通常配置为严格的。这是什么意思?缓和或者打开端口转发/DMZ 访问是否正常工作严格的那么为什么还要关心另外两个呢?
通过查看路由器可以发现这会影响防火墙。当你花费大量时间使用 Cisco/iptables 保护网络时,这种软弱无力、没有描述性的答案只会让人恼火,而且不会留下任何线索,说明对网络有什么影响。防火墙这有。
请有人能解释一下。
答案1
首先,了解网络地址转换 (NAT) 的工作原理非常重要。您与互联网上的服务器建立连接。实际上,您将数据包发送到路由器,从计算机通过某个随机选择的端口发出:
Your computer Router
╔════════════╗ ╔═══════════╗
║ ║ ║ ║
║ port 31746 ╫====>╫ ║
║ ║ ║ ║
╚════════════╝ ╚═══════════╝
您的路由器会与您想要通信的服务器建立连接。它会说出自己随机选择的端口:
Router www.google.com
╔═══════════╗ ╔════════════════╗
║ ║ ║ ║
║ port 21283╫====>╫ port 80 ║
║ ║ ║ ║
╚═══════════╝ ╚════════════════╝
当 Google 的网络服务器向你发送信息时,它实际上是将其发送回你的路由器(因为你的路由器实际上是在互联网):
Router www.google.com
╔═══════════╗ ╔════════════════╗
║ ║ ║ ║
║ port 21283╫˂====╫ port 80 ║
║ ║ ║ ║
╚═══════════╝ ╚════════════════╝
21283
一个数据包从到达路由器的端口www.google.com
。路由器应该如何处理它?
在这种情况下,路由器会保留您的记录,并且它知道21283
从互联网到达端口的任何流量都应转到您的 PC。因此,路由器会将数据包中继到您的计算机:
Your computer Router
╔════════════╗ ╔═══════════╗
║ ║ ║ ║
║ port 31746 ╫<════╫ ║
║ ║ ║ ║
╚════════════╝ ╚═══════════╝
开放式 NAT(又称全锥形 NAT,又称好的,正确的, 和正确的一)
在打开NAT,互联网上的任何机器都可以向您的路由器端口发送流量21283
,并且数据包将被发送回给您:
Your computer Router
╔════════════╗ ╔═══════════╗ ╭www.google.com:80
║ ║ ║ ║ ├www.google.com:443
║ port 31746 ╫<════╫ port 21283╫<════╡serverfault.com:80
║ ║ ║ ║ ├fbi.gov:32188
╚════════════╝ ╚═══════════╝ ╰botnet.cn:11288
中等 NAT(又称受限锥形 NAT)
中等 NAT 是指你的路由器只接受来自同一主持人,但允许它来自任何港口:
Your computer Router
╔════════════╗ ╔═══════════╗
║ ║ ║ ║ ╭www.google.com:80
║ port 31746 ╫<════╣ port 21283╫<════╡www.google.com:443
║ ║ ║ ║ (rejected) serverfault.com:80
╚════════════╝ ╚═══════════╝ (rejected) fbi.gov:32188
(rejected) botnet.cn:11288
封闭式 NAT(又称端口限制锥形 NAT)
封闭式 NAT 限制性更强。除非来自原始主持人 和 港口您最初与之通信的www.google
端口80
:
Your computer Router
╔════════════╗ ╔═══════════╗ ╭www.google.com:80
║ ║ ║ ║ ┆ (rejected) www.google.com:443
║ port 31746 ╫<════╫ port 21283╫<════╛ (rejected) serverfault.com:80
║ ║ ║ ║ (rejected) fbi.gov:32188
╚════════════╝ ╚═══════════╝ (rejected) botnet.cn:11288
Teredo、X-Box Live、NAT
微软的书编写安全代码对不同类型的 NAT 还有一些其他定义。它是在 NAT 的背景下编写的,供 Teredo 使用;IPv6 过渡技术:
- 全锥体:全锥型 NAT 在发送出站数据包时会建立一个外部 UDP 端口,并将从任何 IP 地址和任何端口发送到该端口的流量转发回内部系统上的原始端口。
- 限制锥:这种类型的 NAT 维持某种程度的状态并要求回复来自与发送初始请求相同的 IP 地址。
- 港口限制锥:回复必须来自与请求相同的 IP 地址和端口。
- 对称:除了端口限制代码 NAT 的要求之外,对称 NAT 还会为发送到每个单独的外部主机的流量创建内部 IP 地址和端口到外部 IP 地址和端口的新映射。
一些较新的 NAT 设备在某些情况下也会出现端口限制,而在其他条件下则是对称的:
具体来说,我们发现许多 NAT 都有第五种策略,即“端口保护”。基本上,它们会尝试在内部和外部保持相同的端口号,除非该端口号已用于另一个连接,在这种情况下,它们会按顺序(从全局变量中)或随机选择不同的端口号。这些 NAT 在测试期间通常表现为“端口受限”,但在负载下表现为“对称”。(Huitema,个人通信)
如果您对详细信息感兴趣,请咨询RFC 3489(Rosenberg 等人,2003 年)。
记住:如果有人试图告诉你全代码 NAT/开放式 NAT是安全问题,告诉他们他们不知道自己在说什么。NAT 不是安全边界 - 防火墙才是。任何使用 NAT 作为安全边界的人都是错误的。
也可以看看
答案2
所有这些 NAT 术语都只用于游戏行业。如果你向网络工程师或安全工程师询问严格 NAT,他们不会知道你在说什么。
在现实的、纯技术的网络世界中,存在 NAT 和 PAT,它们可以是入站的,也可以是出站的。
消费者路由器通常有一个“DMZ”IP 设置,它会将发往路由器公共 IP 的所有内容直接发送到您的 PC 私有 IP。我甚至无法告诉你这有多危险。游戏公司应该至少发布一个服务器 IP 列表,这样您便可以将流量直接转发到您的 PC,前提是该流量来自列表中的服务器。我认为“中等 NAT”就是网络行业所称的 PAT(端口地址转换)。
例如,如果您通过端口 80 连接到服务器,则源端口也为 4040。启动连接后,路由器将监听端口 4040。如果他们尝试通过其他端口与您的路由器通信,则路由器 NAT 表没有新端口的映射,因此会将其丢弃。如果您允许将端口 4444 转发到 NAT/PAT 配置中的特定 IP,则外部人员现在只能在该端口上启动连接。这比 1 对 1 映射并允许所有内容通过的危险性要小。
游戏公司需要提供更好的指导。我甚至看到有人建议完全禁用 Microsoft 防火墙,而不是提供端口列表。如果你想成为僵尸网络的一部分,或者不介意勒索软件,那就继续遵循他们糟糕的指导吧。
答案3
因此我有机会在(广义上)两个网络环境中彻底测试这种“NAT 类型”术语。
使用 MikroTik 的 RouterOS v6 进行此测试,因此我将使用 MikroTik 网络术语。
在开始之前,我假设您了解以下基础知识:
- NAT(包括 PAT,在 2021 年网络中本质上就是“NAT”)
- 即插即用
- CGNAT+端口控制协议的基本思想
- 公共可路由 IP 用于附加措施
- VPN 概念(无论使用何种协议,如 OpenVPN、WireGuard 等)
- “端口转发/静态端口转发”在技术上意味着创建一个目标 NAT,其中源端口和目标端口(目标端口)相等,目标地址(目标地址)是相关控制台/操作系统盒的内部 RFC1918 IP 地址。不同网络供应商的术语有所不同。概念保持不变。
我们假设两个环境中都有一个上行链路/WAN 接口和一个源 NAT 或一个伪装 NAT。我们还假设所使用的操作系统/控制台不会在其操作系统/控制台级别阻止端口/UPnP。
- 路由器具有可公开路由 IP 的网络环境
In this network environment, the three NAT types work in the following ways:
1. Open NAT only occurs when we have static port forwarding (where all the inbound ports are manually configured based on the game/console) or when we have UPnP enabled and it opens up all the required ports
2. Moderate NAT only occurs when we have static port forwarding or UPnP partially working (meaning, only some of the ports required are open inbound)
3. Strict NAT only occurs when static port forwarding is not done correctly or UPnP is not or working, in either case, it means port forwarding does not work whatsoever.
- 路由器具有 CGNATted WAN IP 的网络环境
In this network environment, the three NAT types work in the following ways:
1. Open NAT cannot occur in this environment. The only workaround to achieve open NAT is to use a VPN (host it somewhere with a public IP) and open ports through the VPN tunnel (UPnP can work through the VPN tunnel assuming the OS sends all incoming packets from itself through the tunnel).
2. Moderate NAT only occurs when we have static port forwarding or UPnP enabled and all the necessary ports are configured to be open at the router level. This is basically the same as "open NAT" configuration done in the first network environment.
3. Strict NAT occurs when neither the above cases are achieved.
现在奇怪的是 CGNATted 环境中的“中等”NAT 情况。我们知道端口转发无法在 CGNAT 后面工作(除非您的 ISP 足够聪明,能够部署端口控制协议)。
- 我的理论是,这种情况发生的原因是 CGNAT 设备具有正确配置和部署的 NAT 遍历机制(例如 ALG),因此当 CGNAT 设备从内部 IP 转换为外部 IP 时,来自下游的任何入站流量都会正确穿过 CGNAT。
- Cisco 似乎默认为 CGNAT 模式启用了 NAT 穿越:https://www.cisco.com/c/en/us/td/docs/routers/crs/software/crs_r4-3/cg_nat/configuration/guide/cgnat_cg43crs/cgc43cgn.html#30577
正如前面提到的这里,不要愚蠢地使用所谓的“DMZ”或完全禁用操作系统/控制台的内部防火墙。如果是操作系统/控制台导致问题,请将防火墙重置为默认值。Windows、Linux 发行版等上的默认防火墙不会阻止在路由器上手动打开的 UPnP/端口。