やる気がストロングZERO

やる気のストロングスタイル

ネットワークの疎通デバッグ(ping, traceroute, curl, nslookup)

あまりネットワーク周りの調査をする機会がなかったのでふわっとしか認識してなかった疎通調査の方法についてまとめる。

nslookup

ドメイン名からIPアドレスを引けているかの確認ができる。

nslookup example.com

ping

ネットワーク層での通信疎通が確認できる。

ping 通信目標ドメインやIP

これで確認できるのは「フレームが目標に到達している」事。
サーバーの生存やアプリケーションが正常に稼働しているかどうかは見ていない。

※サーバーやルーターの設定によってはpingに返答しないものもある。

MTU値について

データは複数フレームに分割されて伝えられるが、1フレームのサイズの最大値がネットワーク・インターフェースに設定されている。 データ転送は複数の様々なルーター(ネットワークインターフェース)を経由するので、 フレームのサイズは経由するインターフェースの最小のMTU値に合わせられることになる。

pingはオプション指定で送信データサイズを指定することができ、またフラグメント分割を禁止することもできる。

これをつかえば経路の最小MTU値を調べることもできる。

Linuxの場合

ping {通信目標ドメインやIP} -M do -s 1400

1400バイトのデータをフラグメント化させずに送信する ※-M doを-M dontにするとフラグメント化が有効化される

上記で到達ができなければ、データサイズを少なくして到達できるサイズを探れば、最小MTU値を調べることができる。

traceroute

pingと同じくネットワーク層での通信の解析に使える。 目標到達までの経路を調べることができる。

traceroute 通信目標ドメインやIP

pingと同じくサーバーやルーターによっては返答しないものもある。

経路上のボトルネックを調べたり、 仮にpingで到達が確認できなかったルートが、どこまでは到達できているのかを調べたりできる。

curl

pingで通信できているのが確認できたら、curlでアクセスしてみる。 -vオプションをつければ詳細なアクセス情報が得られる。

curl -v http(s)://通信目標ドメインやIP

問題がなければレスポンス結果が受け取れる。
問題があれば、エラー内容を確認できる。

以下はbadssl.comというサイトが証明書の切れたサイトを配置してくれているので試した。
証明書期限切れによってコネクションを切断していることがわかる。
※-kオプションをつけると証明書を無視してアクセスする。

% curl -v https://expired.badssl.com/ 
*   Trying 104.154.89.105...
* TCP_NODELAY set
* Connected to expired.badssl.com (104.154.89.105) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS alert, Server hello (2):
* SSL certificate problem: certificate has expired
* stopped the pause stream!
* Closing connection 0
curl: (60) SSL certificate problem: certificate has expired
More details here: https://curl.haxx.se/docs/sslcerts.html