仮想環境とかサーバーが外部から繋がらない時にするデバッグ方法!

こういうときに大事なのは、エラーになりそうな怪しい箇所の範囲を縮めていくこと!

始めに確認するのはネットワーク上にIPアドレスがあるかどうか。外部からpingを打つべし。

ping xxx.xxx.xxx.xxx

xにはアクセスしたいサーバーやら仮想環境のIPアドレスが入る。
もし失敗するなら仮想環境のツール、例えばVirtualBoxの設定などが怪しい。この辺は検索すればたくさん出てくるので、そんなに困ることはないはず。

pingが成功したならば、次に確認すべきはポートが開いているかどうか。

telnet xxx.xxx.xxx.xxx pppp

xにはIPアドレス、pにはポート番号が入る。
自分の場合はwindows環境だったので標準機能?の telnet を使ったが、ポートが開いているか確認できればよい。

telnetのインストール方法や使い方は以下を参照してください。
http://www.atmarkit.co.jp/ait/spv/0207/06/news002.html

失敗したならばポートが開いていない。仮想環境やサーバー側のファイヤーウォール関係が怪しい。「自分の使ってるOS ポート開放」と検索すれば方法は出てくるはず。ポートを開放しても失敗する場合、次のデバッグ方法を参照して欲しい。
成功したなら外部からのアクセスはできていることになる。それでも思った結果が出ないのであるならば、仮想環境やサーバー側の問題となる。

ここまで来てしまった人は、外部からのアクセスができないと思っていたけど実は全然関係なかった!!
という人なのだ。だからエラー原因の箇所を狭めていくというのは大切なことなのだ。検討違いの対策に何時間消えたことか……

次に確認すべきは仮想環境内のOSの設定やサーバー側のポートの開放状態。

netstat -anp

自分の場合はLinuxだったので netstat を使った。オプションは好きにカスタムしよう。上記のオプションぐらいはチェックしておくと良いかも。大概は上記のままでオーケーなはず。

netstatのオプションは以下を参照してください。
http://itpro.nikkeibp.co.jp/article/COLUMN/20060227/230845/?ST=spleaf

たぶん表示結果に目的のポート番号は表示されていないだろう。
逆に表示されている場合は目的のサービスとは違うサービスが占領しているのだろう。その時は netstat の p オプションでPIDがわかっているはずなので kill するなりなんなりしよう。

ここで考えるべきは目的のサービスが自分の思ってるポート番号と違う可能性だ。公式ドキュメントを見直すのも良いと思うが、今回は簡単にサービスを起動している時としていない時で netstat の結果を見比べれば良い。

そして見つけたポートを開放してアクセスすれば成功しているはず!
それでも失敗している or ポートが見つからないなら、サービスの起動や設定を見直すべき。


いつも環境構築には苦労させられるが、それはエラーを特定するのが大変だからなのであろう。
根本としてコンピュータがどう動いているか、インターネットがどう通信しているかなどを知らず、特定をするための推理すらできないのが問題なのだと思う。
今回の例にしても、IPアドレスがあって、ポートがあって、サービスがあってという流れを知らなければ範囲を狭めることも出来なかったであろう。
今回、特定するにあたって初めて telnetnetstat の存在を知った。インターネットについてもよくわからないことが多い。こういった分野も勉強していかなければならないと感じた日であった、まる