2024年5月20日月曜日

Oracle Cloud上のウェブサーバにアクセスできない

先日のこと、Oracle Cloudの仮想マシン上で動作させているウェブサーバに
スマートフォンからアクセスしようとしたところつながりません。なんで?
その場をなんとかするために色々試したところ、
別のスマートフォンでならつながったので事なきを得たのですが、
かなり焦りました。

で、後日色々疑い、色々調べたところ、
IPv4でだとアクセスできないことに気付きました。
いつものWi-Fi経由だとIPv6が利用可能なのですが、
MVNOにはIPv6をサポートしていないところが結構あって、
LTE経由でIPv4オンリーだと繋がらないのです。
ただしsshだとIPv4でも通るので、これはウェブ関連だけの症状であり、
つまりウェブサーバApacheに対してIPv4のTCPの80/443番ポート宛の
パケットが届いていないことがわかりました。
となるとクラウド内のネットワークの設定のせい当たりをつけ
確認してみましたが、設定は間違っていません。
http/httpsのIPv6やsshのIPv4の設定と見比べてもこれ以上どうするの
と言うぐらいのレベルで問題が見つかりません。

それならもしかしてApacheの設定か?
実際に
$ netstat -an --inet6
tcp6       0      0 :::443                  :::*                    LISTEN     
tcp6       0      0 :::80                   :::*                    LISTEN     
とIPv6ではポートがlistenされている(表示省略あり)のに、IPv4では
$ netstat -an --inet4
とlistenされていません(表示省略あり)。
しかし、Apacheの設定に特に問題があるように見えないorz
というかIPv6だけ通すような特殊な設定になってればすぐ気付くだろうと。
後でわかったのですが、前述のnetstatの件は
特定の条件下でIPv4のlistenポートがIPv6側にまとめて表示される
仕様のせいのようで、これでも問題ないことが分かりました。
また一つ賢くなってしまいました。

それはともかく、もうしょうがないので無闇矢鱈とググっていたところ、
ファイアウォールがどうこうという公式文書を発見。
ということで
# iptables -I INPUT 6 -m state --state NEW -p tcp --dport 80 -j ACCEPT
# iptables -I INPUT 6 -m state --state NEW -p tcp --dport 443 -j ACCEPT
# netfilter-persistent save
を実行するとIPv4でもウェブサーバに接続できるようになりました。
まさかの仮想マシン内ファイアウォールが原因でした。
セキュリティの名のもとにこういうことされると
言い返す言葉がないのですが、
この余計なお世話によって結構な時間を費やしました。
Ubuntuというなら素のUbuntuの状態にしておいてくれよ。

0 件のコメント:

コメントを投稿