Edited at

最低限知っておくべきネットワーク系コマンド

20170828180932.png


背景

IT未経験から3ヶ月ほど目に先輩より教えていただいた絶対知っておくべきネットワーク系コマンド7選です。

当時はあまり良く理解できませんでしたが(今も正直、、、)その時のメモをもとに再度まとめて見ました。

間違いやそんなの古すぎるわ!と言ったコメント大歓迎です。


対象読者


  • ネットワーク系のエンジニアじゃない人

  • Linux触って1,2ヶ月くらいの人

  • TCP/IPやDNS、HTTPといった概念をなんとなく知ってるレベルの人


取り上げるコマンド目次


  • dig

  • ifconfig(ip)

  • ping

  • traceroute

  • route

  • tcpdump

  • curl


dig - ドメイン名からIPアドレスを知る -

「dig」コマンドはDNSサーバに問い合わせることで、ドメイン名からIPアドレスを調べるコマンドです(逆も可能)

正しく名前解決ができていれば、ANSWER SECTION という項目に google.com の IP アドレ スが表示されるはずです。

$ dig www.google.co.jp

; <<>> DiG 9.10.6 <<>> -x 216.58.196.227
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 52158
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;227.196.58.216.in-addr.arpa. IN PTR

;; ANSWER SECTION:
227.196.58.216.in-addr.arpa. 15613 IN PTR kix06s01-in-f3.1e100.net.
227.196.58.216.in-addr.arpa. 15613 IN PTR kix06s01-in-f227.1e100.net.

;; Query time: 56 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Sun Nov 25 21:41:52 JST 2018
;; MSG SIZE rcvd: 125


ifconfig - ネットワークインターフェースの状態確認 -

lo というインターフェースは「ループバック インターフェース」という特別なインターフェー スで、自分自身と通信するために利用されます。

注意

CentOS 7 では標準では使えません。使えるように するためには、ifconfigコマンドなどが入っている

「net-tools」というパッケージをインストールする 必要があります。

net-toolsパッケージはネットワーク機能追加への対応が不十分になってきている背景があり、

現在は移行が推奨されています。(教えていただいた当初からなのでさらに進んでいると思いますが現場だと未だに多く使われている印象がありますね)

# ifconfig -a

eth0 Link encap:Ethernet(1) HWaddr 00:80:90:44:08:11(2)
inet addr:192.168.1.11(3) Bcast:192.168.1.255(4) Mask:255.255.255.0(5)
inet6 addr: fe80::3199:ff:fe01:3762/64 Scope:Link(6)
UP(7) BROADCAST(8) RUNNING(9) MULTICAST(10) MTU:1500(11) Metric:1(12)
RX packets:583312 errors:0 dropped:0 overruns:0 frame:0(13)
TX packets:28344 errors:0 dropped:0 overruns:0 carrier:0(13)
collisions:0 txqueuelen:100(13)
RX bytes:4987886272 (4.9 GB) TX bytes:50440257 (50.4 MB)(14)
eth1 Link encap:Ethernet HWaddr 00:80:00:48:AA:88
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:16 errors:0 dropped:0 overruns:0 frame:0
TX packets:16 errors:0 dropped:0 overruns:0 carrier:0


ping - 届いているかどうかを知る -

ping コマンドは、送ったパケッ トを相手にそのまま返送してもらうだけ、

というとてもシンプルなコマンドです。主に通信確認で使われたり遅延確認でも使われたりします。

-c オプションで ping を送る回数が指定でき ます。

このコマンドの実行で下記2点が確認できます


  • うまく通信できているのか?

  • もし通信出来ていない場合、その原因はどこにあるのか?

$ ping 192.168.1.1 -c 3

PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=0.347 ms
64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.441 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.387 ms

--- 192.168.1.1 ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.347/0.392/0.441/0.039 ms


traceroute - 道筋を知る -

パケットがどんな経路を通っているのかを知 るために、traceroute というコマンドがあります。

注意

セキュリティ上の都合などで、tracerouteするのに必要なパケットがフィルタされていると、

「* * *」と表示されてうまく表示されない場合があります。

注意

このコマンドで知ることが出来るのは往路だけです。

復路はまた違った経路をたどっていることもあります。

復路を確かめるためには相手から自分のネットワークに対して traceroute をしてもらい、その結果を共有してもらわなければ知ることはできません。

$ traceroute example.com

traceroute to example.com (93.184.216.34), 64 hops max, 52 byte packets
1 router.asus.com (192.168.1.1) 0.536 ms 0.260 ms 0.248 ms
2 118.23.25.236 (118.23.25.236) 2.631 ms 1.928 ms 1.663 ms
3 118.23.25.93 (118.23.25.93) 1.776 ms 2.196 ms 2.225 ms
4 118.23.13.173 (118.23.13.173) 3.679 ms 2.721 ms 3.015 ms
5 61.207.25.193 (61.207.25.193) 2.522 ms 2.715 ms 2.448 ms
6 125.170.97.93 (125.170.97.93) 8.844 ms 9.269 ms 9.528 ms
7 125.170.97.130 (125.170.97.130) 12.273 ms 10.575 ms 11.420 ms
8 ae-5.r03.tokyjp05.jp.bb.gin.ntt.net (120.88.53.25) 18.236 ms 17.692 ms
ae-5.r02.tokyjp05.jp.bb.gin.ntt.net (120.88.53.17) 17.601 ms
9 ae-4.r30.tokyjp05.jp.bb.gin.ntt.net (129.250.3.34) 17.974 ms
ae-4.r31.tokyjp05.jp.bb.gin.ntt.net (129.250.3.57) 20.092 ms 17.709 ms
10 ae-4.r23.snjsca04.us.bb.gin.ntt.net (129.250.5.78) 123.614 ms 123.561 ms
ae-4.r23.lsanca07.us.bb.gin.ntt.net (129.250.3.193) 114.419 ms
11 ae-2.r00.lsanca07.us.bb.gin.ntt.net (129.250.3.238) 115.878 ms
ae-45.r01.snjsca04.us.bb.gin.ntt.net (129.250.3.175) 118.568 ms
ae-2.r01.lsanca07.us.bb.gin.ntt.net (129.250.4.107) 113.714 ms
12 ce-0-12-0-1.r00.lsanca07.us.ce.gin.ntt.net (128.241.4.218) 114.933 ms 120.537 ms
ae-1.edgecast-networks.snjsca04.us.bb.gin.ntt.net (129.250.193.250) 118.488 ms
13 152.195.77.133 (152.195.77.133) 119.171 ms
152.195.76.133 (152.195.76.133) 131.320 ms 137.378 ms
14 93.184.216.34 (93.184.216.34) 127.325 ms 125.182 ms 132.246 ms


route - ルータまでの経路を知る -

ホストがルータまでどのようにして到達している確認するためのコマンド

iproute2的にはip routeコマンドが推奨されている。

$ route

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.84.149.1 0.0.0.0 UG 0 0 0 eth0
10.84.149.0 0.0.0.0 2 55.255.255.0 U 0 0 0 eth0


tcpdump - パケットを覗き見 -

ネットワーク通信の生のデータをキャプチャし、その結果を出力してくれるキャプチャツールです。

HTTP通信をSSLで暗号化しないと危険であると言った話を聞いたことがあると思いますが、このコマンドを使えば生のパケットを覗くことができます。

実行してみればわかりますが実際にコマンドだけではあまり視認性が良くないので「WireShark」なんかで整形してデータを確認したりします。

test@test-vm-ubuntu:~$ sudo tcpdump

[sudo] password for test:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
20:29:47.418564 IP 192.168.0.XXX.51682 > 192.168.0.YYY.902: Flags [P.], seq 106429704:106429741, ack 717766587, win 65335, length 37
20:29:47.418576 IP 192.168.0.YYY.902 > 192.168.0.XXX.51682: Flags [.], ack 37, win 128, length 0
20:29:47.418755 IP 192.168.0.YYY.902 > 192.168.0.XXX.51682: Flags [.], seq 1:8448, ack 37, win 128, length 8447
20:29:47.419099 IP 192.168.0.XXX.51682 > 192.168.0.YYY.902: Flags [.], ack 8448, win 65335, length 0
20:29:47.419249 IP 192.168.0.YYY.902 > 192.168.0.XXX.51682: Flags [.], seq 8448:19815, ack 37, win 128, length 11367
20:29:47.419575 IP 192.168.0.XXX.51682 > 192.168.0.YYY.902: Flags [.], ack 19815, win 64683, length 0
20:29:47.419630 IP 192.168.0.XXX.51682 > 192.168.0.YYY.902: Flags [.], ack 19815, win 65335, length 0
20:29:47.419712 IP 192.168.0.YYY.902 > 192.168.0.XXX.51682: Flags [.], seq 19815:34102, ack 37, win 128, length 14287
20:29:47.420129 IP 192.168.0.XXX.51682 > 192.168.0.YYY.902: Flags [.], ack 34102, win 63223, length 0
20:29:47.420184 IP 192.168.0.XXX.51682 > 192.168.0.YYY.902: Flags [.], ack 34102, win 65335, length 0


curl - HTTPアクセスをしてコンテンツを取得 -

curlコマンドはHTTP、HTTPS、FTP、FTPS、SCP、IMAP、POP3 をはじめ、さまざまなプロトコルをサポートしている便利なコマンドで、 オプションもかなり豊富です。

サーバなどブラ ウザが使えない環境でファイルをダウンロード したり、Webアプリケーション開発で HTTPのリクエスト/レスポンスの内容を詳しく見たりするときによく使います。

curlはHTTPのPOSTリクエストを送信す ることもできて、-X POSTというオプション を使うことで POSTリクエストになります。

$ curl -I https://google.com

HTTP/2 301
location: https://www.google.com/
content-type: text/html; charset=UTF-8
date: Sun, 25 Nov 2018 13:26:25 GMT
expires: Tue, 25 Dec 2018 13:26:25 GMT
cache-control: public, max-age=2592000
server: gws
content-length: 220
x-xss-protection: 1; mode=block
x-frame-options: SAMEORIGIN
alt-svc: quic=":443"; ma=2592000; v="44,43,39,35"


0.0.0.0って何?

「0.0.0.0」は文脈によって用途が異なっており、

それぞれのシーンでそれぞれの使い方をされてます。


  • IPアドレスを保有していないことを示す

  • マシンがTCP/IPネットワークに接続されていないことを示す

  • デフォルトルート

  • システムにおけるすべてのインタフェースのすべてのIPアドレス

  • 意味または不適切なターゲットを定義するために使われるルーティングの対象にならないメタアドレス

  • ローカルマシンにおけるすべてのIPv4アドレス

0.0.0.0/0 → 全てのホスト、任意の宛先を意味する。デフォルトルート

0.0.0.0/32 → ホスト自身を指す

参考:IPv4アドレス「0.0.0.0」の意味は? | マイナビニュース


net-toolsとiproute2のコマンド対応早見表

net-tools
iproute2

arp
ip n (ip neighbor)

ifconfig
ip a (ip addr)
ip link
ip -s (ip -stats)

iptunnel
ip tunnel

iwconfig
iw

nameif
ip link, ifrename

netstat
ss
ip route (for netstat-r)
ip -s link (for netstat -i)
ip maddr (for netstat-g)

route
ip r (ip route)


まとめ

まだまだ覚えるべきことは足りないが最低限中の最低限では事足りるって話でした。

ネットワーク系の知識は下記サイトがまとまっていておすすめです。

https://www.infraexpert.com/