インフラの仕事をやってると障害が起きたときにネットワークコマンドをもっとうまいこと使えないかなと感じることがあります。
普段やらないのでここらで、ちょろっと調べてみたことをまとめてみます。
あと知らなかったのですがifconfig, arp, netstat といったコマンドはnetwork-toolsというパッケージに入ってるんですが、CentOS 7系から非推奨になってるんですね。
どうりで最近 ip addr とかよく見るなーっと思ってたんです。
そこでネットワークコマンドを調べてみました。
下記例で書いているIPや物理アドレスはすべて適当な値に変更しているので、表示例の内容として間違いがある(例えばルーティングがおかしいとか)かもしれませんがご容赦ください。
あくまで実行結果よりコマンド紹介に重きを置いています。
ifconfig と ip addr
ネットワークデバイスのIP情報を表示します。
(非推奨)ifconfig
このコマンドは非推奨です。
ifconfig bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST> mtu 9000 inet 10.11.12.13 netmask 255.255.255.0 broadcast 10.11.12.255 ether 0x:xx:xx:xx:xx:xx txqueuelen 0 (Ethernet) RX packets 15688333418 bytes 26978320897762 (24.5 TiB) RX errors 0 dropped 30337831 overruns 0 frame 0 TX packets 16172456258 bytes 73155725056592 (66.5 TiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 eno1: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ether 0x:xx:xx:xx:xx:xx txqueuelen 1000 (Ethernet) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
ip addr (ip a)
ifconfigの代わりにip addrを使います。
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 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 .............................. 6: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 9000 qdisc noqueue state UP link/ether 0x:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff inet 10.11.12.13/24 brd .10.11.12.255 scope global bond0
ip link
ip link というコマンドもあります。
現在のネットワークデバイスを確認できます。
ip -s link でネットワークデバイスの現在の使用状況もわかります。
arp と ip neigh
IPとMACアドレスの対応一覧であるARPテーブルを表示します。
(非推奨)arp
arp Address HWtype HWaddress Flags Mask Iface 10.11.12.13 ether 0x:xx:xx:xx:xx:xx C eth0
ip neigh (ip n)
ip neigh 10.11.12.13 dev eth0 lladdr 0x:xx:xx:xx:xx:xx REACHABLE
netstat と ss
TCP/IPの通信状態を確認する
(非推奨)netstat
TCPのみを表示してみます。
netstat -t Active Internet connections (w/o servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 32 10.11.12.13:ssh 110.10.1.111:tdmoip ESTABLISHED tcp 0 0 10.11.12.13:36387 ec2-55-55-55-555.comp:https ESTABLISHED tcp 0 0 10.11.12.13:ssh 110.10.1.111:22174 ESTABLISHED
ss
ss State Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 0 10.11.12.13:ssh 110.10.1.111:tdmoip ESTAB 0 0 10.11.12.13:36387 55.55.55.555:https ESTAB 0 0 10.11.12.13:ssh 110.10.1.111:22174
オプションとしては ss -lut として覚えておけばよさそう。
‐l : リスト、-t : TCP、‐u: UDP
だそうです
route と ip route
ルーティングテーブルを表示します。
(非推奨)route
route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.11.12.0 * 255.255.255.0 U 0 0 0 eth0 default 10.11.12.13 0.0.0.0 UG 0 0 0 eth0
ip route
ip route 10.11.12.0/24 dev eth0 proto kernel scope link src 10.11.12.129 default via 10.11.12.1 dev eth0
よく使いそうなコマンド
他によく使いそうなコマンドもあげてみます。
traceroute
目的のドメインまでどんなルーターを経てたどり着いているかをしらべる。
ネットワーク障害が起きたときによく使う
traceroute google.com
結果がいっぱい出て来てしまうので省略
getent
Linux - /etc/hosts に定義しているホストのIPを確認するコマンド|teratail
- /etc/hosts からホスト名・IP解決する
getent hosts <host name> getent hosts <IP address>
dig (もしくはnslookup)
DNSで名前解決してるかを確認する。
AWS のRoute53 の設定をいじった時によく使う。
dig google.com ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.30.rc1.el6_6.2 <<>> google.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41761 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0 ;; QUESTION SECTION: ;google.com. IN A ;; ANSWER SECTION: google.com. 60 IN A 172.217.26.14 ;; Query time: 1 msec ;; SERVER: 10.11.1213#53(10.11.12.13) ;; WHEN: Thu Apr 4 16:23:44 2019 ;; MSG SIZE rcvd: 44
似たコマンドに nslookup があるけど廃止されるらしい?
でもそう聞きつつ何年も経ってるような気が。
また host コマンドでもイケますね。
こんなところかなーと思います。
参考にしたサイト
下記に参考にしたページをのせます。詳しくは下記を見てください。
CentOS 7 では ifconfig、route、arp、netstat が非推奨 - eTuts+ Server Tutorial
Deprecated Linux Networking Commands and Their Replacements
【 ip 】コマンド(基礎編)――ネットワークデバイスのIPアドレスを表示する:Linux基本コマンドTips(146) - @IT
TCP/IP通信の状態を調べる「netstat」コマンドを使いこなす (1/2):Tech TIPS - @IT
ネットワーク - Linux入門 - Webkaru