BLOGTIMES
2017/02/07

ping は帰って来るのに No route to host ?

  networking  iptables 
このエントリーをはてなブックマークに追加

サーバに ssh 接続しようとしたら、見慣れない No route to host が。

$ ssh hoge.example.com ssh: connect to host hoge.example.com port 22: No route to host

サーバが落ちていたり、パケットがフィルタされている場合には Connection timed outConnection refused が出ることはよくありますが、No route to host というのは初めてです。
もっと謎挙動なのはこのサーバに対する ping は通ってしまうということ。まったく状況が飲み込めません

原因は結局 iptables

いろいろ悩みましたが、みんな同じ所でハマるようで、これの発生原因は iptables の一番最後に鎮座している以下の行。

-j REJECT --reject-with icmp-host-prohibited

REJECT のタイプが icmp-host-prohibited の場合には No route to host と表示されるようです。
iptables の man を確認してみると REJECT とした場合のデフォルトのタイプは icmp-port-unreachable となっているので、このタイプの場合には ssh は Connection refused と表示を行うようです。

Man page of iptables-extensions

指定できるタイプは icmp-net-unreachable, icmp-host-unreachable, icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited, icmp-host-prohibited, icmp-admin-prohibited (*) である。指定したタイプの適切な ICMP エラーメッセージを返す (icmp-port-unreachable がデフォルトである)

    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/9128
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン