!! mosh is not use now !!
color
https://github.com/mobile-shell/mosh/issues/928#issuecomment-1806069018
Some fixes are only in 1.4.0, so we would really like you to be running 1.4.0 on both the client and server.
Mosh (daily development version) : Keith Winstein
sudo add-apt-repository ppa:keithw/mosh-dev
sudo apt update
connect with tmux
mosh opi -- sh -c 'tmux attach || tmux new'
with zellij
mosh rock5b -- sh -c 'zellij a -c default'
rk5b
mosh tail_opi -- sh -c 'mosh rock5b -- sh -c "zellij a -c default"'
ufw setting for mosh
gemini
╭────────────────────────────────────────────────────╮ │ > nothing recieved from server on UDP となります │ ╰────────────────────────────────────────────────────╯
✦ nothing received from server on UDP というエラーは、Moshクライアントがサーバー上のmosh-serverとUDPで通信しようとしたものの、サー バーから何の応答も返ってこなかったことを意味します。
これは、Moshで最もよく遭遇するエラーの一つで、原因はほぼファイアウォールにあります。
原因と解決策
根本的な原因は、クライアントからサーバーへのUDPパケットが、途中のどこかでブロックされていることです。
以下の点を確認・修正してください。
- サーバー側のファイアウォール設定
これが最も可能性の高い原因です。サーバー自身がUDPの通信をブロックしています。
対策: サーバーで、Moshが使用する UDPポート
60000から61000までの範囲の着信(inbound)を許可してください。Tailscaleを使っている場合 (推奨): Tailscaleネットワークからの通信のみを許可するのが安全です。
ufwを使っている場合:1 # tailscaleのインターフェース名(通常は tailscale0)を確認 2 ip addr 3 4 # tailscale0 からのUDP 60000-61000 を許可 5 sudo ufw allow in on tailscale0 to any port 60000:61000 proto udp 6 sudo ufw reload
firewalldを使っている場合:1 # tailscaleのゾーンを確認 (なければ作成) 2 sudo firewall-cmd —get-active-zones 3 # 例: sudo firewall-cmd —zone=trusted —add-interface=tailscale0 4 5 # UDPポートを許可 6 sudo firewall-cmd —zone=trusted —add-port=60000-61000/udp —permanent 7 sudo firewall-cmd —reload
Tailscaleを使っていない場合 (公開サーバー): どこからの通信でも許可することになりますが、セキュリティリスクは上がります。
1 # ufw の場合 2 sudo ufw allow 60000:61000/udp 3 sudo ufw reload
- クラウドプロバイダーのファイアウォール(セキュリティグループ)
AWS (EC2), Google Cloud (GCP), Azureなどのクラウドサービス上でサーバーを動かしている場合、OSのファイアウォールとは別に、クラウ ドの管理画面で設定するファイアウォール(セキュリティグループやVPCファイアウォールルールなど)が存在します。
対策: クラウドの管理コンソールにログインし、該当サーバーに適用されているセキュリティグループ(またはそれに類するもの)で、UDPポート
60000-61000の着信ルールを追加してください。
- 送信元(Source):
Tailscaleを使っているなら、クライアントPCのTailscale IPアドレス(100.x.y.z)を指定するのが最も安全です。
それが面倒なら、TailscaleのIP範囲(100.64.0.0/10)を指定します。
どこからでも接続する可能性があるなら 0.0.0.0/0 を指定しますが、推奨はされません。
- 自宅やオフィスのルーター
もしサーバーが自宅やオフィス内のネットワークにある場合、そのルーターが外部からのUDPパケットをブロックしている可能性があります。
対策: ルーターの管理画面で、ポートフォワーディング(ポートマッピング)の設定を行い、外部からのUDP 60000-61000 をサーバーのプライベートIPアドレスに転送するように設定してください。 (ただし、Tailscaleを使っていれば、この設定は通常不要です。)
切り分け手順
もし上記を試しても解決しない場合、以下の手順で問題の箇所を特定できます。
- サーバー内でテストする: サーバーにSSHでログインし、mosh-serverが起動できるか確認します。
1 mosh-server MOSH CONNECT 100.x.y.z [port] のような表示が出れば、mosh-server自体は正常に動作しています。(Ctrl+Cで終了してOKです)
- ファイアウォールを一時的に無効にする: 【注意】セキュリティリスクがあるため、テスト目的でのみ行ってください。 サーバーのファイアウォールを一時的に無効にして、Mosh接続を試みます。
1 # ufw の場合 2 sudo ufw disable これで接続できれば、原因は間違いなくファイアウォールの設定です。テスト後は必ず sudo ufw enable で有効に戻してください。
tcpdumpでパケットを確認する: サーバー側でパケットキャプチャを実行し、実際にUDPパケットが届いているか確認します。1 # tailscale0 インターフェースでUDPポート 60000-61000 を監視 2 sudo tcpdump -i tailscale0 udp portrange 60000-61000 -n このコマンドを実行したまま、クライアントからMosh接続を試みます。ここに何も表示されなければ、パケットはサーバーに到達してい ません(クラウドのファイアウォールや経路上の問題)。何か表示されるのに接続できない場合は、サーバーOSのファイアウォールがブロッ クしている可能性が高いです。
まずは 1. サーバー側のファイアウォール設定 と 2. クラウドプロバイダーのファイアウォール設定 を重点的に確認してみてください。9割以上のケースはこれで解決します。