Udp 如何使用mosh连接到NAT后面的服务器

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连接到NAT后面的服务器。我无法触摸路由器将其设置为upnp支持,但我已经申请了UDP端口转发9807->60000,以及ssh端口转发

那么,是否仍然可以通过客户端和/或服务器端的命令行args或conf文件指定服务器端口

注意:以下操作无效

mosh -p 9807 user@my_server
编辑:

我尝试先用ssh连接到我的服务器,然后手动运行mosh-server-p60000,然后从另一个终端运行mosh-p9807我的_服务器。这会导致错误:

Error binding to IP my_server_ip: bind: Address already in use
也就是说:

  • 港口在前进
  • mosh尝试在端口60000安装mosh服务器

  • 谢谢。

    您遇到的问题在于端口重定向。路由器上的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客户端打开到服务器的ssh连接(可能通过NAT路由器转发到您的机器),该连接执行
    mosh服务器
    侦听端口
    9807
  • mosh服务器退出,告诉通过ssh连接的客户端要连接的UDP端口是
    9807
  • mosh客户端关闭ssh连接并尝试在端口
    9807连接到服务器
  • NAT路由器在端口
    9807
    上看到此传入流量,并将其发送到端口
    60000
  • 您的计算机通过
    UDP
    在端口
    60000
    接收数据包,该端口符合iptables规则,并被重定向到其目的地(本例中为服务器的IP),但在端口
    9807
  • NAT路由器不会改变客户端流量的SRC端口,因此mosh服务器会在客户端正在侦听的端口将数据包发送回客户端,这些数据包会被正确接收

  • 我建议使用以下概念验证方法连接NAT后面的mosh服务器。假设我们有以下计算机:

    • NAT后面的客户端\u主机,我们希望从它连接到mosh服务器
    • 服务器\u主机位于另一个NAT后面,其中mosh服务器正在运行。注意,在这种方法中,客户机主机仍然需要直接通过SSH访问服务器主机才能启动mosh服务器<代码>ssh-R。。。服务器上的中继主机可能会有所帮助
    • 中继\u主机,具有公开可见的IP地址,可由我们控制
    因此,我们:

  • 在继电器主机上安装并运行工具。它将从一个端口到另一个端口重复接收的所有内容,反之亦然。
    relay_host> udprelay 0.0.0.0 34730 34731
    
    上面提到的端口号是硬编码到客户端脚本中的,但是它们可以很容易地更改。还要注意的是,udprelay目前非常不安全
  • 在服务器\u主机上安装,只需将其放入路径中提到的任何文件夹。确保那里也安装了流行的
    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