TCP 和 UDP 数据包进行 NAT 时发生了什么?

TCP 和 UDP 数据包进行 NAT 时发生了什么?

如果我有两个虚拟专用服务器并且它们位于不同的国家/地区。然后我想使用一台服务器(139.162.131.242)作为代理服务器来代理tcp和udp流量,代理进程侦听本地端口8300。另一台服务器(172.104.98.95)将用于将流量中继到代理服务器。

有人教我如何使用 IPTABLES 来实现这一点:
步骤1:在代理服务器(139.162.131.242)上设置代理程序并运行
第2步:在中继服务器(172.104.98.95)上编写一些 iptables 规则,如下所示:

iptables -t nat -A PREROUTING -p tcp --dport 8300 -j DNAT --to-destination 139.162.131.242:8300  
iptables -t nat -A PREROUTING -p udp --dport 8300 -j DNAT --to-destination 139.162.131.242:8300  
iptables -t nat -A POSTROUTING -d 139.162.131.242 -p tcp --dport 8300 -j SNAT --to-source 172.104.98.95  
iptables -t nat -A POSTROUTING -d 139.162.131.242 -p udp --dport 8300 -j SNAT --to-source 172.104.98.95  

步骤 3:设置代理客户端程序,使所有tcp和udp流量都去中继服务器

但我对这个方法感到困惑。例如,我正在玩一个网络游戏,使用udp或tcp与游戏服务器通信。当这些流量到达中继服务器时,会进行 DNA 解析,最终到达代理服务器,但是代理服务器能知道这些流量被发送到哪里吗?我的意思是代理服务器会将这些流量发送到游戏服务器吗?如果可以的话,在中继服务器上已经更改了流量的目标地址后,代理服务器如何知道真实的游戏服务器地址?

答案1

IP数据包的相关信息有源地址,目的地址,源端口目的端口。源和目标端口对由客户端和服务器使用:发起方将数据包发送到目标端口并选择源端口,在回复中将源端口用作目标端口,将目标端口用作源端口。

每次更改数据包时,都会保存更改之间的映射。通过这种映射,设备知道如何处理数据包。 NAT 使用此信息来映射主机之间的连接。静态 NAT 使用基于预配置规则的映射,而动态 NAT 在新连接启动时扩展映射,并在连接关闭时删除映射条目。

我将分步骤解释数据包如何在客户端和服务器之间传输。由于我不知道您正在使用的代理的详细信息,我假设所有到代理的流量都会中继到服务器并且透明地发生。

客户端和服务器之间的步骤:

client <---> VPN <---> NAT <---> proxy <---> server

从客户端到服务器:

  1. 客户端发送数据包到目的地址(代理人)。路由用于通过 VPN 发送流量。
  2. NAT 转发数据包。 NAT 改变了源地址通过源 NAT 规则自行使用。目标地址(代理)不变
  3. 代理从 NAT 获取数据包,照常中继它。
  4. 目标服务器从代理接收数据包。

从服务器到客户端:

  1. 目标服务器将数据包发送到代理。
  2. 代理将数据包中继到 NAT。
  3. NAT 转发数据包。目的地地址通过目标 NAT 规则更改为您的客户端地址。源地址(代理)不变
  4. 您的客户端收到数据包。

相关内容