NETWORK TOOLS 1

 

 

ネットワークコマンド 1

目          次

 1.ifconfig

NICの情報を取得
NICの起動と停止
ネットワークアドレス等の設定
NICのセキュリティ
 

 2.route

デフォルトゲートウェイの設定
追加ゲートウェイの設定
 

 3.netstat

経路情報の表示
インタフェース情報の表示1
インタフェース情報の表示2
マルチキャストグループの表示
ソケットの状態表示
インタフェース統計情報の表示
 

 4.arp

arp と rarp の概要
コラム:RARP/BOOTP/DHCP
 

 5.ping

PINGの概要
PINGによる接続性のテスト
PINGによる負荷テスト
コラム:ブロードキャストへのPINGと smurf 攻撃
 

 6.traceroute

traceroute の概要
traceroute でネットワーク距離(ホップカウント)を計る方法
 

 7.fuser

fuser の概要
ソケットのユーザおよびプログラムのPIDを表示
 

 8.dig

nslookup と dig の違い
dig の基本的用法
dig によるネームサーバの指定
ファイルによる引数リストの読み込み
 

 9.host

ホスト名/IPアドレスの参照
DNSクラスの参照

 

 

■ ifconfig

ifconfig はネットワークカードを設定するための基本的なコマンドである。ifconfig にはNICの情報表示をはじめ、IPアドレスの定義・NICの起動や停止などの機能がある。これらの一連の動作はネットワーク設定ファイルを書き換えたり、起動・停止スクリプトをコールすることによって実現する。該当ファイルの詳細については別項「ネットワーク設定」を参照のこと。

1.NICの情報を取得

ifconfig に引数をつけずに投入すると、現在動作しているNICの情報を返す。また -a スイッチをつけると現在動作していないNICの情報も併せて表示する。

[root@server root]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:90:99:AB:28:DB
          inet addr:192.168.10.2  Bcast:192.168.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:113219 errors:0 dropped:0 overruns:0 frame:0
          TX packets:93616 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:123346248 (117.6 Mb)  TX bytes:11519159 (10.9 Mb)
          Interrupt:11 Base address:0x2000

eth1      Link encap:Ethernet  HWaddr 00:90:99:3E:2C:11
          inet addr:192.168.20.2  Bcast:192.168.20.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:97637 errors:0 dropped:0 overruns:0 frame:0
          TX packets:112989 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:12018082 (11.4 Mb)  TX bytes:123188748 (117.4 Mb)
          Interrupt:11 Base address:0x4000

eth2      Link encap:Ethernet  HWaddr 00:90:99:79:C2:77
          inet addr:192.168.30.2  Bcast:192.168.30.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:240 (240.0 b)
          Interrupt:10 Base address:0x6000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:700 (700.0 b)  TX bytes:700 (700.0 b)

この例ではループバックのほか、3枚のNICがアクティブであることがわかる。また、IPアドレスとハードウェアアドレスがレポートされ、同時にNICを通過したパケットの統計情報やMTUも表示される。

2.NICの起動と停止

個々のNICを起動させたり停止させたりするにはインタフェースを指定し、引数に up または down をつければよい。以下に eth2 を停止させて再度 ifconfig でレポートさせる操作例を示す。

[root@server root]# ifconfig eth2 down

[root@server root]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:90:99:AB:28:DB
          inet addr:192.168.10.2  Bcast:192.168.10.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:113219 errors:0 dropped:0 overruns:0 frame:0
          TX packets:93616 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:123346248 (117.6 Mb)  TX bytes:11519159 (10.9 Mb)
          Interrupt:11 Base address:0x2000

eth1      Link encap:Ethernet  HWaddr 00:90:99:3E:2C:11
          inet addr:192.168.20.2  Bcast:192.168.20.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:97637 errors:0 dropped:0 overruns:0 frame:0
          TX packets:112989 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:12018082 (11.4 Mb)  TX bytes:123188748 (117.4 Mb)
          Interrupt:11 Base address:0x4000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:10 errors:0 dropped:0 overruns:0 frame:0
          TX packets:10 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:700 (700.0 b)  TX bytes:700 (700.0 b)

停止中の eth2 が表示されないことがわかる。

3.ネットワークアドレス等の設定

ifconfig のもう一つの基本的な使用法は、ネットワークアドレス等の設定をNICに割り付けることである。以下にもっともよく使う形式での構文を示す。

      ifconfig eth0 192.168.0.1 netmask 255.255.255.0

インタフェースがまだ起動していない場合は、最後に up を付加して起動する。

      ifconfig eth0 192.168.0.1 netmask 255.255.255.0 up

インタフェースの起動は ifconfig によって確認できるが、パケットの送出ができることを PING などで確認しておくこと。このとき最初にループバックにPINGが通ることを確かめ、それから設定したNICのアドレスに対してPINGし、最後に他のホストに対してPINGを送り応答を確認しておく。

4.NICのセキュリティ

案外知られていないことだが、NICには
promiscuous (プロミスキャス=無差別)モードという、ネットワーク上に流れるすべてのパケットを受信するモードがある。通常、NICをプロミスキャスモードに切り替えるのは、トラフィックを解析するなど管理上の目的がある場合だけであり、普段の運用ではモードを切り替えることはない。万一、NICのモードがプロミスキャスにセットされていたとすれば、ethereal のようなパケットキャプチャ(スニッファ)がシステム上で動作している公算が大きい。これはパケット盗聴を意味するので、そのようなホストを見つけたら管理者はただちに調査すること。

プロミスキャスモードのNICに対して ifconfig を打つと次のようなリターンがある。( promisc をキーワードにして grep でピックアップするようなスクリプトを書いておくと簡単である。もちろん cron に仕掛けたり snmp でトラップしておく手もある。)

[root@server root]# ifconfig eth2
eth2      Link encap:Ethernet  HWaddr 00:90:99:79:C2:77
          inet addr:192.168.30.2  Bcast:192.168.30.255  Mask:255.255.255.0
          
UP BROADCAST RUNNING PROMISC MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:240 (240.0 b)
          Interrupt:10 Base address:0x6000

赤字の部分に PROMISC の文字が読めるが、これがプロミスキャスモードでNICが動作していることを表わしている。ifconfig コマンドでプロミスキャスモードを通常モードに戻すには、動作しているスニッファを停止してから次のようにすればよい。(ただし、本当に手強い相手なら、NICをプロミスキャスで動かすような露骨な手段は取らないだろう。さらに rootkit が組まれてしまっているのなら、ログファイルをはじめ、ps コマンド等も差し替えられている可能性が高い。こうなると事態は深刻で、まず
chkrootkit のようなチェッカーツールをインストールして rootkit の存在を調べなければならない。なお chkrootkit はNICがプロミスキャスモードに変わっていないかチェックする機能も持っている。)

    ifconfig eth2 -promisc


これでモードは元通りになるが、モードを戻したからといって安心できるわけではないので念のため。スニッファはNICをプロミスキャスモードに変更しなくても動作するし、特定のホストのパスワードが欲しいだけならそれで十分だからである。一般に、仕掛けられたスニッファを発見することはかなり難しく(ただし、スニッファの動いているホストは負荷が高くなるのでパフォーマンスの低いサーバならCPUロードアベレージの遷移によってわかることがある)、インストール時に tripwire などを組み込んでおき、ファイルの変更を監視するしかない。


■ route

route はネットワーク経路を表示・設定するためのコマンドである。通常、ネットワークOSは自分がパケットを渡すべきゲートウェイの情報を管理するために宛先ネットワーク(ディスティネーション)とゲートウェイを対応づけた対照表を持っている。この経路一覧表をルーティングテーブルと呼び、 route コマンドによって内容の追加・削除を行う。
route コマンドの形式は次の通り。

      route 命令語 [-net | -host] destination gateway

なお、route コマンドでの命令語には次の3種類がある。

命令語

add ルーティングテーブルエントリの追加
delete ルーティングテーブルエントリの削除
flush すべてのルーティングテーブルエントリを削除


1.デフォルトゲートウェイの設定

デフォルトゲートウェイはパケットを外部ネットワークへ送り出すとき、デフォルトで選択される経路である。これを設定するには次のように route コマンドを使う。

      route add default gw 192.168.0.1

また、インタフェースが複数ある場合は dev eth0 の形式でデバイスを指定できる。

2.追加ゲートウェイの設定

デフォルトゲートウェイの他にゲートウェイが必要になるケースは、ネットワークの拡張に伴う通信経路の確保のためであることが多い。下図のように新しくネットワークCが増設されたような場合、ゲートウェイサーバはパケット転送によってネットワークBへホスト1からのパケットを送ることができるが、ネットワークCのゲートウェイが不明なため、目的のホスト2へ到達することができない。このとき、Linux で構成されたゲートウェイサーバにはネットワークCに対する新しい経路の設定が必要になる。(ただし、ゲートウェイサーバ上にフォワーディングの設定ができているものとする)


gateway.png


ネットワーク192.168.3.0にパケットを送るために使用するゲートウェイ router を指定するには、以下のようにコマンドを使う。

  route add -net 192.168.3.0 gw router ( または router のネットワークB側IPアドレス 192.168.2.254 ) metric 1 netmask 255.255.255.0 dev eth1( 指定NIC )

ルーティングテーブルが設定されたことを確認するには、-r オプションつきの netstat またはオプションなしの route を使えばよい。これで次のように追加経路が表示されればOKである。

[root@server root]# route add -net 192.168.3.0 gw router metric 1 netmask 255.255.255.0 dev eth1
[root@server root]# route
Kernel IP routing table
Dwstination     Gateway             Genmask          Flags      Metric      Ref     Use   Iface
192.168.3.0     192.168.2.254     255.255.255.0   UG          0             0        0       eth1

なおフラグの意味は次の通り。またメトリックは対象までルータをいくつ越えたかという意味で、ホップカウントと同じことである。(これが0ならば同じネットワーク上にあるということ。)

FLAGS

 U (Up)

動作中である

 G (Gateway)

送り先がゲ−トウェイである

 H (Host)

送り先がホストである

 D (Dynamic)

経路情報がダイナミックに作られた


なお、このエントリが必要なくなった場合、削除するには以下のコマンドを実行すればよい。

  # route del -net 192.168.3.0


あらためて route コマンドを叩くと、対象ネットワークへの経路が抹消されていることがわかる。


■ netstat

netstat はネットワークのコネクションとプロトコルに関する統計情報を表示させるツールである。netstat では ネットワーク接続をはじめ、経路テーブルやインターフェースの状態、IPマスカレード接続、 netlink メッセージ、マルチキャストのメンバーシップなどを表示できる。また、自ホストの開いているポートを確認したり、接続の確立したソケットなどを調べることができるので、サーバの管理に重宝する。

netstat のコマンドとオプションは非常に多数あるので、詳細については
jman ページを参照されたい。ここではネットワーク管理上、頻繁に使われる用例について述べるにとどめる。まず、以下に netstat で用いる情報タイプとオプションの一覧を示す。

情報タイプ

内  容

備  考

なし

オープンされているソケットの一覧を表示

アドレスファミリーが指定されていなければ、設定されている全てのアドレスファミリーに関してアクティブなソケットが表示される。

-r
経路情報を表示  
-g
IPv4とIPv6のマルチキャストグループメンバシップの表示 
-i
インタフェース情報の表示 
-M
マスカレード接続の表示  
-s

各種プロトコルの統計情報を表示

 

オプション

内  容

備  考

--numeric , -n

ホスト・ポート・ユーザーなどの名前を解決せずに、数字のアドレスで表示  

--numeric-hosts

ホストアドレスを数値で表示ポート名とユーザー名の解決は行う

--numeric-ports 

ポート番号を数値で表示ホスト名とユーザー名の解決は行う

--numeric-users 

ユーザー ID を数値で表示ホスト名とポート名の解決は行う

 --protocol=family , -A

接続状態を表示するアドレスファミリーを指定するfamily はコンマ (',') で区切られたリストで、アドレスファミリーのキーワードを指定する。キーワードとして inet, unix, ipx, ax25, netrom, ddp が指定できる。

-c, --continuous

指定された情報を 1 秒ごとに表示し続ける 

-e, --extend 

さらに詳しい情報を表示 このオプションを 2 個指定すれば最も詳しい表示が得られる

-o, --timers

ネットワーキングタイマーに関する情報が追加される 

-p, --program

各ソケットが属しているプログラムの PID と名前が表示される

 

-l, --listening

接続待ち (listen) 状態にあるソケットのみを表示 このオプションはデフォルトでは省略

-a, --all

接続待ち状態にあるソケットも、接続待ち状態にないソケットも表示 --interfaces オプションが指定された場合、マークされていないインターフェースを表示

-F

FIB からの経路情報を表示

default

-C
経路キャッシュからの経路情報を表示

 

1.経路情報の表示 ( netstat -r または -rn )

netstat では経路情報を表示することもできる。これは route コマンドと同等の結果を返す。

[root@server root]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
192.168.2.0      0.0.0.0             255.255.255.0   U          0 0          0 eth0
127.0.0.0         0.0.0.0             255.0.0.0           U          0 0          0 lo
0.0.0.0            192.168.1.254   0.0.0.0              UG        0 0          0 eth0

2.インタフェース情報の表示1 ( netstat -i )

このオプションではインタフェースのMTUをはじめ、経由するパケットに関する情報を表示する。

[root@server root]# netstat -i
Kernel Interface table
Iface     MTU Met   RX-OK RX-ERR RX-DRP RX-OVR   TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0       1500     0     1620      0      0      0    1028      0      0      0 BMRU
lo           16436   0     961        0      0      0      961      0      0      0 LRU

3.インタフェース情報の表示2 ( netstat -inet )

このオプションでは ifconfig と同等の結果を返す。

[root@server root]# netstat -inet
Kernel Interface table
eth0      Link encap:Ethernet  HWaddr 00:90:CC:1D:4B:1A
          inet addr:192.168.0.1  Bcast:192.168.2.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1631 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1035 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:148665 (145.1 Kb)  TX bytes:126061 (123.1 Kb)
          Interrupt:5 Base address:0x3000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:965 errors:0 dropped:0 overruns:0 frame:0
          TX packets:965 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:960665 (938.1 Kb)  TX bytes:960665 (938.1 Kb)


4.マルチキャストグループの表示 ( netstat -g または -gn )

-g オプションではIPv4およびIPv6のマルチキャストグループを表示する。

[root@server root]# netstat -g
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo                1      ALL-SYSTEMS.MCAST.NET
eth0            1      ALL-SYSTEMS.MCAST.NET

[root@server root]# netstat -gn
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo                1      224.0.0.1
eth0            1      224.0.0.1

※ マルチキャストグループを数値で表示させるとアドレスが 224.0.0.1 と表示されることに注意。ここで参考までにマルチキャストアドレスの一覧とそれぞれのアドレスの意味を下表に示す。

IP マルチキャスト アドレス

説明

224.0.0.0

ベース アドレス (予約)。

224.0.0.1

同じネットワーク セグメント上のすべてのシステムが含まれる All Hosts マルチキャスト グループ。

224.0.0.2

同じネットワーク セグメント上のすべてのルータが含まれる All Routers マルチキャスト グループ。

224.0.0.5

OSPF (Open Shortest Path First) AllSPFRouters アドレス。ネットワーク セグメント上のすべての OSPF ルータに OSPF ルーティング情報を送信するため使用される。

224.0.0.6

OSPF AllDRouters アドレス。ネットワーク セグメント上の OSPF 指定ルータに OSPF ルーティング情報を送信するため使用される。

224.0.0.9

RIP Version 2 グループ アドレス。ネットワーク セグメント上のすべての RIP v2 ルータに RIP ルーティング情報を送信するため使用される。

224.0.1.24

WINS サーバ グループ アドレス。WINS サーバによる自動検出とレプリケーションの動的構成をサポートするため使用される。


5.ソケットの状態表示 ( netstat -at または -au  )

ソケットの状態を表示するには -at または -au オプションを使用する。ここで u はUDPソケットを表し、t はTCPソケットを表す。また数値だけで表示させたい場合は netstat -ant(u) を使えばよい。

(※ ソケットとはIPアドレスとポート番号の組のことである。TCP/IPではIPアドレスで固有のホストを表わし、さらにポート番号を指定することによって特定のサービスと通信する。たとえば 192.168.0.1:8080 で squid によるプロキシを指定するような例がそれである。この意味でソケットとは通信を行うアプリケーションが TCP/IP を意識せずに扱うための仮想的なインタフェースと考えればよい。実際の通信にあたっては TCP/IP プロトコルスタックと呼ばれる共有ライブラリがネットワーク下位層から順番にパケットを処理して行く。)

[root@server root]# netstat -at
Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0        0   *:32768                       *:*                     LISTEN
tcp        0        0   *:wnn4_Kr                    *:*                     LISTEN
tcp        0        0   localhost.localdo:32769 *:*                     LISTEN
tcp        0        0   *:32770                       *:*                     LISTEN
tcp        0        0   *:931                          *:*                     LISTEN
tcp        0        0   *:smux                        *:*                     LISTEN
tcp        0        0   *:netbios-ssn               *:*                     LISTEN
tcp        0        0   *:sunrpc                      *:*                     LISTEN
tcp        0        0   *:10000                       *:*                     LISTEN
tcp        0        0   *:http                          *:*                     LISTEN
tcp        0        0   localhost.localdom:8118 *:*                     LISTEN
tcp        0        0   *:ssh                           *:*                     LISTEN
tcp        0        0   localhost.localdom:smtp *:*                     LISTEN
tcp        0        0   *:https                         *:*                     LISTEN
tcp        0        0   server.mydomain.co:ssh 192.168.1.112:1105      ESTABLISHED 
←SSHセッションが確立

6.インタフェースの統計情報の表示 ( netstat -s )

netstat の機能として重要なのがインタフェースを経由したパケット情報の統計である。種類と個数をはじめ、エラー情報などを得られるのでネットワーク管理上、非常に有用である。少々長くなるが、以下に -s オプションによるリアクションを示す。

[root@server root]# netstat -s
Ip:
    2621 total packets received
    0 forwarded
    0 incoming packets discarded
    2558 incoming packets delivered
    1969 requests sent out
Icmp:
    22 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
        destination unreachable: 22
    22 ICMP messages sent
    0 ICMP messages failed
    ICMP output histogram:
        destination unreachable: 22
Tcp:
    23 active connections openings
    23 passive connection openings
    0 failed connection attempts
    1 connection resets received
    1 connections established
    1786 segments received
    1497 segments send out
    0 segments retransmited
    0 bad segments received.
    0 resets sent
Udp:
    606 packets received
    22 packets to unknown port received.
    0 packet receive errors
    450 packets sent
TcpExt:
    ArpFilter: 0
    22 TCP sockets finished time wait in fast timer
    42 delayed acks sent
    1 delayed acks further delayed because of locked socket
    137 packets directly queued to recvmsg prequeue.
    281875 packets directly received from prequeue
    315 packets header predicted
    103 packets header predicted and directly queued to user
    TCPPureAcks: 491
    TCPHPAcks: 233
    TCPRenoRecovery: 0
    TCPSackRecovery: 0
    TCPSACKReneging: 0
    TCPFACKReorder: 0
    TCPSACKReorder: 0
    TCPRenoReorder: 0
    TCPTSReorder: 0
    TCPFullUndo: 0
    TCPPartialUndo: 0
    TCPDSACKUndo: 0
    TCPLossUndo: 0
    TCPLoss: 0
    TCPLostRetransmit: 0
    TCPRenoFailures: 0
    TCPSackFailures: 0
    TCPLossFailures: 0
    TCPFastRetrans: 0
    TCPForwardRetrans: 0
    TCPSlowStartRetrans: 0
    TCPTimeouts: 0
    TCPRenoRecoveryFail: 0
    TCPSackRecoveryFail: 0
    TCPSchedulerFailed: 0
    TCPRcvCollapsed: 0
    TCPDSACKOldSent: 0
    TCPDSACKOfoSent: 0
    TCPDSACKRecv: 0
    TCPDSACKOfoRecv: 0
    TCPAbortOnSyn: 0
    TCPAbortOnData: 0
    TCPAbortOnClose: 1
    TCPAbortOnMemory: 0
    TCPAbortOnTimeout: 0
    TCPAbortOnLinger: 0
    TCPAbortFailed: 0
    TCPMemoryPressures: 0


■ arp と rarp

arp および rarp はMACアドレスとIPアドレスとの対応表をレポートするためのツールである。arp は
Address Resolution Protocol の略称で IPアドレスから物理層のネットワーク・アドレス(MACアドレス)を求めるために利用される。これはIPパケットを送信するとき宛先のデータリンク層のアドレス(MACアドレス)が必要になるためである。一方、rarp は Reverce Address Resolution Protocol の略称で MAC→IPアドレスの変換を行う。

arp コマンドは arp テーブルの書き換えを行うツールだが、使用に当たっては arp テーブルがキャッシュであることを押さえておく必要がある。もう少し具体的に述べると、arp
テーブルは保存性の低いキャッシュに記録されており、通信したホストの情報がいつまでも記録されているわけではない、ということである。そのため、一度キャッシュされたエントリも再利用されないとOSによって自動的に削除される。たとえばWindows 2000の場合、最短で10分程度でクリアされてしまうため、エントリに目的のホストが存在しないこともありうる。
arp コマンドの基本用法は次のとおり。なお日本語マニュアルは jmanページへ。

      arp -a ( arp テーブルを表示する:接続されているホストのMACアドレスをレポート )
      arp 192.168.0.1 ( 192.168.0.1 をIPアドレスとして持つホストのMACアドレスをレポート )
      arp hostname ( hostname をホスト名として持つホストのMACアドレスをレポート )

それぞれのコマンドのリアクションを以下に示す。

      [root@server_3 root]# arp -a
      
server_1.mydomain.local (192.168.1.200) at 00:90:99:EC:32:a6 [ether] on eth0
      server_2.mydomain.local (192.168.1.201) at 00:90:99:6C:DA:61 [ether] on eth0
      ? (192.168.2.202) at 00:90:99:1D:DA:EB [ether] on eth0  
← 名前解決のできないホストが存在している

      [root@server_3 root]# arp 192.168.1.200
      Address                  HWtype  HWaddress           Flags Mask            Iface
      server_1.mydomain.local   ether   00:90:99:EC:32:a6   C                     eth0

      [root@server_3 root]# arp server_2
      Address                  HWtype  HWaddress           Flags Mask            Iface
      server_2.mydomain.local   ether   00:90:99:6C:DA:61   C                     eth0

なお、rarp に関してはこの逆の動作(
MAC→IPアドレスの変換)をするコマンドであるが、カーネル2.3.0以降はサポートされていない。今後再実装される見込みのなさそうな古いプログラムであるため、ここでは使用法については特に述べないことにする。興味と関心のある向きは jman プロジェクトにまだ rarp の man ページがあるはずなので、一読をおすすめする。


コラム:RARP/BOOTP/DHCP

ARPプロトコルはIPアドレスからMACアドレスを検索するためのプロトコルだが、Rarpはその逆を行う。RARPは rarpd によるRARPサーバをネットワーク上で稼動させることによって実行できる。自分のMACアドレスをLAN上にブロードキャストすると、ネットワーク上にいるRARPサーバがそのノードのIPアドレスを返してくれるわけである。
ディスクレスワークステーションなどでは、ハードウェア固有のMACアドレスは最初から決まっているが、起動時にはまだIPアドレスが決まっていない。そこで起動時にはRARPを使ってARRPサーバへアクセスし、サーバが所有するMAC⇔IPアドレスの対応表から自分のIPアドレスを送ってもらえばよい。これによって面倒なIPアドレスの管理をユーザに任せることなく、RARPサーバ側で一元的に管理できるようになった。

ただしRARPで得られる情報はIPアドレスだけであり、ホスト名、ドメイン名、ネットマスク、デフォルトゲートウェイ、ネームサーバアドレスなどの情報は得られない(そういう仕様ですからね)。このため、必要なネットワークパラメータをユーザが設定するか、サーバからロードしてくる必要があった。その要求から作成されたのがBOOTP(BOOTstrap Pratocol)である。これはディスクレスワークステーションのために開発されたもので、RARPサーバがIPアドレスしか配賦しないのに対し、基本的なコンフィギュレーションを自動的に行えるように大幅に機能を拡張している。

しかし、RARPサーバやBOOTPサーバはサーバ側に対応表を持つ必要があるので、対応表の作成が管理者の業務負荷になるという問題があった。さらにラップトップ機やモバイル機の出現によって、一つのネットワーク内に常に一定数のホストが存在するわけではない、という環境が当たり前になり、ホストのIPコンフィギュレーションを対応表によって「静的」に管理することが難しくなった。これを受けて仕様を拡張したのがDHCP(Dynamic Host Configuration Protocol : BOOTP上位互換)である。DHCPはIPアドレスを一定数だけプールし、一定期間ホストに貸し出す(リース)という概念を導入することによって対応表を不要とし、動的にホストのIPコンフィギュレーションを管理する。(とはいえ、ルータやサーバなどのように固定IPが必要な機器のためにアドレス予約ができるなど、対応表的な性格もまだ一部に残しているのだが…。)

RARP→BOOTP→DHCPへの変遷は、ルータのコンフィギュレーションがルーティングテーブルによるスタティックルーティングからRIPやOSPFによるダイナミックルーティングへ進化していくのによく似ている。DHCPのおかげでネットワークのIPコンフィギュレーション管理はほとんど手間なしとなったが、一方で末端の可搬機が異なるネットワーク間を簡単に行き来できるようになったため、セキュリティに関して新たな問題を抱えることになった。

      1.外部へのデータ持出  → 情報漏れ・個人データ流出
      2.外部からのデータ持込 → 違法ソフト・ウィルスの持込

このような問題はどれほどシステムを固めたところで防ぐことができないので、システム管理者としては頭の痛い話である。突き詰めて行けば、最後には毎度のことながら「ユーザの教育とモラルの向上」に行き着いてしまうのだが、うーむ、ユーザが端末の前に座るのと同時に優れたモラルをダウンロードするシステムはできないものかねえ…。



■ ping

ping は icmp の echo request と echo reply (0番と8番:以下のタイプ一覧を参照のこと)を利用してターゲットホストとの接続性を確認したり、ネットワークのパフォーマンスを測定するためのツールである。機能としては icmp パケットを飛ばすだけだが、使い方によってはネットワークに無用のトラフィックを増やしたり、対象ホストに過大な負荷をかけることになるので注意が必要である。
また、 Windows に慣れたユーザがUNIX系のPINGを使うとき、オプションの意味の違いに戸惑うことがあるはずである。たとえば、-c (count) オプションによる回数の指定( Windows のPINGでは -n )などがそれである。さらにUNIXでは Windows と異なり、 ping hostname ( IP Addr ) だけでポーリングを実施すると、Ctrl+C でブレークするまでプログラムが停止しない。これはUNIXのPINGはデフォルトで Windows のPINGの -t オプション付加相当の動作をするからである。また、icmp がUDPの補助プロトコルであることや、最初の2〜3回はリプライしないことがよくあることも知っておきたい。
ping コマンドの書式は次のとおり。

ping [-LRdfnqrv ] [-c 回数 ] [-i 送出間隔 ] [-l 送出パケット数 ] [-p データパターン ] [-s パケットサイズ ] [-t TTL数 ] [-w 継続時間 ] [-I インタフェースアドレス]
 

以下に ping オプションを示す。

オプション

内  容

備  考

-c count

count 個のパケットを送った (そしてその応答を受け取った) 後、停止する パケットが送られた後、 ping は応答を受け取るまで 10 秒間待ち、終了する。
-d
デバッグモード

 

-f
flood ping (ping の洪水)。パケットが戻ってくるとすぐ、もしくは1 秒間に 100 回の、いずれか多い回数だけパケットを送る。 スーパーユーザのみ使用可。
-i wait
個々のパケットの間に wait 秒待つデフォルトでは個々のパケットの間に 1 秒待つ。このオプションは -f オプションとは同時に指定できない。
-l preload
指定した preload の値だけ ECHO_REQUEST パケットを出来るだけ速く送信し、通常の動作に戻る。スーパーユーザのみ使用可。
-n
数値出力のみの表示 ホストのアドレスからホスト名の検索を試みない。
-p pattern
送出するパケットを埋めるための 16 個までの ``pad'' バイトを指定できる。 ネットワークでのデータに依存した問題の診断に有用
-q
開始と終了時の要約以外は何も表示しない 
-R
経路記録 ホストによってはこのオプションを無視するか、破棄してしまうことがある
-r
通常のルーティングを無視し、接続されたネットワークのホストに直接送る。もし、ホストが直に接続されたネットワークになければ、エラーが返る。経路情報を持たないインタフェースを通して、ローカルなホストへと ping するのに使われる。(例えば、インタフェースがroutedに落された場合)。
-s packetsize
何バイトのデータが送られるかを指定する。デフォルトは 56 で ICMP ヘッダの 8 バイトを加えて 64 バイトの ICMP データになる。スーパーユーザのみ使用可。
-v
詳細出力受け取った ECHO_RESPONSE 以外の ICMP パケットを表示する
-w waittime
ping を waittime 秒後に終了させる 
 -I interface
与えられたインタフェースからマルチキャストパケットを送る 
 -L
マルチキャストパケットのLoopBack抑制

 

 -t
ttl の値を設定する 


参考のため、ICMPタイプの一覧を示す。(赤字は ping コマンドが使う icmp パケットタイプ)

タイプ

機      能

0
エコー応答(echo reply)
3
宛先不到達(destination unreachable)
4
ソース・クエンチ(source quench、送信元抑制)
5
リダイレクト要求(redirect、経路変更要求)
8
エコーリクエスト(echo request)
11
時間超過(time exceeded)
12
パラメータ異常(parameter problem)
13
タイムスタンプリクエスト(timestamp request)
14
タイムスタンプ応答(timestamp reply)
15
インフォメーションリクエスト(information request)
16
インフォメーション応答(information reply)
17
アドレス・マスクリクエスト(address mask request)
18
アドレス・マスク応答(address mask reply)


1.ping による接続性のテスト

ネットワークのテストを行う場合、まず管理ホストのループバックとネットワークインタフェースが確実に動作していることを確認する必要がある。自ホストのテストには次の手順を取る。

      1.ネットワークカードとスイッチにケーブル両端が正しく接続されていることを確認する。
      2.127.0.0.1 および localhost に ping してループバックの応答を確認する。
      3.管理機(自ホスト)のIPアドレスおよびNICに付けられたホスト名を対象に ping して応答を確認する。

他のホストとの接続性を確認するための ping の使い方は以下のとおり。(中間にスイッチやルータを経由せず、直接対象ホストのインタフェースに接続する場合は、クロスケーブルを使うこと。)

      ping -c 5 192.168.0.1 ( 192.168.0.1 に対して5回のEchoリクエストを送る)
      ping -w 5 192.168.0.1  ( 192.168.0.1 に対して5秒間続けてEchoリクエストを送る)

ping の使用目的には大きく分けて接続性の確認と経路上のトラブルの切り分けがある。たとえばあるスイッチのポートが疑わしい場合など、管理ホストから ping を打ち続けながらケーブルを差し替えて行けば、問題のあるポートに接続したときは対象ホストからリプライが返らなくなるのですぐにトラブル個所を特定できる。

2.ping による負荷テスト

ネットワークがなんとなく不安定でぽつぽつとパケットが落ちるような場合、経路上のノードのどれかが不調を起こしていることがある。このようなとき、ノードに対して通常以上の連続負荷をかけて性能の劣化を洗い出すために ping が使われる。負荷テストを目的に使われる ping オプションには -f や -l がある。

      ping -f 192.168.0.1 ( 毎秒100回ないしパケットが返ってくるとすぐにEchoリクエストを送る )
      ping -l 200 192.168.0.1 ( できるだけ速く200回のEchoリクエストを送る )

Linux での -f オプションは flood の略であり、毎秒100回のEchoリクエストをホストに送り、統計情報を返す。あくまで一般論だが、ハードウェアの劣化が生じたノードではこれだけの負荷をさばき切れず、パケットロスを生じることが多い。また、ハードウェアの熱ダレによって性能劣化が生じることもあるので、起動直後だけでなく時系列で温度変化を見ながらテストを実施するとよい。これによってノードが完全に落ちる前にハードウェアの不調を察知し、ネットワーク障害を未然に防ぐことができる。また、SNMPによってインタフェースをモニタしておき、理由のつかめないパケットロスが生じはじめたら負荷テストを実施してみる、という使い方もある。
ただし、ping flood は通常ファイアウォールの検出対象となっており、ホストに大きな負荷をかけもするので、思いつきでやってみることは慎むこと。あくまで運用時のテストとしてテスト項目を設計し、実施日時を管理者グループとユーザグループ双方に通知しておくべきである。もっとも、これらのオプションは管理者権限がないと使うことができないのである意味では安全だが、ユーザ教育においてこうしたネットワークマナーを周知させておきたい。

ping コマンドではパケットサイズの指定によるテストもできる。デフォルトでPINGの打つパケットは、ICMPヘッダの8 バイト+データ24バイト=32バイトであるので、通常の通信に使う最大伝送量(MTU)と比べると1パケット当たりのデータ量が少なすぎる。そこで通常のパケットサイズによる伝送をシミュレートするために、-s オプションを用いてデータサイズをMTUの1500や1454に指定することができる。

      ping -w 20 -s 1472 192.168.0.1 ( MTUを1500に想定して20秒間パケットを送出 ※1500-20-8=1472 )

なお、-s オプションは -f オプションと組み合わせて使うことはできない。


コラム:ブロードキャストへのPINGと smurf 攻撃

PING を使った smurf 攻撃の原理は次のようなものである。まず、攻撃者は狙ったサーバのIPアドレスをセットしたPING パケットを偽造し、そのサーバが属しているブロードキャストへ送信する。これによって、同一ブロードキャストに属するホストはエコーリプライをサーバのIPアドレスへ一斉に返す。仮にそのネットワーク上に1000台のホストがあったとすれば、IPアドレスを偽造されたサーバは一度に1000台からの応答を受けることになる。ここで攻撃者が次々と偽装パケットをブロードキャストに流し込めば、結果としてサーバは正常なネットワークサービスが続行できなくなり、場合によってはシステムダウンに至る。このようなDoSアタックを smurf 攻撃と呼ぶ。
以下に smurf 攻撃を受けている場合の tcpdump 出力を示す。(これはサーバから特定のホストへ向けてPINGを打ったように見せかけたケースである。)

15:21:26.904599 210.155.44.251 > www.samplenet.co.jp: icmp: host 210.147.43.107 unreachable
15:21:35.913387 210.155.44.251 > www.samplenet.co.jp: icmp: host 210.147.43.107 unreachable
15:21:49.907269 210.155.44.251 > www.samplenet.co.jp: icmp: host 210.147.43.107 unreachable


これだけでは単なるPINGのアドレス間違いにしか見えないが、重要なポイントはこの時間にサーバからPINGを打った事実がない、ということである。サーバからPINGを打っていないにもかかわらず unreachable が返ってきているのは、何者かが偽造パケットを投げている可能性が高い。実際のアタックではこれが延々と続くので監視ログを見れば明白だが、時にはサーバのレスポンスが悪化するまでわからなかったりすることがある。サーバがどの程度危険な状態になっているかは top などによってロードアベレージを参照し、同時に free コマンドによってメモリの空き容量を確認して状態把握を行う必要がある。
なお smurf 攻撃への対策は主にルータとファイアウォールで実施する。基本的に外部からのPING応答は禁止(reject ではなく deny する)し、内部からのPINGは特定の管理ホストのみに許可し、さらにブロードキャストPINGに関しても禁止するべきである。



■ traceroute

traceroute は udp パケットを使ってネットワーク経路を確認するためのツールである。traceroute コマンドのプログラムは大変巧妙にできており、IPヘッダの TTLメッセージ、ICMP 時間経過メッセージ、 ICMP 到達不可エラーメッセージを利用することによって経路情報を得る。まず最初に送出するパケットのTTLに1をセットして対象ホストへ送り出すと、1ホップ目のルータが受け取った時点でTTLは-1減算されて0となってしまうので、ルータは ICMP Time Exceeded エラーを返答する。これが1台目のルータの結果となるわけだが、次にTTLを2にして送出すれば、同様にして2台目のルータの結果が得られる。これを繰り返して目的のホストに到達するまでTTLを増加しつつパケットを送出することによって、traceroute の結果となる経路情報を得ることができる。
逆に traceroute が目的ホストへ到達せずに中間で途切れてしまう場合は、そのルータに障害が発生していることになるので、ネットワーク経路のトラブルを特定する目的でも利用することができる。
traceroute の基本構文は次のとおり。

traceroute[ -dFInrvx][ -g ゲートウェイ・リスト][ -i インターフェイス][ -f 初期TTL値][ -m 最大TTL値][ -p ポート番号][ -q 試行回数][ -s 送信元アドレス][ -t TOS][ -w タイムアウト時間] 対象ホスト名ま たはIPアドレス[ パケットサイズ]

traceroute の利用方法は経路情報を得るためのものがほとんどだが、オプションはかなりの数が用意されている。

オプション

内  容

備  考

-d
デバックモードで動作する

 

-F
IPパケットの分割禁止

MTU値を越えるサイズのパケットを送ると、ルータからエラーが返る

-I
UDPパケットではなく、ICMP Echo Requestを用いる

 

-n
出力をIPアドレスのみに抑制DNS逆引きを行わない
-r
ルーティングテーブルを無視して直接パケットを指定ホストに転送するように指示同一の物理ネットワーク上に目的のホストがない場合はエラーになる
-v
詳細モード

 

-x
ICMPのCheckSumの評価を行う

 

-g
経由すべきゲートウェイ(ルータ)のアドレスを指定最大8個まで指定可。また、指定されていないゲートウェイも経由できる(loose source routed)
-i
指定されたインターフェイスを用いて実行

 

-f
使用するTTLの初期値を指定指定ホップ数のゲートウェイからの表示となる
-m
使用するTTLの最大値を指定指定ホップ数のゲートウェイまでの表示となる
-p
使用するUDPパケットのポート番号を指定UDPパケットを使用する場合のみ有効
-q
1つのゲートウェイに対する試行回数を指定デフォルトは3
-s
指定されたIPアドレスから実行Source Addressを指定する
-t
パケットのTOS(Type Of Service:サービスタイプ)を指定された値に設定

 

-w
タイムアウト時間を指定する。秒単位で指定(デフォルトは5秒)

1.traceroute コマンドでネットワーク距離(ホップカウント)を計る方法

ネットワーク的に近いか遠いかはホップカウントを計ることによって推測できる。通常のアクセスに限れば、タイムアウトしてしまわないかぎりホップカウントを気にする必要はないが、NTPサーバを参照したり大きなファイルをダウンロードするときは、なるべく「近い」サーバにアクセスしたい。このようなとき、次のコマンドでホップカウントを計ることができる。

      traceroute clock.nc.fukuoka-u.ac.jp (福岡大学タイムサーバの例)

このコマンドによってリターンするホップ数だけ間にルータを挟んでいるので、NTPサーバのように応答時間が問題となる場合はなるべくホップ数の少ないサーバを探すとよい。


■ fuser

fuser は必ずしもネットワーク関連コマンドではなく、むしろプロセスをコントロールする目的で使われるコマンドであるが、ここではファイルやソケットを使用しているプロセスとユーザを特定できることから、ネットワークコマンドとして紹介する。fuser はどのようなユーザまたはプログラムがそのポートを使用しているのか知りたいとき有用である。
以下にソケットを使用しているユーザを調べる方法について述べる。まず、netstat -at でTCPソケットの一覧を表示し、目的のサービスが使用しているポート番号に見当をつけておく。

[root@server root]# netstat -at
Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0        0   *:32768                       *:*                     LISTEN
tcp        0        0   *:wnn4_Kr                    *:*                     LISTEN
tcp        0        0   localhost.localdo:32769 *:*                     LISTEN
tcp        0        0   *:32770                       *:*                     LISTEN
tcp        0        0   *:931                           *:*                     LISTEN
tcp        0        0   *:smux                         *:*                     LISTEN
tcp        0        0   *:netbios-ssn               *:*                     LISTEN
tcp        0        0   *:sunrpc                      *:*                     LISTEN
tcp        0        0   *:10000                       *:*                     LISTEN
tcp        0        0   *:http                          *:*                     LISTEN
tcp        0        0   localhost.localdom:8118 *:*                     LISTEN
tcp        0        0   *:ssh                           *:*                     LISTEN
tcp        0        0   localhost.localdom:smtp *:*                     LISTEN
tcp        0        0   *:https                         *:*                     LISTEN
tcp        0        0   server.mydomain.co:ssh 192.168.1.112:1105      ESTABLISHED

1.ソケットのユーザとPIDおよびプログラムを表示

ここではTCP/32768ソケットを使用しているユーザとプロセスを表示する。fuser では -vn オプションを使うことによって、以下のような出力を得る。

[root@server root]# fuser -vn tcp 32768
                        USER        PID ACCESS COMMAND
32768/tcp            root         569 f....     rpc.statd

また fuser では特定のポートにアクセスしているプログラムのPIDをすべて表示させることもできる。

[root@server root]# fuser https/tcp
https/tcp:             828   907   908   909   910   913   914   915   916


さらに fuser にはプロセスにシグナルを送るオプション( -k デフォルトで kill )もある。さらに -l オプションによってシグナルの一覧を表示させることもできるので、fuser からプロセスをコントロールすることができる。以下にプロセスを kill する用例を示す。

[root@server root]# fuser -k https/tcp ( https/tcp にアクセスしているプロセスをすべて kill する。具体的には httpd のすべて)
https/tcp:             828   907   908   909   910   913   914   915   916

[root@server root]# ps aux | grep '828'
(リターンなし→プロセス 828 は kill されてすでに存在しない)



■ nslookup と dig

nslookup と dig は、ともにDNSサーバの情報をクエリするために開発された、BIND付属のツールである。先行したのは nslookup だが、このツールは古いBINDに対応した機能となっており、現在のBIND(8以上)では dig の使用が推奨されている。今後、BIND9への移行に伴い、dig への移行が予想されるので、nslookup に慣れた管理者も dig に関する基礎知識を仕入れておきたい。

1.nslookup と dig の相違

nslookup と dig では同じ関数が使われていることもあり、基本的にその機能は変わらない。ただし、dig を引数なしで実行するとルートサーバの一覧が表示されるが、nslookup では対話モードに入るなどの相違がある。以下にDNSサーバを対象に単純クエリを行った場合の両者の応答の相違を示す。なお、DNSサーバ名はFQDNでもIPアドレスでもよいが、構築後のサーバを最初に問い合わせるときは「IPアドレス@ドメイン」で行うこと。

[root@server root]# nslookup ns1.*****.or.jp
Note:  nslookup is deprecated and may be removed from future releases.
Consider using the `dig' or `host' programs instead.  Run nslookup with
the `-sil[ent]' option to prevent this message from appearing.

Server:         210.***.0.1
Address:        210.***.0.1#53

Name:   ns1.*****.or.jp
Address: 210.***.0.1


このように nslookup で表示される情報はそれほど多くなく、必要最小限となっている。一方、dig では次のように表示される。

[root@server root]# dig ns1.*****.or.jp

; <<>> DiG 9.2.1 <<>> ns1.*****.or.jp

;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63138
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3

;; QUESTION SECTION:
;ns1.*****.or.jp.              IN      A

;; ANSWER SECTION:
ns1.*****.or.jp.       86400   IN      A       210.***.0.1

;; AUTHORITY SECTION:
*****.or.jp.           86400   IN      NS      dns.*****.or.jp.
*****.or.jp.           86400   IN      NS      dns1.*****.or.jp.
*****.or.jp.           86400   IN      NS      dns2.*****.or.jp.

;; ADDITIONAL SECTION:
dns.*****.or.jp.       86400   IN      A       210.***.0.1
dns1.*****.or.jp.      86400   IN      A       210.***.0.2
dns2.*****.or.jp.      86400   IN      A       210.***.16.1

;; Query time: 29 msec
 ←応答時間
;; SERVER: 210.***.0.1#53(210.***.0.1) 
←サーバ側ソケット(#53 番UDPの使用)
;; WHEN: Thu Jan  8 21:54:25 2004 
←問合せ時刻
;; MSG SIZE  rcvd: 154 
←メッセージサイズ

dig では単にDNSサーバの情報が多いだけでなく、応答時間やサーバ側のソケットや問合せ時刻、応答メッセージのサイズなど、サーバの状態を把握するのに参考となる情報が得られる。たとえば応答時間が異常にかかる場合など、サーバに発生したなんらかの障害やDoSアタックの可能性が推測できるので、DNSサーバ管理のためにこれらをうまく活用したい。


2.dig の基本的用法

解説が前後したが dig コマンドの書式は次のとおりである。

      dig [@server] domain [<query-type>] [<query-class>] [+<query-option>] [-<dig-option>] [%comment]

最も基本的な使い方は、ドメイン名を引数として指定する方法である。これは「ドメイン名」を管理するDNSサーバの情報を要求する。

      dig mydomain.co.jp

サーバ名(またはIPアドレス)を引数に指定すると、項目1で実行したような応答が返される。(デフォルトでは in クラスがクエリに指定されているので、すべての項目を表示させたい場合は any クラスを指定する。すなわち dig mydomain.co.jp any とすればよい。)

3.dig によるネームサーバの指定

dig にはサーバを指定してクエリを要求する機能もある。たとえば、ルートサーバから jp ドメインを管理するネームサーバをクエリするには次のようなコマンドを使う。(ルートサーバのドメインを得るには dig を引数なしで実行する。)

      dig @a.root-servers.net jp NS

さらに特定の jp ドメインを検索するには次のようにすればよい。

      dig@a.dns.jp *****.or.jp

4.ファイルによる引数リストの読み込み( -f オプション)

dig には -f オプションでファイルを指定することによってファイルから引数を読み込み、連続してクエリを実行することができる。たとえば次のようにドメイン名のリストに any を付加し、 domainlist というテキストファイルに書いておく。

      domainlist
           nifty.com any
           nifty.ne.jp any
           yahoo.co.jp any
           …

これに対して dig -f domainlist とすると、dig はテキストを一行ずつ読み込み、クエリを表示する。SOAをチェックして連絡先を探すときなどに使うのが一般的である。(赤字で表示しているのがドメイン管理者の連絡先メールアドレス)

[root@server bin]# dig -f domainlist | grep SOA
nifty.com.              1427    IN      SOA     ns0.nifty.com.
hostmaster.nifty.ad.jp. 200401080 7200 3600 3600000 86400
nifty.ne.jp.              3105    IN      SOA     ns0.nifty.ad.jp.
postmaster.ns0.nifty.ad.jp. 200401083 3600 900 604800 86400
yahoo.co.jp.            266     IN      SOA     yahoo.co.jp.
postmaster.yahoo.co.jp. 2004010902 1800 900 86400 900

この例のためにドメイン名を使わせていただいた各プロバイダの名誉のために申し上げるが、大手では他人の迷惑になるようなおかしな設定をすることは、まずありえない。しかし、巷には知らずに迷惑メールやスパム転送を許してしまっているサーバも少なからず存在するので、苦情を入れたい場合のためにドメイン管理者の連絡先を検索する方法は覚えておいてよい。もっとも、こういうルーズなサイトでは苦情や抗議のメールを入れてもまるっきり無反応であることが多いのが実情である。どうせ mbox なんか開けやしないよな、と思いつつ苦情メールを出しはするものの、さて、管理者はいるのやら、いないのやら…。

また、あるドメインに関わるメールサーバの情報がまとめて欲しいときなども、このオプションを使ってレポートすることができる。

      dig -f domainlist | grep MX


このコマンドは次のように実行される。

[root@server bin]# dig -f domainlist | grep MX
nifty.com.              1243    IN      MX      10 mx.nifty.com.
nifty.ne.jp.              3484    IN      MX      20 mailgate2.nifty.ne.jp.
nifty.ne.jp.              3484    IN      MX      10 mailgate1.nifty.ne.jp.
yahoo.co.jp.            465     IN      MX      10 mta17.mail.yahoo.co.jp.
yahoo.co.jp.            465     IN      MX      10 mta18.mail.yahoo.co.jp.
yahoo.co.jp.            465     IN      MX      10 mta19.mail.yahoo.co.jp.
yahoo.co.jp.            465     IN      MX      10 mta20.mail.yahoo.co.jp.
yahoo.co.jp.            465     IN      MX      10 mta21.mail.yahoo.co.jp.
yahoo.co.jp.            465     IN      MX      10 mta22.mail.yahoo.co.jp.
yahoo.co.jp.            465     IN      MX      100 mta10.mail.yahoo.co.jp.
yahoo.co.jp.            465     IN      MX      10 mta11.mail.yahoo.co.jp.
yahoo.co.jp.            465     IN      MX      10 mta12.mail.yahoo.co.jp.
yahoo.co.jp.            465     IN      MX      10 mta13.mail.yahoo.co.jp.
yahoo.co.jp.            465     IN      MX      10 mta14.mail.yahoo.co.jp.
yahoo.co.jp.            465     IN      MX      10 mta15.mail.yahoo.co.jp.
yahoo.co.jp.            465     IN      MX      10 mta16.mail.yahoo.co.jp.


なお、ドメイン情報は whois データベースを利用することによっても調査できる。これはコマンドラインから「 whois -h whoisサーバ ドメイン名」の形式で検索できるが、インターネット上に whois サービスやドメインレジストラのページがたくさんあるので、そちらのCGIから検索してもよい。


■ host

host コマンドはホスト名からIPアドレス、またはその逆を参照するためのツールである。これは dig 同様、BINDに同梱されているツール群のひとつで、情報は世界中に広がった相互に接続されたサーバ群から得る。デフォルトではホスト名とインターネットアドレス間の変換のみを行なうが、-t や -a オプションとともに使うと、そのホストに関するドメインサーバによって保守されている情報のすべてが得られる。
host は以下の書式で利用できる。

        host [-adlrwv] [-c class] [-t querytype] host [server]

1.ホスト名/IPアドレスの参照

もっとも単純な使い方はターゲットのIPアドレスやホスト名からの参照である。

[root@server root]# host ns1.interq.or.jp
ns1.interq.or.jp has address 210.157.0.1

ここでデバッグモードの -d オプションをつけて host コマンドを実行してみると、DNSのすべての情報が得られる。

[root@server root]# host -d 210.157.0.1
Trying "1.0.157.210.in-addr.arpa"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58203
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 3, ADDITIONAL: 3
 
;; QUESTION SECTION:
;1.0.157.210.in-addr.arpa.      IN      PTR
 
;; ANSWER SECTION:
1.0.157.210.in-addr.arpa. 7200  IN      PTR     dns.interq.or.jp.
 
;; AUTHORITY SECTION:
0.157.210.in-addr.arpa. 7200    IN      NS      dns.interq.or.jp.
0.157.210.in-addr.arpa. 7200    IN      NS      dns1.interq.or.jp.
0.157.210.in-addr.arpa. 7200    IN      NS      dns2.interq.or.jp.
 
;; ADDITIONAL SECTION:
dns.interq.or.jp.       86400   IN      A       210.157.0.1
dns1.interq.or.jp.      86400   IN      A       210.157.0.2
dns2.interq.or.jp.      86400   IN      A       210.157.16.1
 
Received 172 bytes from 210.157.0.1#53 in 13 ms

さらにこのドメインについて権威のあるネームサーバ dns.interq.or.jp を指定して ns1 の情報を尋ねてみる。

[root@server root]# host 210.157.0.1 dns.interq.or.jp
Using domain server:
Name: dns.interq.or.jp
adress: 210.157.0.1#53
Aliases:
 
1.0.157.210.in-addr.arpa domain name pointer dns.interq.or.jp.

2.DNSクラスの参照

また、host コマンドでは dig のようにクラスを指定してDNS情報を得ることもできる。以下にMXをクラスとして指定する例とNSをクラスとして指定する例を示す。

1.MXレコード(メールサーバ)の検索

[root@server root]# host -t mx  interq.or.jp
interq.or.jp mail is handled by 20 mx.members.interq.or.jp.
interq.or.jp mail is handled by 10 mx.gmo.jp.

2.NSレコード(ネームサーバ)の検索
 
[root@server root]# host -t ns  interq.or.jp
interq.or.jp name server dns.interq.or.jp.
interq.or.jp name server dns1.interq.or.jp.
interq.or.jp name server dns2.interq.or.jp.


 

 

 

niCopyright(c) 2003 My Company. All rights reserved. www.suzu841.com / mrs.suzu841.com