Mosh はsshの代用ツールで、ネットワークが一度切れても つながり次第接続が再開してくれるコマンドラインツールです。
そのMoshを使ってサーバーにアクセスしようとした時にちょっと手間取った所のメモ。
まあ、単にFirewallの設定を見落としてただけですが。
Mosh
Moshに関して詳しくはこちら。
sshの様にコマンドラインで他の端末に繋ぐことが出来るコマンドですが、 udpポートで接続を作って一度ネットワークが切れても継続的にチェックを行って つながり次第元の様に作業が続けられる、と言ったツールです。
接続時には一度sshで認証を行ってログインするような作業がバックグラウンドで 行われるのでsshで接続できることは前提になります。
moshを開始すると、sshでサーバーにアクセスし、サーバー側でmosh-server
というプロセスを開始し(事前に起動させておく必要は無い)、
そこにクライアント側からudpで接続します。
ちょっと移動する時にノートパソコンを一旦閉じて移動したりする時に 作業を開いてすぐに再開出来たりしてとても便利です。
また、ネットワークが不安定なところでは必須です。
Linuxサーバーでmoshを待ち受ける
Moshではデフォルトで60000-61000ポートの空いてるポートを使用します。 オプションでポートを指定することも可能です。
ですので、取り敢えず使うポートを開放しないといけません。
Firewall(iptable)設定
使ってるサーバーではiptablesを使ってるので、suになって、
# /sbin/iptables -I INPUT -p udp -m udp --dport 60000:61000 -j ACCEPT
# /sbin/service iptables save
# /sbin/service iptables restart
とかしておきます。
ここで一つ間違えてたのが
# /sbin/iptables -A INPUT -p udp -m udp --dport 60000:61000 -j ACCEPT
としてしまっていた所。
先の設定で、余計なものは全て遮断するために
-A INPUT -j DROP
な設定をしていました。
-A
(--append
)オプションだと後から追加、になり、iptablesでは先のルールが優先されるため
上の設定が先にあると後に何を足しても意味がありません。
-I
(--insert
)とするとそのチェイン(i.e. INPUT
)の最初に入ります。
-I INPUT 2
のようにすれば2番めに挿入。
-A
してしまったり、その辺が面倒であれば設定ファイル(/etc/sysconfig/iptables)を直接編集して
上下してあげて
# /sbin/service iptables restart
とすればOK。
この辺の話はmoshに限ったことではありませんが、 iptablesとか最初に設定するとその後余りいじらないので意外と見落としがちな所だったので。
ルーターの設定(静的IPマスカレード設定)
このサーバーが一つのグローバルIPアドレスを割り当てられて、 その中にローカルコンピューターがいくつかあるような設定だったので (そのうちの一つがログインサーバーとして外からssh出来る様になっている)、 静的IPマスカレードの設定で、 外からこのIPの60000-61000ポートへのアクセスを ログインマシン(例えば192.168.1.2)の60000-61000のポートに繋ぐ様にします。
ルーターでの設定はルーター毎に違うすぎるのでルーターのマニュアル参考。
また、上にも書いたように、moshは裏でsshを使うので、 ssh(22ポート)が設定されているマシンだけにたいしてmoshも設定できます。
moshでは
$ mosh --ssh "ssh -p 1022" -p 60000 server.exaple.com
みたいにsshのポート指定もできるので、sshのポートが別のポートになっていても大丈夫です。
まとめ
というわけで、
Nothing received from server on UDP port 60000
みたいなメッセージが出てつながらない時はルーターの設定もそうですが、 Firewallの設定もしっかりと見なおそう、という所で。
ちなみに2年ほど前のポストで(moshを作ってる関係者?)、
Running Mosh behind a NAT - Hack: http://hack.swic.name/running-mosh-behind-nat/
こんなのがありました。
NAT
を使ってる場合には
--bind-server=any
というオプションを使えばいけるけどこのオプションは
GitHubの最新版にしか無いのでビルドしてね、ということですが、
現在のmoshのバージョンではこのオプションは普通に使えます。
この状況とは違うので今回は使ってませんが、
この場合にも同じようにNothing received
なエラーが出るということで、
一応メモ。