目 次
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に対する新しい経路の設定が必要になる。(ただし、ゲートウェイサーバ上にフォワーディングの設定ができているものとする)
ネットワーク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.
|