Product SiteDocumentation Site

10.8. ネットワーク診断ツール

ネットワークアプリケーションが思った通りに動かない場合、中身を確かめる事が重要です。全てが問題なく動いているように見える場合でも、ネットワーク診断を実行すれば全てがあるべき姿で動いていることを確かめる手助けになります。この目的で復数の診断ツールが存在します; 各ツールは異なるレベルを診断します。

10.8.1. ローカルの診断: netstat

最初に (net-tools パッケージに含まれる) netstat コマンドを紹介します; これはマシンのその瞬間のネットワーク活動に関する要約を表示します。何も引数を渡さずに実行した場合、このコマンドは開けられた接続をリストします;このリストはとても長くなる場合があります。なぜなら、このリストには多くの Unix ドメインソケット (デーモンによって広く使われている) が含まれるからです。Unix ドメインソケットはネットワークに関与しません (例えば、dbus 通信、X11 トラフィック、仮想ファイルシステムとデスクトップ間の通信などです)。
netstat を実行する際には一般的に標準の挙動を変更するオプションを使います。最も頻繁に使われるオプションを以下に挙げます:
  • -t、TCP 接続のみを表示します;
  • -u、UDP 接続のみを表示します; これらのオプションは同時に使えます、Unix ドメインソケットの表示を抑制するにはどちらか一方を使うだけで十分です;
  • -a、リッスンしている (入って来る接続を待っている) ソケットも表示します;
  • -n、結果を数値的に表示します: IP アドレス (DNS で名前解決しない)、ポート番号 (/etc/services の定義する別名を使わない)、ユーザ id (ログイン名無し) を使います;
  • -p、関係付けられたプロセスを表示します; netstatをroot 権限で実行した場合にのみ、このオプションは便利です。なぜなら、普通のユーザは自分のプロセス以外を見ることができないからです;
  • -c、継続的に接続リストを更新します。
netstat(8) マニュアルページに書かれている他のオプションを使えば、表示される結果をさらに細かく制御することが可能です。具体的にいえば、上に挙げたオプションの内最初の 5 種類を組み合わせて使うことが多いため、結果としてシステムとネットワークの管理者は事実上 netstat -tupan を習得します。負荷の高くないマシンでは、以下の様な典型的な結果を返します:
# netstat -tupan
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2224/sshd       
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      994/exim4       
tcp        0      0 192.168.1.241:22        192.168.1.128:47372     ESTABLISHED 2944/sshd: roland [
tcp        0      0 192.168.1.241:22        192.168.1.128:32970     ESTABLISHED 2232/sshd: roland [
tcp6       0      0 :::22                   :::*                    LISTEN      2224/sshd       
tcp6       0      0 ::1:25                  :::*                    LISTEN      994/exim4       
udp        0      0 0.0.0.0:68              0.0.0.0:*                           633/dhclient    
udp        0      0 192.168.1.241:123       0.0.0.0:*                           764/ntpd        
udp        0      0 127.0.0.1:123           0.0.0.0:*                           764/ntpd        
udp        0      0 0.0.0.0:123             0.0.0.0:*                           764/ntpd        
udp6       0      0 fe80::a00:27ff:fe6c:123 :::*                                764/ntpd        
udp6       0      0 2002:52e0:87e4:0:a0:123 :::*                                764/ntpd        
udp6       0      0 ::1:123                 :::*                                764/ntpd        
udp6       0      0 :::123                  :::*                                764/ntpd        
予想通り、確立された接続、この場合 2 つの SSH 接続と、入って来る接続を待つアプリケーション (LISTEN と記載)、特に 25 番をリッスンしている Exim4 電子メールサーバが表示されます。

10.8.2. リモートの診断: nmap

nmap (同名のパッケージから提供される) は、ある意味で、リモートに対する netstat に相当します。これは 1 台または数台のリモートサーバに対して「well-known」ポート群をスキャンし、入ってきた接続に応答したアプリケーションの見つかったポートをリストします。更に、nmap は一部のアプリケーションを識別することが可能です。場合によってはアプリケーションのバージョン番号さえも識別することが可能です。nmap に対する問題点として、nmap はリモートから実行されるため、プロセスやユーザの情報を提供することができないという点が挙げられます; しかしながら、nmap は復数のターゲットに一気に実行できます。
nmap を実行する際の典型例は、-A オプション (nmap は見つかったサーバソフトウェアのバージョンを識別しようとします) だけを使い、その後ろにスキャンする 1 つか復数の IP アドレスまたは DNS 名を渡すことです。繰り返しになりますが、さらに多くのオプションが存在し、nmap の挙動をさらに細かく制御することが可能です。nmap(1) マニュアルページを参照してください。
# nmap mirwiz

nmap 192.168.1.30

Starting Nmap 6.00 ( http://nmap.org ) at 2013-11-13 11:00 CET
Nmap scan report for mirwiz (192.168.1.30)
Host is up (0.000015s latency).
Not shown: 997 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
111/tcp   open  rpcbind
10000/tcp open  snet-sensor-mgmt

Nmap done: 1 IP address (1 host up) scanned in 0.12 seconds
# nmap -A localhost

Starting Nmap 6.00 ( http://nmap.org ) at 2013-11-13 10:54 CET
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000084s latency).
Other addresses for localhost (not scanned): 127.0.0.1
Not shown: 996 closed ports
PORT      STATE SERVICE VERSION
22/tcp    open  ssh     OpenSSH 6.0p1 Debian 4 (protocol 2.0)
| ssh-hostkey: 1024 ea:47:e5:04:a0:b8:70:29:c2:94:3d:fe:a8:b8:b4:02 (DSA)
|_2048 81:5c:a4:56:ff:c0:bf:0d:cd:e6:cc:48:2f:15:78:ea (RSA)
25/tcp    open  smtp    Exim smtpd 4.80
| smtp-commands: mirwiz.internal.placard.fr.eu.org Hello localhost [127.0.0.1], SIZE 52428800, 8BITMIME, PIPELINING, HELP, 
|_ Commands supported: AUTH HELO EHLO MAIL RCPT DATA NOOP QUIT RSET HELP 
111/tcp   open  rpcbind
| rpcinfo: 
|   program version   port/proto  service
|   100000  2,3,4        111/tcp  rpcbind
|   100000  2,3,4        111/udp  rpcbind
|   100024  1          40114/tcp  status
|_  100024  1          55628/udp  status
10000/tcp open  http    MiniServ 1.660 (Webmin httpd)
| ndmp-version: 
|_  ERROR: Failed to get host information from server
|_http-methods: No Allow or Public header in OPTIONS response (status code 200)
|_http-title: Site doesn't have a title (text/html; Charset=iso-8859-1).
No exact OS matches for host (If you know what OS is running on it, see http://nmap.org/submit/ ).
TCP/IP fingerprint:
OS:SCAN(V=6.00%E=4%D=11/13%OT=22%CT=1%CU=40107%PV=N%DS=0%DC=L%G=Y%TM=52834C
OS:9E%P=x86_64-unknown-linux-gnu)SEQ(SP=102%GCD=1%ISR=105%TI=Z%CI=Z%II=I%TS
OS:=8)OPS(O1=M400CST11NW5%O2=M400CST11NW5%O3=M400CNNT11NW5%O4=M400CST11NW5%
OS:O5=M400CST11NW5%O6=M400CST11)WIN(W1=8000%W2=8000%W3=8000%W4=8000%W5=8000
OS:%W6=8000)ECN(R=Y%DF=Y%T=41%W=8018%O=M400CNNSNW5%CC=Y%Q=)T1(R=Y%DF=Y%T=41
OS:%S=O%A=S+%F=AS%RD=0%Q=)T2(R=N)T3(R=N)T4(R=Y%DF=Y%T=41%W=0%S=A%A=Z%F=R%O=
OS:%RD=0%Q=)T5(R=Y%DF=Y%T=41%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=)T6(R=Y%DF=Y%T=41%
OS:W=0%S=A%A=Z%F=R%O=%RD=0%Q=)T7(R=Y%DF=Y%T=41%W=0%S=Z%A=S+%F=AR%O=%RD=0%Q=
OS:)U1(R=Y%DF=N%T=41%IPL=164%UN=0%RIPL=G%RID=G%RIPCK=G%RUCK=G%RUD=G)IE(R=Y%
OS:DFI=N%T=41%CD=S)

Network Distance: 0 hops
Service Info: Host: mirwiz.internal.placard.fr.eu.org; OS: Linux; CPE: cpe:/o:linux:kernel

OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 48.20 seconds
予想通り、SSH と Exim4 アプリケーションが表示されます。全てのアプリケーションが全ての IP アドレスをリッスンしているわけではない点に注意してください; Exim4 は lo ループバックインターフェイスからのみアクセス可能ですから、localhost の解析にのみ表示され、mirwiz (これは同じマシンの eth0 インターフェイスに対応付けられています) をスキャンした時には表示されません。

10.8.3. スニファ: tcpdumpwireshark

しばしば実際にワイヤを行き来する情報をパケット毎に見る必要がある場合があります。この際に使われるツールは「フレームアナライザ」と呼ばれ、スニファ としても広く知られています。これらのツールはあるネットワークに到達した全てのパケットを観察し、ユーザにわかりやすい方法でパケットを表示します。
この分野における由緒あるツールが tcpdump で、これは広範囲のプラットフォームで利用可能な標準的なツールです。tcpdump を使うと、多くの種類のネットワークトラフィックをキャプチャできますが、トラフィックの表現は比較的分かりにくいです。このため tcpdump について詳しく説明しません。
より最近の (そしてより現代的な) ツールである wireshark (wireshark パッケージの提供する) は、キャプチャされたパケットの解析を単純化する多くのデコーディングモジュールのお陰で、ゆっくりとネットワークトラフィック解析分野における新しい標準的なツールになりつつあります。パケットはプロトコルの層に基いてグラフィカルに表示されます。wireshark を使うと、ユーザはあるパケットに関わる全てのプロトコルを可視化することが可能です。例えば、HTTP リクエストを含むパケットに対して、wireshark は物理層、イーサネット層、IP パケット情報、TCP 接続パラメータ、最後に HTTP リクエスト自身に関連する情報を別々に表示します。
wireshark ネットワークトラフィックアナライザ

図10.1 wireshark ネットワークトラフィックアナライザ

上の例では、SSH を通じて移動するパケットを (!tcp.port == 22 フィルタを使って) 除去しています。現在詳細を表示されているパケットは HTTP 層で作られたものです。