我想通过mosh连接到NAT后面的服务器.我无法触摸路由器将其设置为upnp支持,但我已申请UDP端口转发9807-> 60000,以及ssh端口转发原因.
那么,无论如何通过命令行args或客户端和/或服务器端的conf文件指定服务器端口?
注意:以下不行!!
mosh -p 9807 user@my_server
编辑:
我先尝试ssh到我的服务器,然后手动运行mosh-server -p 60000,然后从另一个终端运行mosh -p 9807 my_server.这会导致错误:
Error binding to IP my_server_ip: bind: Address already in use
那说:
>港口前进正在运作.
> mosh尝试在端口60000安装mosh-server.
谢谢.
最佳答案 您遇到的问题在于端口重定向.您在路由器上转发的NAT正在将发送到< domain>:9807的传入流量发送到< internal-ip>:60000.当您使用-p选项启动mosh时,客户端通过ssh连接到服务器并告诉服务器启动,侦听指定的端口.然后,mosh-server将开放端口号(在本例中为您指定的端口号)传送回客户端,该客户端关闭ssh连接并尝试连接到< domain>:< port>.客户端正在尝试与服务器正在侦听的同一端口进行通信.问题是您的NAT路由器正在将流量从WAN端的一个端口重定向到NAT’d计算机上的其他端口.这不行.
最好的办法是获得直接转换,例如请求WAN端的路由器转发端口9807到端口9807的mosh-server机器.
如果这不是一个选项,我能想到的下一个最好的事情就是使用iptables来破坏服务器机器上的流量.
iptables -t nat -A PREROUTING -p udp --dport 60000 -j REDIRECT --to-port 9807
按照您的描述执行您的客户
mosh -p 9807 user@my_server
会发生什么:
>您计算机上的mosh客户端打开一个ssh连接(可能通过NAT路由器转发到您的计算机)到您的服务器,该服务器在端口9807上执行mosh-server侦听.
> mosh服务器退出,告诉通过ssh连接的客户端要连接的UDP端口是9807
> mosh客户端关闭ssh连接并尝试在端口9807连接到服务器
> NAT路由器在端口9807上看到此传入流量,并将其发送到端口60000的服务器
>您的计算机通过UDP接收端口60000的数据包,该数据库与iptables规则匹配并被重定向到其目的地(在本例中为服务器的IP),但是在端口9807
>您的NAT路由器不会更改客户端流量的SRC端口,因此mosh-server会将数据包发送回客户端正在侦听的端口上的客户端,这些端口可以正常接收.