読むだけでちょっと賢くなる、架空のまとめスレ

【疑問】Web サーバーにつながらない。どこから調べる?ping・traceroute・tracepath・ss・netcat と切り分けの順番【LPICレベル1】

22レスカテゴリ:Linux
1: 名無しさん

社内の Web サーバー(192.0.2.80)にブラウザでつながらへん
何から調べたらええの

2: 名無しさん

前提のおさらい。ip link でインターフェースが上がってるか、ip addr でアドレスが付いてるか、ip route で既定のルートがあるかを見られる

3: 名無しさん

>>1
下の層から順番に確かめる
1. 自分のインターフェースとアドレス(ip link、ip addr)
2. 既定のゲートウェイまで届くか(ip route で調べて ping)
3. 相手の IP アドレスまで届くか(ping、traceroute)
4. 名前で引けるか(getent hosts、dig)
5. 相手のポートが開いてるか(nc -zv、相手側で ss)

4: 名無しさん

>>3
ping の使い方は?

5: 名無しさん

>>4
ping -c 4 192.0.2.80 で4回だけ送る(-c なしやと Ctrl+C まで続く)。-i で間隔、-s で大きさ、-6 で IPv6(昔は ping6)
返事が来ると 64 bytes from 192.0.2.80: icmp_seq=1 ttl=64 time=… の形で、最後に何個送って何個返ったか(packet loss)が出る

6: 名無しさん

>>5
ping が届かんかったら、相手が落ちてるってこと?

7: 名無しさん

>>6
そうとは限らん。途中のファイアウォールや相手の設定で ICMP だけ止めてることがある。ping が通らなくても Web は動いてることもあるから、ポートも見る

8: 名無しさん

>>5
試したマシンで、パッケージから取り出しただけの ping を一般ユーザーで動かしたら socket: Operation not permitted と missing cap_net_raw+p capability or setuid? が出た。ping は生のソケットを使うから、普通に入れると cap_net_raw の権限が付く。/proc/sys/net/ipv4/ping_group_range が 1 0 で、権限なしの ICMP ソケットも使えない設定やった

9: 名無しさん

>>3
途中のどこで止まってるか知りたい

10: 名無しさん

>>9
traceroute。TTL を1、2、3…と増やしながら送って、途中のルーターが返す「時間切れ」の ICMP で、通った道を1つずつ表示する。返事がない段は * * *
Linux の traceroute は既定で UDP、-I で ICMP、-T で TCP。IPv6 は traceroute -6 か traceroute6

11: 名無しさん

>>10
127.0.0.1 で試したら traceroute to 127.0.0.1 (127.0.0.1), 30 hops max, 60 byte packets の後に1段目で 127.0.0.1 が出て終わった。最大30段

12: 名無しさん

>>10
tracepath は?

13: 名無しさん

>>12
traceroute と似てて、root の権限が要らない。途中の MTU(一度に送れる大きさ)も調べる。127.0.0.1 では 1: 127.0.0.1 … reached と Resume: pmtu 65535 hops 1 back 2 が出た。IPv6 は tracepath -6(昔は tracepath6)

14: 名無しさん

>>3
ping は通るのに Web が開かない

15: 名無しさん

>>14
ポートを確かめる。こっちからは nc -zv 192.0.2.80 80。開いてれば succeeded!、閉じてれば Connection refused、何も返らず待たされるならファイアウォールで捨てられてる可能性
サーバーの側では ss -tln で80番を待ち受けてるか見る

16: 名無しさん

>>15
ss のオプションは?

17: 名無しさん

>>16
-t TCP、-u UDP、-l 待ち受け中だけ、-n 名前に直さず番号、-p プロセスも表示(ほかのユーザーのは root で)、-a 全部、-s 集計
ss -tlnp が定番。ヘッダーは State Recv-Q Send-Q Local Address:Port Peer Address:Port。netstat -tlnp と同じ見方

18: 名無しさん

>>17
Local Address が 127.0.0.1:80 になってたら、自分のマシンからしかつながらん。0.0.0.0:80 や [::]:80 なら全部のアドレスで待ち受け

19: 名無しさん

>>15
netcat(nc)はほかに何ができるん

20: 名無しさん

>>19
簡単なサーバーにもクライアントにもなる。試したのは
nc -l 127.0.0.1 40123(待ち受け)
echo hello | nc -N 127.0.0.1 40123(送る)
で、待ち受け側に hello が届いた。待ち受け中は ss -tln に LISTEN 127.0.0.1:40123 が出てた。-u で UDP

21: 名無しさん

>>19
Debian の nc は netcat-openbsd。-N は送り終わったら接続を閉じる指定で、版によってオプションが違うから --help か man で確かめる

22: 名無しさん

>>3
下から順に、ping は ICMP やから通らなくても諦めない、途中は traceroute か tracepath、ポートは nc -zv と ss -tln。順番に見ていくわ

管理人のひとこと