设置
在家,我有一台小型 Raspberry Pi 3,它运行暴露在互联网上的服务。例如,它正在运行 HTTP 服务器。我将此服务器称为raspberry
。我可以raspberry
通过 SSH 进行远程管理:我已22
在路由器上打开端口家因此,到此端口的公共 IP 的流量将被转发到raspberry
。到目前为止一切顺利。
raspberry
的架构arm64
及其运行方式FreeBSD
使我无法在其上运行游戏服务器(UrbanTerror 4.3)(显然,我尝试过破解,但没有成功)。
我还有另一台机器,它是一台thinkpad
正在运行的 ThinkPad(稍后:) ,它的架构OpenBSD
是amd64
做实际上允许我运行所需的服务器。从thinkpad
,我可以raspberry
使用 SSH 进行访问。
问题
我目前不在家但实际上在不同的网络上国外raspberry
。我现在有一种无法抗拒的冲动想要托管我的服务器,但正如我所说的,我无法在 上做到这一点。
是否有可能以某种方式运行服务器thinkpad
并通过隧道传输所有流量raspberry
(因为我可以将其暴露给互联网,而在这里,国外,我没有路由器的管理员权限)?
thinkpad
本质上,我想要的是像在网络上运行一样运行服务器raspberry
。也就是说,服务器将出现在服务器浏览器中,玩家将能够连接:流量将raspberry
通过端口 eg到达27900
,并通过 SSH 通过互联网发送到thinkpad
。
PS:我意识到这可能会导致由于通过 SSH 中继流量而导致性能不佳,但我仍然想尝试。
提前感谢您,抱歉文章太长!
编辑2018-12-14:这是我已经尝试过的
所以我需要一个反向 SSH 隧道为此。我创建了一个隧道,如下thinkpad
所示
ssh -N -R :27960:localhost:27960 <raspberry's public IP>
隧道已成功创建。我用netstat
on检查raspberry
,它确实在监听*:27960
(但 TCP;这是个问题吗?UrbanTerror 和其他游戏一样,使用 UDP)。现在我启动服务器,thinkpad
然后再次用netstat
,我看到它正在监听*:27960
(UDP)。
我尝试打开 UrbanTerror 客户端thinkpad
并连接到<raspberry's IP>
,但没有成功。为了调试,我在运行
tcpdump -n -e -ttt -i ue0 | grep 27960
raspberry
当我尝试通过 UrbanTerror 加入我的服务器时,raspberry
转储中出现了以下内容:
188.112.111.89.27961 > 192.168.0.33.27960: UDP, length 16
192.168.0.33 > 188.112.111.89: ICMP 192.168.0.33 udp port 27960 unreachable
(为了简洁,我删除了输出)
188.112.111.89
是 的当前公共 IP thinkpad
,当然192.168.0.33
是raspberry
。为什么端口27960
无法访问?显然,根据netstat
,thinkpad
正在监听该端口。
只是为了测试连通性,我尝试nc -l 27960
不断thinkpad
运行nc localhost 27960
:raspberry
我可以毫无问题地进行双向通信。
我认为还值得一提的是,我OpenBSD
在pf
两台机器上都运行了数据包过滤器,但我已将其禁用以进行故障排除。
答案1
有几种方法可以做到这一点。最简单的方法是通过 临时创建到路由器 Web 界面的 ssh 隧道raspberry
。在路由器上打开 UDP thinkpad
(UrbanTerror 服务器仅使用 UDP,默认端口为 27960)。之后,玩家将能够连接到您的公共 IP。
如果您不想在路由器上打开另一个端口。每个玩家都必须能够访问您的 SSH,raspberry
并通过 TCP 端口 22 建立 SSH 端口转发隧道,并在他们的机器上执行 UDP 到 TCP 中继。您可以使用 socat 执行此操作:
Raspberry side: socat tcp4-listen:27900,reuseaddr,fork UDP:`thinkpad`:27960
Players side: socat -T15 udp4-recvfrom:27960,reuseaddr,fork tcp:localhost:27900
答案2
如果我理解正确的话,你和你thinkpad
的国外,raspberry
即在家里,你可以远程配置你的路由器在家里在 上打开新端口raspberry
。
TCP 与 UDP 有很大区别,因为ssh
只能通过 TCP 进行隧道传输。因此您还需要在它们之间进行转换。
完整设置中的延迟将非常明显。
你需要
1)配置路由器在家里将 UDP 端口 27960 转发至raspberry
。
2)在 上raspberry
,socat
在 UDP 和 TCP 之间进行转换,后者位于端口 27900。
thinkpad
3) 创建从到 的ssh 隧道raspberry
;方向取决于socat
命令。例如,两端的端口均为 27900。
4) 在 上thinkpad
,socat
再次使用 在 TCP 27900 和 UDP 27960 之间进行转换。
如果我没记错的话,你必须小心使用哪种 UDP 变体,socat
以便它在两个方向上都能正常工作。我需要测试一下,但我现在没时间,所以我现在不能给你具体的命令。你还必须按正确的顺序进行设置,这样“监听”服务就会先启动,然后再从其他步骤获得连接。