勉強日記

チラ裏

LPIC あずき本v5.0 ch11 ネットワークの基礎 11.3

www.shoeisha.co.jp


ネットワークのトラブルシューティング

  • ネットワーク自体の技術的な理解
  • Linuxシステムの設定の理解
  • 各種コマンドの理解

主なネットワーク設定・管理コマンド

ping

  • ICMP: Internet Control Manage Protocol パケットを送り、反応を表示する
  • ネットワーク層(L3)レベルで疎通できてんの?ってやつ
  • 問題の切り分け
    • Webサーバソフトウェアがダウンしていてもホストが動いていれば反応は返る
ping
Usage: ping [-aAbBdDfhLnOqrRUvV64] [-c count] [-i interval] [-I interface]
            [-m mark] [-M pmtudisc_option] [-l preload] [-p pattern] [-Q tos]
            [-s packetsize] [-S sndbuf] [-t ttl] [-T timestamp_option]
            [-w deadline] [-W timeout] [hop1 ...] destination
Usage: ping -6 [-aAbBdDfhLnOqrRUvV] [-c count] [-i interval] [-I interface]
             [-l preload] [-m mark] [-M pmtudisc_option]
             [-N nodeinfo_option] [-p pattern] [-Q tclass] [-s packetsize]
             [-S sndbuf] [-t ttl] [-T timestamp_option] [-w deadline]
             [-W timeout] destination
  • ping6ってヤツもいる
ls -l $(which ping6)
lrwxrwxrwx 1 root root 4  2月 24 02:09 /bin/ping6 -> ping
  • 主なオプション
man ping
...
       -c count
              Stop  after  sending  count  ECHO_REQUEST packets. With deadline
              option, ping waits for count ECHO_REPLY packets, until the time‐
              out expires.
...              
       -i interval
              Wait  interval seconds between sending each packet.  The default
              is to wait for one second between each packet normally,  or  not
              to  wait in flood mode. Only super-user may set interval to val‐
              ues less than 0.2 seconds.
...              
  • -6
  • -c 回数
    • 指定の回数パケットを送信して終了
  • i インターバル
    • 指定の秒数の間隔でICMPパケットを送出
    • デフォルト1秒
    • rootのみ0.2秒未満の間隔を指定可能
  • 【備忘録】dockerではIPv6がデフォルト無効なので、そのままではping6は動かない
connect: Cannot assign requested address
  • IPv4でICMPパケットを4回送出
ping -c 4 localhost
PING localhost (127.0.0.1) 56(84) bytes of data.
64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.030 ms
64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.051 ms
64 bytes from localhost (127.0.0.1): icmp_seq=3 ttl=64 time=0.051 ms
64 bytes from localhost (127.0.0.1): icmp_seq=4 ttl=64 time=0.130 ms

--- localhost ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3065ms
rtt min/avg/max/mdev = 0.030/0.065/0.130/0.039 ms
  • ttl: time to live
    • ICMPパケットの最大生存期間(ホップするルータ)
TTL DETAILS
       The  TTL  value  of  an  IP  packet represents the maximum number of IP
       routers that the packet can go through before being  thrown  away.   In
       current  practice  you can expect each router in the Internet to decre‐
       ment the TTL field by exactly one.
  • time
    • レスポンス時間(RTT: Round-Trip Time)
      • 送って返ってくるまで

traceroute

  • ホストまでICMPパケットが伝わる経路を表示
  • pingが通らなかった場合、それだけでは問題がネットワークのグラフのエッジにあるのかノードにあるのか、どこにあるのか特定できない
  • tracerouteで特定できる
ping -c 1 google.co.jp
PING google.co.jp (216.58.197.163) 56(84) bytes of data.
64 bytes from nrt12s02-in-f3.1e100.net (216.58.197.163): icmp_seq=1 ttl=54 time=5.72 ms

--- google.co.jp ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 5.728/5.728/5.728/0.000 ms
traceroute google.co.jp
  • 身バレしそう
traceroute to google.co.jp (216.58.197.163), 30 hops max, 60 byte packets
 1  gateway (172.17.0.1)  1.476 ms  1.400 ms  1.331 ms
 2  192.168.16.1 (192.168.16.1)  6.619 ms  6.875 ms  6.796 ms
 3  fp276e9a01.tkyc201.ap.nuro.jp (39.110.154.1)  12.265 ms  12.130 ms  13.744 ms
 4  118.238.196.86 (118.238.196.86)  8.147 ms  8.322 ms  8.391 ms
 5  39.110.252.69 (39.110.252.69)  7.913 ms  8.411 ms  8.026 ms
 6  202.213.193.56 (202.213.193.56)  16.329 ms 202.213.193.88 (202.213.193.88)  8.324 ms 202.213.193.56 (202.213.193.56)  8.198 ms
 7  72.14.243.129 (72.14.243.129)  7.066 ms  5.074 ms  5.014 ms
 8  108.170.242.97 (108.170.242.97)  4.292 ms  4.357 ms 108.170.242.129 (108.170.242.129)  8.020 ms
 9  216.239.62.27 (216.239.62.27)  5.324 ms  5.396 ms  5.452 ms
10  nrt12s02-in-f3.1e100.net (216.58.197.163)  6.301 ms  8.389 ms  8.329 ms
ls -l $(which traceroute6)
lrwxrwxrwx 1 root root 10 Apr 17 08:37 /usr/bin/traceroute6 -> traceroute
traceroute -6 <ホスト>
  • 【補】UDP over IP使用可能
traceroute -U google.co.jp
# traceroute --udp google.co.jp # おなじ
traceroute --udp google.co.jp
traceroute to google.co.jp (172.217.25.67), 30 hops max, 60 byte packets
 1  172.17.0.1 (172.17.0.1)  0.813 ms  0.722 ms  0.664 ms
 2  192.168.16.1 (192.168.16.1)  10.466 ms  412.692 ms  412.726 ms
 3  fp276e9a01.tkyc201.ap.nuro.jp (39.110.154.1)  467.032 ms  467.472 ms  483.287 ms
 4  118.238.196.86 (118.238.196.86)  478.331 ms  478.309 ms  478.340 ms
 5  39.110.252.69 (39.110.252.69)  482.487 ms  482.468 ms  482.535 ms
 6  202.213.193.56 (202.213.193.56)  492.100 ms 202.213.193.88 (202.213.193.88)  40.498 ms 202.213.193.56 (202.213.193.56)  32.995 ms
 7  * * *
 8  * * *
 9  * * *
10  * * *
11  * * *
12  * * *
13  * * *
14  * * *
15  * * *
16  * * *
17  * * *
18  * * *
19  * * *
20  * * *
21  * * *
22  * * *
23  * * *
24  * * *
25  * * *
26  * * *
27  * * *
28  * * *
29  * * *
30  * * *

tracepath

  • 【補】UDPパケットを使用する
    • ICMPバケットではなく
    • IPパケットを使用するので、MTU長が表示される
      • MTU: Max Transfer Unit
tracepath google.co.jp
 1?: [LOCALHOST]                                         pmtu 1500
 1:  gateway                                               0.061ms 
 1:  gateway                                               0.083ms 
 2:  192.168.16.1                                          1.882ms 
 3:  fp276e9a01.tkyc201.ap.nuro.jp                         6.759ms 
 4:  118.238.196.86                                        6.816ms 
 5:  39.110.252.69                                         4.309ms 
 6:  202.213.193.88                                        5.049ms 
 7:  no reply
 8:  no reply
 9:  no reply
10:  no reply
11:  no reply
12:  no reply
13:  no reply
14:  no reply
15:  no reply
16:  no reply
17:  no reply
18:  no reply
19:  no reply
20:  no reply
21:  no reply
22:  no reply
23:  no reply
24:  no reply
25:  no reply
26:  no reply
27:  no reply
28:  no reply
29:  no reply
30:  no reply
     Too many hops: pmtu 1500
     Resume: pmtu 1500 
  • 途中からtracerouteと結果が異なる
    • ICMPとUDP over IPとで違うっぽい?
    • traceroute -UUDPを使用すると同じ感じの経路情報を得た
  • IPv6用はtracepath6

hostname

  • ホスト名表示・変更
  • 取得
[root@a1cdb82b868b /]# hostname
a1cdb82b868b
  • 変更(一時)
sudo hostname piyo
  • 【補】恒久変更1
sudo hostnamectl set-hostname piyo
  • 【補】恒久変更2: /etc/hostnameを変更

netstat

  • ネットワーク機能に関するさまざまな情報を表示
    • 開いているポートの確認など
  • Red Hat7やCentOS7ではdeprecated
    • ss使え
      • iproute2パッケージに入っている
  • deprecatedではあるがnet-toolsをインストールすると入ってくる
  • TCP/UDPポートでLISTEN(接続待受中)のものを全表示
    • ESTABLISHED(接続中)とかは表示しない
    • UNIXソケット通信は表示しない
sudo netstat -atup | grep LISTEN
  • sudoじゃないとプロセスが見えない
tcp        0      0 localhost:domain        0.0.0.0:*               LISTEN      624/systemd-resolve 
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN      28294/sshd          
tcp        0      0 localhost:ipp           0.0.0.0:*               LISTEN      10044/cupsd         
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      28294/sshd          
tcp6       0      0 ip6-localhost:ipp       [::]:*                  LISTEN      10044/cupsd         
  • ポート番号ごと詳細
    • 22
    • 53
    • 631
      • IPP: Internet Printer Protocol
  • -nオプション
        -n, --numeric            名前のレゾルブをしない
  • デフォルト、名前解決を行う
    • 【疑問点】IPアドレス等から名前を逆引きするってこと?
  • DNSサーバに障害があったりすると表示が止まってしまう
  • そういうときは名前解決せず、IPアドレスの数字の羅列そのまま表示する
sudo netstat -atupn | grep LISTEN
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN      624/systemd-resolve 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      28294/sshd          
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      10044/cupsd         
tcp6       0      0 :::22                   :::*                    LISTEN      28294/sshd          
tcp6       0      0 ::1:631                 :::*                    LISTEN      10044/cupsd         
  • 主要なオプション
    • -a, --all
      • すべてのソケット情報を表示
      • デフォルト: 接続済のもののみ
        • ESTABLISHED(接続済)
        • TIME_WAIT(接続終了待ち)
      • LISTEN(接続待ち)を表示したい場合必須
    • -c, --continuous
      • 1秒ごとに更新
    • -i, --interfaces
      • ネットワークインタフェースの状態を表示
    • -n, --numeric
      • 名前解決(逆引き)せず、アドレスやポートを数値で表示する
    • -p, --programs
      • PIDとプロセス名も表示
        • root権限がないと、所有していないプロセスは表示されない
    • -r, --routing
      • ルーティングテーブルの表示
      • なぜか --routingだと動かない
    • -t, --tcp
      • TCPのポートのみ表示(-uと併用可)
      • UNIXソケット通信は表示しない
    • -u, --udp
      • UDPのポートのみ表示(-tと併用可)
      • UNIXソケット通信は表示しない
netstat -i
# netstat --interfaces # おなじ
カーネルインタフェーステーブル
Iface      MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
br-44d1b  1500        0      0      0 0             0      0      0      0 BMU
br-6d041  1500        0      0      0 0             0      0      0      0 BMU
br-864d5  1500        1      0      0 0           573      0      0      0 BMU
br-d85b8  1500        0      0      0 0             0      0      0      0 BMU
docker0   1500    78035      0      0 0         95365      0      0      0 BMU
enp0s25   1500        0      0      0 0             0      0      0      0 BMU
lo       65536   218631      0      0 0        218631      0      0      0 LRU
wlp3s0    1500  8778866      0      0 0      11217340      0      0      0 BMRU
netstat -r
# netstat --routing # なぜか動かない
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ   MSS Window  irtt インタフェース
default         _gateway        0.0.0.0         UG        0 0          0 wlp3s0
link-local      0.0.0.0         255.255.0.0     U         0 0          0 wlp3s0
172.16.238.0    0.0.0.0         255.255.255.0   U         0 0          0 br-d85b89bb30a7
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
172.24.0.0      0.0.0.0         255.255.0.0     U         0 0          0 br-6d041025d893
172.30.0.0      0.0.0.0         255.255.0.0     U         0 0          0 br-864d5373b5ba
192.168.16.0    0.0.0.0         255.255.255.0   U         0 0          0 wlp3s0
192.168.32.0    0.0.0.0         255.255.240.0   U         0 0          0 br-44d1bd312b90

nc, ncat

  • netcatの意
  • ネットワーク上でcatする
  • ネットワーク通信の確認に利用できる
  • LISTENする側
nc -l -p 12345 -o listen.log
  • データ送りつける側
echo 'hoge' | nc somehost 12345 
  • オプション
    • -l
      • 指定のポートをLISTEN
    • -p
      • ポート指定
        • 受信
        • 送信
    • -u
      • UDP使う
        • cf. デフォルトTCP
    • -U
      • Unixソケット通信使う
    • -o
      • 指定したファイルに出力する
      • ncの実装によっては-oオプションはない??
NC(1)                     BSD General Commands Manual                    NC(1)

NAME
     nc — arbitrary TCP and UDP connections and listens
NCAT(1)                      Ncat Reference Guide                      NCAT(1)

NAME
       ncat - Concatenate and redirect sockets
  • 手元のUbuntuには(いつの間にか)ncとncatが両方入っていた
  • -oオプションはncatでしか利用できず

route

  • ルーティング
    • 複数のネットワーク間でデータが正しく届くように、IPパケットの通過する経路(route)を制御する
  • ルーティングテーブル
    • ルーティングのための情報が記述されている
  • Red Hat 7やCentOS7ではdeprecated
    • ipコマンド使え
      • iproute2パッケージに入っている
  • deprecatedではあるがnet-toolsをインストールすると入ってくる
route
  • netstat -rとほぼ同じ
    • カラムがちょっとちがう
  • Dockerコンテナで叩いたやつ
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.17.0.1      0.0.0.0         UG    0      0        0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0
  • ホストで叩いたやつ
カーネルIP経路テーブル
受信先サイト    ゲートウェイ    ネットマスク   フラグ Metric Ref 使用数 インタフェース
default         _gateway        0.0.0.0         UG    600    0        0 wlp3s0
link-local      0.0.0.0         255.255.0.0     U     1000   0        0 wlp3s0
172.16.238.0    0.0.0.0         255.255.255.0   U     0      0        0 br-d85b89bb30a7
172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 docker0
172.24.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-6d041025d893
172.30.0.0      0.0.0.0         255.255.0.0     U     0      0        0 br-864d5373b5ba
192.168.16.0    0.0.0.0         255.255.255.0   U     600    0        0 wlp3s0
192.168.32.0    0.0.0.0         255.255.240.0   U     0      0        0 br-44d1bd312b90
route --help
        -F, --fib                フォワード情報ベースを表示する(標準)
        -C, --cache              FIBのかわりに経路キャッシュを表示する
  • 出力の項目
    • Destination(受信先サイト)
      • 宛先のネットワークもしくはホスト
    • Gateway(ゲートウェイ)
    • Genmask(宛先のサブネットマスク)
      • ホストは255.255.255.255
      • デフォゲは0.0.0.0
    • Flags(フラグ)
      • U: 経路が有効
      • H: 宛先はホスト
      • G: ゲートウェイを使用
      • !: 経路は無効
    • Metric
      • 宛先までの距離
    • Ref
      • routeの参照数(不使用)
    • Use(使用数)
      • 経路の参照回数
    • Iface(インタフェース)
      • この経路を使うネットワークインタフェース
      • ifconfigコマンドで一覧できるやつ
  • 経路追加
    • 192.168.0.0 - 192.168.0.255をデフォゲ172.17.0.1に送る
route add -net 192.168.0.0 netmask 255.255.255.0 gw 172.17.0.1
route -F
  Kernel IP routing table
  Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
  default         172.17.0.1      0.0.0.0         UG    0      0        0 eth0
  172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0
+ 192.168.0.0     172.17.0.1      255.255.255.0   UG    0      0        0 eth0
  • デフォゲ設定・もどす
route add default gw 172.17.0.2
route del default gw 172.17.0.2
  • 経路情報消す
route del -net 192.168.0.0 netmask 255.255.255.0 gw 172.17.0.1
route -F
  Kernel IP routing table
  Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
  default         172.17.0.1      0.0.0.0         UG    0      0        0 eth0
  172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0
- 192.168.0.0     172.17.0.1      255.255.255.0   UG    0      0        0 eth0
  • Linuxをルータとして利用する場合は、異なるネットワーク間のパケット転送を許可する必要がある
cat /proc/sys/net/ipv4/ip_forward
  • 有効
1
  • 有効でなかった(0)場合、有効化
sudo echo 1 > /proc/sys/net/ipv4/ip_forward

ip

  • 下記のものなどを管理
    • ネットワークインタフェース
      • L3
    • ルーティングテーブル
      • L3
    • ARPテーブル
      • L2
  • 下記コマンドを統合した感じ
    • route
    • ifconfig
  • コマンド体系はdockerとおなじかんじ
    • 「何を」「どうする」
ip <操作対象> [サブコマンド] [デバイス]
  • 操作対象
操作対象 説明
link データリンク層
addr IPアドレス
route ルーティングテーブル
  • 主なサブコマンド
    • 省略時デフォルトshow
サブコマンド 説明
show 表示する
add 設定する
ip link show
  • brd: ブロードキャストアドレス
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp0s25: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN mode DEFAULT group default qlen 1000
    link/ether 28:d2:44:ff:ad:ef brd ff:ff:ff:ff:ff:ff
...
  • ルーティングテーブル表示
    • route -Fとおなじかんじ
ip route show
default via 192.168.16.1 dev wlp3s0 proto dhcp metric 600 
169.254.0.0/16 dev wlp3s0 scope link metric 1000 
172.16.238.0/24 dev br-d85b89bb30a7 proto kernel scope link src 172.16.238.1 linkdown 
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown 
172.24.0.0/16 dev br-6d041025d893 proto kernel scope link src 172.24.0.1 linkdown 
172.30.0.0/16 dev br-864d5373b5ba proto kernel scope link src 172.30.0.1 linkdown 
192.168.16.0/24 dev wlp3s0 proto kernel scope link src 192.168.16.102 metric 600 
192.168.32.0/20 dev br-44d1bd312b90 proto kernel scope link src 192.168.32.1 linkdown 
  • ネットワークインタフェースの状態やIPアドレスの表示
ip addr show docker0
10: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:28:e8:ba:6a brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:28ff:fee8:ba6a/64 scope link 
       valid_lft forever preferred_lft forever
ip addr add 192.168.11.1/24 dev eth0
ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2637: eth0@if2638: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
ip addr add 192.168.11.1/24 dev eth0
ip addr show 
  1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
      link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
      inet 127.0.0.1/8 scope host lo
         valid_lft forever preferred_lft forever
  2637: eth0@if2638: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
      link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
      inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
         valid_lft forever preferred_lft forever
+     inet 192.168.11.1/24 scope global eth0
+        valid_lft forever preferred_lft forever
  • デフォゲ設定
    • デフォゲを192.168.11.1に設定
ip route show
  • デフォゲ設定
ip route add default via 192.168.11.1

ネットワークインターフェースの設定

ifconfig

  • 情報表示・設定
  • Red Hat7やCentOS7ではdeprecated
    • ip使え
      • iproute2パッケージに入っている
  • deprecatedではあるがnet-toolsをインストールすると入ってくる
ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 4447  bytes 17303484 (17.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 3640  bytes 247703 (247.7 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  • ipコマンドでだいたい同じ情報を得るには
ip addr show eth0
2637: eth0@if2638: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default 
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 172.17.0.2/16 brd 172.17.255.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet 192.168.11.1/24 scope global eth0
       valid_lft forever preferred_lft forever
  • 設定
ifconfig eth0 192.168.0.50 netmask 255.255.255.0
  • ipコマンドで同じことするには
ip addr add 192.168.0.50/24 dev eth0

ifup, ifdown

  • 指定のネットワークインタフェースを有効/無効にする
  • 最近のディストリでは利用できなかったりする
    • NetworkManagerを使っているシステムなど