Virtualbox上にubuntuの仮想サーバーを立ち上げSSH接続。Railsサーバーを立ち上げるところまでは成功したが、ホストOS上のブラウザにプレビュー表示がなぜかできない。
SSH接続は出来ている。pingも通る。なのに「このサイトにアクセスできません」
結論:原因はFirewall。Firewallを解除すれば表示可能。
状況や具体的な解除方法を記しておく。
前提
作動環境
- ホストOS:macOS Catalina 10.15.7
- ホスト側ブラウザ:Google Chrome
- ホスト側エディター:VSCode
- ゲストOS:Ubuntu
- VM:Vertualbox
経緯
転職先で改めてRailsチュートリアルをすることになり、ホスト型仮想化を用いて環境構築を行った。
Virtualboxで仮想環境を生成し、ゲストOS(Ubuntu)へのSSH接続完了。
Rails newして、生成されたディレクトリのマウントも完了。
さあ、Railsチュートリアル1.3.2を進めるぞ、というところ。
ホスト型仮想化?VM?ホストOSとかゲストOSとかなんのこっちゃ?という方は、下記も参照。
Ubuntuとか初めて聞いた!という方は、Linuxによくある勘違いをしているかもしれません。こちら参照:
ブラウザにプレビューを表示できない(問題)
SSH接続済のVScodeのターミナルから、サーバーを起動
$ bundle exec rails s -b 0.0.0.0
=> Booting Puma
=> Rails 5.1.6 application starting in development
=> Run `rails server -h` for more startup options
Puma starting in single mode...
* Version 3.9.1 (ruby 2.5.1-p57), codename: Private Caller
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
“Puma starting in single mode…”と、Railsサーバーは無事立ち上がっているように見える。
そこでブラウザ(Chrome)でプレビューを見ようと、
http://[UbuntuのIPアドレス]:3000/
にアクセスを試みたところ、アクセスできませんでした。

なんでや!
「-b 0.0.0.0」のオプションもちゃんとつけて、SSH接続したIPアドレスと相違ないことも確認したのに・・・!
Virtualboxのポート番号の設定も色々試してみたのに・・・
Google先生に泣きついても答えは出ず、先輩に泣きついても答えは出ず。
pingは通る場合の解決策:ファイヤーウォールの無効化
上司が言うには、
「もしpingが通るならIPアドレスは合っていると考えて、動作させているUbuntu の方で iptables とか Firewallのようなものが動いていて、3000 番ポートが外から接続できないようになっている可能性がある」
とのこと。
確かに、エラー画面にもファイヤーウォールを確認せいと書いてある。
管理者権限で、ファイヤーウォールを無効化
$ sudo ufw disable
無事に表示!
こんなに「Yey! You’re on Rails!」の表示が嬉しかったのは、人生初めて。
学んだこと:「エラー画面をよく見る」基本は遵守
ファイヤーウォールを確認って、おそらく家電製品の「コンセントはささっていますか?」レベルのトラブルシューティングのプロセスだよね、きっと。
どんな接続エラーにも書いてあるもんだから、無視する悪癖がついてしまった・・・
やはり基礎基本は大切ですね。
ということで今回の学び
以上、同じトラブルに合っている人の助けになれば嬉しいです。

最後まで読んでくださってありがとうございました!
コメント