我想在路由器和防火墙后面的 Windows 机器上运行一个可公开访问的 Rust 服务器。这个想法是将本地服务器端口通过隧道传输到可访问的公共机器:防火墙后面的 Windows 上的 rust 服务器 <- putty 隧道 -> 没有防火墙的 linux <- PC 上某处的 rust 客户端
rust 服务器在端口 28015 上运行。本地一切正常“client.connect localhost 28015”。本地还有用于 rcon 的 tcp 端口 28016,我认为 udp 28015 上有一些魔力 - 我不确定这是否真的有必要。
使用 putty,我创建了从 Windows 到远程 Linux 机器的隧道:R28015 127.0.0.1:28015,R28016 127.0.0.1:28016,我可以使用 telnet localhost 28015 和 telnet localhost 28016 测试它们。我没有收到连接被拒绝的消息,所以我认为隧道可以正常工作。对吗?我更改了 SSHD 配置中的设置,这样 telnet linuxhostname 28015 也可以正常工作。
遗憾的是,无法连接 rust 客户端“client.connect linuxhostname 28015”。我超时了。
也许 rust 也需要 UDP。所以我尝试使用 socat 通过 TCP 隧道获取 UDP。
我设置了另一个 putty 隧道:R50053 127.0.0.1:50053 并使用 socat a)在 Windows 上将 udp 28015 本地映射到 tcp 50053 命令:socat udp-listen:28015,reuseaddr,bind=127.0.0.1,fork tcp:127.0.0.1:50053 b)在 Linux 上将 tcp 50053 映射到 udp 28015 命令:socat tcp4-listen:50053,reuseaddr,fork,bind=127.0.0.1 UDP:127.0.0.1:28015
至少那是计划。经过一些测试后,我被困在一个地方,在 Linux 端收到一条错误消息:socat[954671] E bind(5, {AF=2 127.0.0.1:50053}, 16): 地址已在使用中。
怎么了?整个想法还是仅仅是 socat 的使用(配置)?