![了解端口转发和 NAT](https://linux22.com/image/1282468/%E4%BA%86%E8%A7%A3%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E5%92%8C%20NAT.png)
我对端口转发和 NAT 有点困惑。我知道 NAT 会给 P2P 带来问题,而且存在一些解决方案(STUN
、TURN
等),这些解决方案需要中继服务器在对等端之间建立直接连接。
STUN
端口转发是NAT问题的替代方案吗TURN
?NAT 后面的两个对等端如果都进行了端口转发,可以直接通过 TCP 相互连接吗?例如,我想开发一款应用程序,我不想让服务器 24/7 全天候地中继连接,而是让对等端进行端口转发,然后他们可以直接相互通信。
答案1
NAT 后面的两个对等体如果都进行了端口转发,可以直接通过 TCP 相互连接吗?
NAT 后面的对等体可以发起从自身到外部的连接,但是除非设置了端口转发,否则反向连接不能发生。
通过转发端口,任一主机都可以发起与另一台主机的连接,无需任何中间环节,只需在特定端口上进行连接。
但也许可以让同伴做端口转发
首先,如果您的应用支持来自蜂窝 ISP 的移动用户,则他们很可能处于“运营商级 NAT”(CGNAT)之后,并且 NAT 由 ISP 控制。他们将无法让其蜂窝提供商转发端口。也有固定电话 ISP 拥有 CGNAT。
UPnP 是一种允许应用程序要求路由器打开端口的方案。有安全意识的人可能不会启用此功能。
其次,也许用户希望在他们无法控制的访客 Wifi 网络上使用您的应用,或者如果政策允许,从他们的工作网络使用您的应用。
要求用户进行端口转发会限制您的用户群。
答案2
NAT 后面的两个对等体,使用DNAT
(或“端口转发”)从技术上来说不再是后面了NAT
。
当使用此方案时,连接到公共网络IP
会使 NAT 盒将数据包转发到内部系统。因此,对于所有相关人员来说,看起来就像内部机器实际上并不在后面NAT
。因此,如果至少有一个同辈正在使用此方案,STUN
不再需要。
当然,盒子破坏数据包的事实NAT
会带来很多问题,但是如果您在消息中不包含 IP 和端口,那么就应该没问题。
该方案的另一个问题是您需要 NAT 盒管理员的合作,但这并不总是那么容易获得。
答案3
这相当复杂...此外,基于 Stack Overflow,我假设您想从编程的角度了解这一点,以及了解客户端之间进行通信需要做些什么。
... NAT 是在网络一侧拥有单个(或多个)IP 地址,然后将这些地址中的任何端口转发到任何内部地址的过程。
大多数 NAT 设备都有允许所有传出并且只允许指定传入的默认规则。
STUN 或类似的服务器基本上意味着两台机器都发出传出请求,并且服务器充当代理,因此任何客户端都不需要设置传入规则。
如果你不想设置这样的事情,我建议在你的程序中设计它,这样你就可以让人们知道他们需要打开哪些端口(因此只有一个人需要进行配置),或者,查看即插即用它具有允许您以编程方式打开某些防火墙中的端口的技术。