私は mosh のファンが増えており、信頼性の低いwifiリンクがあるときにそれをますます使用しています。私が理解しようとしているのは、DMZ(インターネットおよびファイアウォールネットワークに接続されている)にあるサーバーを通るトンネルを構築する方法です。
Sshを使用した現在の解決策は、。ssh/configを編集して次のような行を含めることです。
Host server-behind-firewall
ProxyCommand ssh server-in-dmz nc %h %p
また、sshを使用して片方の脚を実行し、もう一方の脚をモッシュする方法もわかりました。
ssh -t server-in-dmz mosh server-behind-firewall
Server-in-dmzとserver-behind-firewallの間で、screenを使用してmoshセッションを作り上げました。
しかし、私がモッシュをエンドツーエンドで使用したいだけです。 mosh-serverがリッスンするようにするには、server-in-dmzをリギングする必要があると思います。しかし、mosh-serverのmanページには、「クライアントが60秒以内に接続しなかった場合は終了します」と書かれています。
つまり、問題は、複数のホストでモッシュトンネルを構築する方法ですか。
TCPおよびUDPパケットリピーターである stone を試してみることをお勧めします。これが本質的に意味することは、次の構成があることです。
あなた<---> server-in-dmz <---> server-behind-firewallの石
つまり、server-in-dmzは、SSHパケットがserver-behind-firewallに転送されるのをポートXでリッスンし、別のポート、ポートYを使用して、server-behind-firewallのポート60000に転送されるUDPパケットをmosh-server。
次のコマンドを使用してmoshに接続する必要があります。
mosh -p 60000 --ssh='ssh -p PORT_X' server-in-dmz
@Hengjieで提案されているように、アプリケーションレイヤーでトラフィックを転送する代わりに、iptables(server-in-dmz上)を使用することもできます。
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 11559 -j DNAT --to-destination 178.254.55.220:22
iptables -t nat -A PREROUTING -p udp -m udp --dport 60159:60168 -j DNAT --to-destination 178.254.55.220
iptables -t nat -A POSTROUTING -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1
次に、mosh -p 60159 --ssh='ssh -p 11559' server-in-dmz
を使用して接続します
注意: