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