AWSでpingは通るのに実際に接続しようとすると「No route to host」って言われる原因
pingは通ってパケットロスも無いのに、実際にtelnetやTCPSocketで繋ごうとすると「No route to host」って怒られる場合の対処法です。
試してみてダメだったこと
- /etc/hostsに色々書いてみた
- portとかも変更して色々試してみた
- AWSに関してはパブリックDNS、パブリックID、LAN ID全部試した
- elastic IPを関連付けさせてそれでも試した
何も得られなかった・・・
原因
結局最終的にはiptablesの以下の行が原因っぽい
REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
これはiptableを色々設定して、最終的に設定した以外のアクセスをRejectするよって設定で、AWSでGUI上のセキュリティグループからFirewall設定をするとデフォルトでついているものなのだが、これがあると何故かうまくいかない
(上で許可しているにも関わらずに)
対応策
"REJECT all -- anywhere anywhere reject-with icmp-host-prohibited"を使わない。
とはいえ、全部開放するのは危険なので、デフォルトでINPUTポリシーがACCEPTになっているのをDROPに変えることで対応する
例
Chain INPUT (policy DROP) # AWSでは通常ここはACCEPTになっている target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT icmp -- anywhere anywhere ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp dpt:telnet ACCEPT tcp -- anywhere anywhere tcp dpt:http #(REJECT all -- anywhere anywhere reject-with icmp-host-prohibited) # ⇒デフォルトでDROPにしてあるので、この行は不要となる
iptablesの設定方法は過去のブログ参照portaltan.hatenablog.com
これで繋がるようになりました