Udp 如何使用mosh连接到NAT后面的服务器
我想通过mosh连接到NAT后面的服务器。我无法触摸路由器将其设置为upnp支持,但我已经申请了UDP端口转发9807->60000,以及ssh端口转发 那么,是否仍然可以通过客户端和/或服务器端的命令行args或conf文件指定服务器端口 注意:以下操作无效Udp 如何使用mosh连接到NAT后面的服务器,udp,nat,mosh,Udp,Nat,Mosh,我想通过mosh连接到NAT后面的服务器。我无法触摸路由器将其设置为upnp支持,但我已经申请了UDP端口转发9807->60000,以及ssh端口转发 那么,是否仍然可以通过客户端和/或服务器端的命令行args或conf文件指定服务器端口 注意:以下操作无效 mosh -p 9807 user@my_server 编辑: 我尝试先用ssh连接到我的服务器,然后手动运行mosh-server-p60000,然后从另一个终端运行mosh-p9807我的_服务器。这会导致错误: Error bin
mosh -p 9807 user@my_server
编辑:
我尝试先用ssh连接到我的服务器,然后手动运行mosh-server-p60000,然后从另一个终端运行mosh-p9807我的_服务器。这会导致错误:
Error binding to IP my_server_ip: bind: Address already in use
也就是说:
谢谢。您遇到的问题在于端口重定向。路由器上的NAT转发正在将发送到
:9807
的传入流量发送到:60000
。当您使用-p
选项启动mosh时,客户机通过ssh连接到服务器,并告诉服务器启动,监听指定的端口。然后,mosh服务器将打开的端口号(在本例中是您指定的端口号)传回客户端,客户端关闭ssh连接并尝试连接到:
。客户端正在尝试与服务器正在侦听的同一端口通信。问题是,您的NAT路由器正在将流量从WAN端的一个端口重定向到NAT机器上的另一个端口。这是行不通的
最好是直接转换,例如请求WAN端的路由器转发端口9807到端口9807的mosh服务器机器。
如果这不是一个选项,那么我能想到的下一个最好的办法就是使用iptables来破坏服务器机器上的流量
iptables -t nat -A PREROUTING -p udp --dport 60000 -j REDIRECT --to-port 9807
按照您的描述执行您的客户机
mosh -p 9807 user@my_server
发生的情况是:
mosh服务器
侦听端口9807
9807
9807连接到服务器
9807
上看到此传入流量,并将其发送到端口60000
UDP
在端口60000
接收数据包,该端口符合iptables规则,并被重定向到其目的地(本例中为服务器的IP),但在端口9807
我建议使用以下概念验证方法连接NAT后面的mosh服务器。假设我们有以下计算机:
- NAT后面的客户端\u主机,我们希望从它连接到mosh服务器
- 服务器\u主机位于另一个NAT后面,其中mosh服务器正在运行。注意,在这种方法中,客户机主机仍然需要直接通过SSH访问服务器主机才能启动mosh服务器<代码>ssh-R。。。服务器上的中继主机可能会有所帮助
- 中继\u主机,具有公开可见的IP地址,可由我们控制李>
relay_host> udprelay 0.0.0.0 34730 34731
上面提到的端口号是硬编码到客户端脚本中的,但是它们可以很容易地更改。还要注意的是,udprelay目前非常不安全socat
工具ssh server\u ssh\u NAME
调用server\u host,记录密钥并使用它运行mosh客户端。棘手的部分是在服务器的NAT上打一个洞,让双方在udprelay
处相遇另请参阅一篇描述稍微不同情况的文章。在上述术语中,它显示了如何从中继主机连接到服务器主机。作者不使用udp中继,但他仍然需要笨重的
LD_预加载
机器。令人惊讶的是,它确实发挥了作用。这对我来说不起作用。如何撤消您提供的iptables命令?-A
标志用于附加规则,反之则用于使用-D
删除。尝试iptables-t nat-D预路由-p udp-dport 60000-j重定向-到端口9807
client_host> mosh-nat-client.sh SERVER_SSH_NAME RELAY_IP