![80端口转发和互联网访问](https://linux22.com/image/1523282/80%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E5%92%8C%E4%BA%92%E8%81%94%E7%BD%91%E8%AE%BF%E9%97%AE.png)
我了解端口转发、网络地址转换等的原理。
假设我想玩多人游戏。在这种情况下,我必须将端口 80 转发到我的游戏服务器(计算机 1)。
如果当我正在玩多人游戏时,或者当我没有玩多人游戏并且游戏服务器已关闭时,另一个用户想在计算机 2 上使用互联网,该怎么办?我做了一些研究,读到过这样的问题:什么是端口转发以及它有什么用途?。但是,我还没有找到我具体问题的答案。您是否必须将游戏服务器设置为代理服务器?即,将计算机 B 的设置指定为计算机 A 上的代理服务器。这样对吗?我不认为这是正确的,因为游戏服务器有时会被关闭。
答案1
首先要注意的是——每个 TCP 和 UDP 套接字有两个端口:源和目标。通常源端口是随机分配的(或来自计数器),大多数软件并不关心它。您的端口转发规则也只检查目标端口。
第二 - 端口转发规则只对特定的目标地址(即路由器自己的地址)有效,并且大多数时候只对通过特定接口(即WAN端口)进来的数据包有效。
因此您不需要做任何具体的事情,因为:
如果您连接到网站,传出的数据包将不符合端口 80 的转发规则,因为它们不是通过 WAN 接口到达的,并且具有不同的目标地址。
传入的回复(来自网站)也保持不变,因为它们的源(远程)端口为 80,而不是目标(本地)端口,因此它们也不符合规则。
与此同时,当有人想联系到您的服务器,然后传入的数据包将要匹配规则,因为它们通过 WAN 端口到达,以路由器的 IP 地址作为目的地,并被发送到目标端口 80(从路由器的角度来看,这是本地端口)。
例如,您的路由器将保留如下的端口转发规则(释义):
if (dst_ip = <ROUTER_IP> and dst_port = 80) then translate dst_ip to 192.168.1.42
传出连接将创建这样的数据包:
out: LAN → router: IP(src=192.168.1.42, dst=<WEBSITE_IP>) / TCP(sport=34567, dport=80)
out: router → WAN: IP(src=<ROUTER_IP>, dst=<WEBSITE_IP>) / TCP(sport=45678, dport=80)
in: router ← WAN: IP(src=<WEBSITE_IP>, dst=<ROUTER_IP>) / TCP(sport=80, dport=45678)
in: LAN ← router: IP(src=<WEBSITE_IP>, dst=192.168.1.42) / TCP(sport=80, dport=34567)
请注意,这两者实际上都不符合端口转发规则。