![NAT 如何访问传输层](https://linux22.com/image/1619330/NAT%20%E5%A6%82%E4%BD%95%E8%AE%BF%E9%97%AE%E4%BC%A0%E8%BE%93%E5%B1%82.png)
当路由器使用 NAT 转换目标 IP/端口时,它必须从 IP 数据包内的 TCP/UDP 数据包中获取端口,对吗?但是,如果 TCP 数据包已加密,该怎么办?
答案1
最常用的加密方法 TLS(以前称为 SSL)仅加密 TCP 段内的应用程序数据,而不是 TCP 标头本身。
有一些加密模式是 IPsec 的一部分,做加密 TCP 或 UDP 报头,以及那些模式不要穿越 NAT 网关。因此,为了使这些类型的 IPsec 流能够穿越 NAT,可以将它们包装在额外的 TCP 报头(端口 4500/TCP)中,这样 NAT 就可以处理该额外的外部报头,而不会影响加密的内部数据报。
答案2
对于 TCP 和 UDP 数据包,只有内容会被加密,而端口号字段(或构成数据包结构的其他字段)不会被加密。
因此 NAT 对所有数据包都起作用。
您还可以通过其他加密连接来隧道传输 TCP 或 UDP 数据包,在这种情况下,路由器的 NAT 根本看不到它们(但它会看到“外部”隧道连接的 TCP 或 UDP 数据包)。