🕺

ネットワークデバック方法

2023/11/20に公開

概要

ネットワーク関連でバックする時に使用する便利なコマンドについてメモする。
なお、ここに記載されているものは「Amazon Web Services 基礎からのネットワーク&サーバー」がベースになっている。
https://www.amazon.co.jp/Amazon-Web-Services基礎からのネットワーク&サーバー構築改訂4版-大澤-文孝/dp/4296202049/ref=sr_1_1?adgrpid=109050009774&gclid=Cj0KCQiAmNeqBhD4ARIsADsYfTeZbLTCagxOU8XfoaDYX2HopTnrkPZyB1P3jsVrajV1OprTGqPKP3QaAkGuEALw_wcB&hvadid=679022916424&hvdev=c&hvlocphy=1009255&hvnetw=g&hvqmt=b&hvrand=18230263296799124575&hvtargid=kwd-969670487999&hydadcr=27272_14738606&jp-ad-ap=0&keywords=基礎からのネットワーク+サーバー構築&qid=1700125513&sr=8-1

デバックの流れ

ネットワークにつながっていないときは、実際にネットワーク接続処理が走る順番で、上から順に確認すると良い。

  1. Wifi などの物理的な接続に問題がないか
  2. nslookup または dig を使用して DNS に問題ないか
  3. ping を使用してネットワーク接続に問題ないか
  4. telnet または netcat を使用して アプリケーションが動作に問題ないか
  5. cpdumpwiresharsk を使用してパッケットのやりとりに問題ないか

TCP/IP で見るとこんな関係性。

コマンド
ネットワークインターフェース層 物理接続確認
インターネット層 ping
トランスポート層 telnet, netcat
アプリケーション層 tcpdump, wireshark

また、プライベートネットワーク内で構築されたデータベースサーバーが意図してる IP アドレス経由でインターネット通信を行なっているかを確認するときは、traceroute を使用する

各コマンドの説明

nslookup

$ nslookup google.com
出力
$ nslookup google.com
Server: x.x.x.x
Address: x.x.x.x#53 // 53はポート番号

Non-authoritative answer:
Name:	google.com
Address: 142.250.207.14

DNS サーバーに問い合わせて、IP アドレスを確認するコマンド。
「Non-authoritative」記載されているのは、権威サーバーでなくキャッシュサーバーから取得してることを示す。

dig

$ dig google.com
出力
$ dig google.com
; <<>> DiG 9.10.6 <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41942
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1280
;; QUESTION SECTION:
;google.com.			IN	A

;; ANSWER SECTION:
google.com.		230	IN	A	142.250.207.14

;; Query time: 23 msec
;; SERVER: x.x.x.x#53(x.x.x.x)
;; WHEN: Mon Nov 20 11:27:00 JST 2023
;; MSG SIZE  rcvd: 55

nslookup と同じ DNS サーバーに問い合わせて、IP アドレスを確認するコマンド。
dig の方がより詳細な情報を得ることができる。

ping

$ ping google.com
出力
$ ping google.com
PING google.com (142.250.207.46): 56 data bytes
64 bytes from 142.250.207.46: icmp_seq=0 ttl=116 time=13.256 ms
64 bytes from 142.250.207.46: icmp_seq=1 ttl=116 time=17.763 ms
64 bytes from 142.250.207.46: icmp_seq=2 ttl=116 time=22.924 ms
...

指定したドメイン名もしくは IP アドレスがネットワークにつながっているかを確認するコマンド。
ICMP(Internet Control Message Protocol)プロトコルを使用するため、このプロトコルを拒否しているホストやファイヤウォールでは失敗することがある。
つまり、失敗したとしてもネットワークにはつながってる可能性があることに注意。

telnet

$ telnet www.google.com 80
出力
$ telnet www.google.com 80
Trying 142.250.207.36...
Connected to www.google.com.
Escape character is '^]'.
GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Mon, 20 Nov 2023 02:41:58 GMT
Expires: -1
...

指定したドメイン名や IP アドレス上の Port でアプリケーションが動いてるかどうか確認するコマンド。
http アプリケーションや SMTP アプリケーションなどが正常に動作してるかを確認するために使用する。

netcat

$ nc google.com 80
出力
$ nc google.com 80
GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Mon, 20 Nov 2023 02:55:21 GMT
Expires: -1
...

telnet と同様、指定したドメイン名や IP アドレス上の Port でアプリケーションが動いてるか確認することができる。
他にも、ファイル転送や、チャットサーバーになることもできる。

tcpdump

$ sudo tcpdump // すべて
$ sudo tcpdump tcp // 特定のプロトコル
$ sudo tcpdump port 80 // 特定のポート
$ sudo tcpdump src google.com // 特定ドメイン名
詳細
$ sudo tcpdump src google.com
tcpdump: data link type PKTAP
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on pktap, link-type PKTAP (Apple DLT_PKTAP), capture size 262144 bytes
12:08:45.425815 IP nrt13s55-in-f14.1e100.net > 192.168.11.5: ICMP echo reply, id 42676, seq 0, length 64
12:08:46.433483 IP nrt13s55-in-f14.1e100.net > 192.168.11.5: ICMP echo reply, id 42676, seq 1, length 64
12:08:47.430309 IP nrt13s55-in-f14.1e100.net > 192.168.11.5: ICMP echo reply, id 42676, seq 2, length 64

別ターミナルで ping を打ってる

パケットをキャプチャすることができる。
特定のプロトコルやポート、IP アドレスでフィルタリングできる。
GUI で確認したい場合は、Wireshark を使用する。

traceroute

$ traceroute google.com
出力
$ traceroute google.com
traceroute to google.com (x.x.x.x), 64 hops max, 52 byte packets
 1  buffalo.setup (192.168.11.1)  2.781 ms  1.957 ms  2.210 ms
 2  * * *
 3  10.202.115.131 (10.202.115.131)  19.043 ms  24.820 ms  28.257 ms
 4  172.25.27.233 (172.25.27.233)  17.235 ms  18.564 ms  24.907 ms
 5  10.1.11.229 (10.1.11.229)  14.250 ms  24.343 ms  26.657 ms
 6  nfgw1-be1.at-dc.zaq.ad.jp (220.152.46.18)  19.562 ms  20.426 ms  15.518 ms
 7  142.250.167.52 (142.250.167.52)  19.446 ms
    142.250.163.198 (142.250.163.198)  26.201 ms
    142.250.167.52 (142.250.167.52)  18.827 ms
 8  * * *
 9  172.253.66.202 (172.253.66.202)  26.330 ms
    nrt13s54-in-f14.1e100.net (142.250.207.14)  15.750 ms
    172.253.75.94 (172.253.75.94)  17.449 ms
...

指定したドメイン名または IP アドレスに辿り着くまでに、どのようなルートでアクセスしているのかを確認する方法。
プライベートネットワーク内で構築されたデータベースサーバーが意図してる IP アドレス経由でインターネット通信を行なっているかを確認する時に便利。
ただし、ping 同様 ICMP プロトコルをが制限されていると、結果を正しく表示することができない。

GitHubで編集を提案

Discussion