moshを導入しようとして凡ミスでハマった

moshを導入しようとして凡ミスしてたのでメモしておきます.

クライアント側に出ていたエラー

http://tukaikta.blog135.fc2.com/blog-entry-210.html

上記のエントリを参考にさせていただきながらサーバ側( sakuraのVPS )とクライアント側( mac )の設定を行いました。 無事設定完了して、クライアント側のmacからmoshを起動しようとすると下記のようなエラーがでて起動できませんでした。

mosh: Nothing received from server on UDP port 60001.

Firewallの確認

サーバ側のFirewallはiptablesに以下のように設定していたのでポートは開いているような気がしていました。

-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 60000:61000 -j ACCEPT

そこで、実際に通信が行われているか確認するためにサーバ側でtcpdumpを実行して確認してみました。

tcpdump host (クライアント側のhostname) and not (SSHのポート) # sshのpacketが邪魔なのでフィルタリングしておく
22:53:19.477223 IP (クライアント側のhostname).60950 > (サーバ側のhostname).60001: UDP, length 71
22:53:19.477271 IP (サーバ側のhostname) > (クライアント側のhostname): ICMP host (サーバ側のhostname) unreachable - admin prohibited, length 107

あぁ。。。と思いiptablesの設定を見直してみると icmp-host-profibitedの設定がmoshのポート設定の上にきてしまっていました。。
iptablesは上からフィルタが適応されているので、これでは当然動かないですね。凡ミス。

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
....
# 先にicmp-host-prohibitedの設定が適応されてしまているので動かない
-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 60000:61000 -j ACCEPT

以下のように順番を逆にすると無事動いた。

-A RH-Firewall-1-INPUT -m state --state NEW -m udp -p udp --dport 60000:61000 -j ACCEPT
...
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

凡ミスでタイムロスしないように気をつけます。
それにしてもmosh、快適ですね・・・!
回線がe-mobileしかない貧民なので、感動しました。