通过代理进行 UDP 通信

通过代理进行 UDP 通信

我有以下情况:

网络场景:PC B(TCP/IP,SOCKS5)-> PC A(TCP/IP)-> ISP路由器

PC B 必须能够实现完整的 TCP/UPD 连接,因此我正在使用典型的 FPS 游戏来测试场景。

ProxyCap 是一款代理软件,可以很好地连接到外部世界。问题是,来自服务器的 UDP 响应没有通过 PC A 到达 PC B。我猜问题出在端口转发上。代理无法转发任何东西,对吗?

我想到的一个解决方案是将每个 UPD 数据包转发到 PC B。为什么不呢?PC B 只会接受它所监听的端口,它不太可能监听与 PC A 相同的端口,不是吗?有这种可能性吗?我需要使用什么软件?请注意,我在 Windows 平台上。

注意:NAT 确实不是一个选项,因为它会暴露 PC B 的存在(NAT 很容易被发现)。我真的希望通信看起来像是由 PC A 发送的。

答案1

首先,我不建议将所有 UDP 流量转发到内部主机。

您的问题似乎是 UDP 流量的无状态性。UDP 协议中不存在请求或响应,只有朝任意方向传输的流。因此,如果您只是将所有 UDP 入站路由到 PC B,或者使用它来揭露您的隐藏网络,那么有人可能会将恶意流量注入您的流中。

我猜问题出在你的主机和 NAT 墙之间的代理上。NAT 无法使用连接方向将 UDP 流映射在一起,因此它无法确定哪些信号是需要的,哪些不是。大多数路由器使用端口号和时间的组合来确定两个流是否可能相关,因此 nat 只能在它们出现被征求,但通常你必须在你的防火墙端口上逐个允许 udp 服务,以保证你得到所有的段。

答案2

您应该使用 SOCKS5 代理来隧道传输 TCP/UDP 数据包。如果您使用 HTTP/HTTPS/SOCKS4,您将无法设置 ProxyCap 来代理 UDP 数据包,因为 SOCKS5 是唯一支持 UDP 的代理。

相关内容