SSH 隧道 + Socat UDP 转发 + 多个客户端

SSH 隧道 + Socat UDP 转发 + 多个客户端

我有一台运行服务器守护程序(在本例中为 Unity3d unet 游戏服务器)的 Ubuntu 计算机,该守护程序旨在仅通过 UDP 与客户端通信。客户端在 Windows 7 和 Windows 10 上。由于客户端网络安全要求,我需要通过 SSH 隧道(仅传输 TCP 数据包)建立所有连接。我可以在客户端上使用 Putty 或 cygwin OpenSSH,但它们似乎都不支持 openssh 的 -w 隧道功能。

我已经成功配置socat在单个客户端和服务器之间通过 TCP 转发 UDP 数据包。在服务器上,按照稍作修改的版本本页底部的说明。我主要是一名开发人员,虽然我知道足够多的 unix 网络知识,知道它们很危险,但这超出了我的典型技能范围。

在我正在运行的服务器上$socat tcp4-listen:7776,reuseaddr,fork udp:localhost:7777

在我的客户端上我正在运行$socat -T15 udp-listen:7777,reuseaddr,fork TCP4:localhost:7776

然后我运行从 7776 到 localhost:7776 的 SSH 隧道。

这对于单个客户端来说效果很好。但是,当我尝试连接多个客户端时,两个客户端都会失败。我怀疑这是因为它socat充当了代理,所以我的服务器看到来自 localhost:7777 的多个连接,而服务器和 socat 都没有足够的信息将 UDP 数据包路由回其发起者。

这听起来像是虚拟接口或虚拟接口的理想用例——我相信如果我可以定义具有唯一 IP 的虚拟/虚拟接口,例如:10.0.0.2、10.0.0.3 等,作为虚拟/虚拟接口并绑定一个实例socat到每个虚拟接口并让我的客户端使用 10.0.0 端点设置他们的 SSH 隧道。X,我应该能够每个接口接受一个客户端。显然这无法扩展,但对于此用例,我只需要几个客户端。

我的想法合理吗?如果是,我该如何路由虚拟节点,以便将 socat 绑定到它们,并让 socat 从 10.0.0 生成 udp 数据包。X:7777 路由到 localhost:7777(并接受从 localhost:7777 到 10.0.0 的数据包。X)?

我意识到有更好的方法可以实现这一点(例如:VPN 或 ssf),但由于客户要求,我只能使用通过 SSH 隧道运行的解决方案。我可以提出在服务器上安装其他软件的案例,但所有通信都必须通过 SSH 隧道上的 TCP 进行。

[编辑]看起来一个可能的替代方案是在服务器上运行 openvpn,然后通过 ssh 隧道建立 openvpn 客户端连接。这看起来很麻烦,但可能比使用 socat 更强大、更可扩展。考虑到我的要求,您对这两个潜在解决方案有什么想法或意见吗?[/编辑]

答案1

您应该研究一下ssh -w- 它确实是这么做的:建立隧道并在两端设置虚拟接口。

ssh -w x:y user@host network-script.sh使用 network-script.sh 设置服务器端接口将使其完全自动化。

相关内容