设置

设置

设置

,我有一台小型 Raspberry Pi 3,它运行暴露在互联网上的服务。例如,它正在运行 HTTP 服务器。我将此服务器称为raspberry。我可以raspberry通过 SSH 进行远程管理:我已22在路由器上打开端口因此,到此端口的公共 IP 的流量将被转发到raspberry。到目前为止一切顺利。

raspberry的架构arm64及其运行方式FreeBSD使我无法在其上运行游戏服务器(UrbanTerror 4.3)(显然,我尝试过破解,但没有成功)。

我还有另一台机器,它是一台thinkpad正在运行的 ThinkPad(稍后:) ,它的架构OpenBSDamd64实际上允许我运行所需的服务器。从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>

隧道已成功创建。我用netstaton检查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.33raspberry。为什么端口27960无法访问?显然,根据netstatthinkpad正在监听该端口。

只是为了测试连通性,我尝试nc -l 27960不断thinkpad运行nc localhost 27960raspberry我可以毫无问题地进行双向通信。

我认为还值得一提的是,我OpenBSDpf两台机器上都运行了数据包过滤器,但我已将其禁用以进行故障排除。

答案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)在 上raspberrysocat在 UDP 和 TCP 之间进行转换,后者位于端口 27900。

thinkpad3) 创建从到 的ssh 隧道raspberry;方向取决于socat命令。例如,两端的端口均为 27900。

4) 在 上thinkpadsocat再次使用 在 TCP 27900 和 UDP 27960 之间进行转换。

如果我没记错的话,你必须小心使用哪种 UDP 变体,socat以便它在两个方向上都能正常工作。我需要测试一下,但我现在没时间,所以我现在不能给你具体的命令。你还必须按正确的顺序进行设置,这样“监听”服务就会先启动,然后再从其他步骤获得连接。

相关内容