next up previous contents
Next: 2.5.2 動的ルーティング Up: 2.5 ルーティング Previous: 2.5 ルーティング

2.5.1 静的ルーティング

SUN でルーティングのテーブルを見るには、/usr/bin/netstat コマンドを 使います。

[7]sparc01:~> netstat -rn

Routing Table:
  Destination           Gateway           Flags  Ref   Use   Interface
-------------------- -------------------- ----- ----- ------ ---------
127.0.0.1            127.0.0.1             UH       0    589  lo0
202.11.98.160        202.11.98.189         U        3   1510  le0
202.11.96.0          202.11.96.10          U        2    111  bf0
202.11.101.0         202.11.101.34         U        2 246543  ba0
224.0.0.0            202.11.98.189         U        3      0  le0
default              202.11.98.190         UG       0 158373

ここで、Destination の欄は、宛て先のネットワークまたはホストをあらわしています。例えば、202.11.96.0 は、202.11.96 のネットワークのことで、そのネットワークに 行くには 202.11.96.10 のゲートウェイ(Gateway)を通る事が分かりますが、次の Flags の欄を見ると U のみがあるので、自分のインターフェース(bf0) を通って 直接出て行くのだと言うことが分かります。

Flags の意味

U
Up (使用可能)
H
Host (一つのホストのみに到達可能)
G
Gateway (別のネットワークに行くために Gateway を通過する)
D
ICMP redirect によって経路が自動的に変えられた

一方、default は、上記以外のネットワークまたはホストへ行く場合は、202.11.98.190 に転送する事を示しています。202.11.98.190 の ゲートウェイへは、202.11.98.160 のネットワークに所属しているので、202.11.98.189 の自分のインターフェース(le0)を 使って直接到達出来る事が分かります。

自分のマシンに実装されているインターフェースとホスト名との対応は、 /etc/hostname.xxx (xxx はインターフェース名で、イーサネットの場合、 le0 など)に格納されており、ホスト名と IP アドレスの関係は、/etc/hosts の内容に従って決まります。インターフェースの設定状態は、ifconfig コマンド で見ることが出来ます。

# ifconfig -a
lo0: flags=849<UP,LOOPBACK,RUNNING,MULTICAST> mtu 8232
        inet 127.0.0.1 netmask ff000000 
bf0: flags=863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST> mtu 4352
        inet 202.11.96.14 netmask ffffff00 broadcast 202.11.96.255
        ether 8:0:20:12:6d:d5 
le0: flags=863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST> mtu 1500
        inet 202.11.98.125 netmask ffffffe0 broadcast 202.11.98.127
        ether 8:0:20:12:6d:d5 
sa0: flags=863<UP,BROADCAST,NOTRAILERS,RUNNING,MULTICAST> mtu 9180
        inet 202.11.101.98 netmask ffffff00 broadcast 202.11.101.255
        ether 8:0:20:12:6d:d5

これを見ると、le0 のインターフェースの IP アドレスは、202.11.98.125 で、 ネットマスクが ffffffe0( 255.255.255.224 ) であり、ブロードキャスト アドレスは 202.11.98.127 であることが分かります。

外部に到達するための出入り口が1箇所しかないような単一のネットワークならば、 その出入り口を default gateway に指定しておけばいいでしょう。一方、出入り口 へ到達するために、幾つかの内部のネットワークを経由する必要がある場合には、 そのセグメントの出入り口を gateway に指定しなければなりません。そして、 出入り口に指定されたマシンまたはルーター上でも、必要な経路情報を指定する 必要があります。

Sun で、静的な経路情報の設定を行うには、/usr/sbin/route コマンドを使います。 例えば、202.11.101.0 のネットワークに行くために、202.11.99.10 の gateway に 投げる場合には、次のように設定します。

route add net 202.11.101.0 202.11.99.10 1

一般の書式は次の通りです。

route add net destination gateway metric

静的なルーティングで、他のマシン(ルーター)を経由する場合は必ず metric に 1 を指定します。一方、gateway が自分自身のインターフェースならば、metric は 0 です。デフォルト以外のルーティングをしたい場合には、以上の設定がマシンの ブート時に自動的にされるように rc ファイルに直接記述しておきます (/etc/rc2.d/S69inet)。デフォルトルーターの設定だけは、/etc/defaultrouter に記述しておけば、自動的に設定されます。

route コマンドでは、ネットワークへの経路だけではなく、特定のホストへの ルーティングを指定することも出来ます。

route add host destination gateway metric

この場合、このホストへ行くときだけは、指定された経路を通るように出来ます。 設定した経路情報を削除する場合は、add の代わりに delete を使いますが、metric は必要ありません。

設定が完了したら必ずテストをするようにしましょう。テストには、普通 ping コマ ンドを使います。 ping では、相手との通信が出来る場合は、以下のようになります。

   $ /usr/sbin/ping sparc01
   sparc01 is alive

オプション -s をつけることで、さらに詳しいトラフィック情報が得られます。

   $ /usr/sbin/ping -s sparc01
   PING sparc01: 56 data bytes
   64 bytes from sparc01 (202.11.97.xx): icmp_seq=0. time=3. ms
   64 bytes from sparc01 (202.11.97.xx): icmp_seq=1. time=1. ms
   64 bytes from sparc01 (202.11.97.xx): icmp_seq=2. time=1. ms
   64 bytes from sparc01 (202.11.97.xx): icmp_seq=3. time=1. ms
   64 bytes from sparc01 (202.11.97.xx): icmp_seq=4. time=1. ms
   ^C
   ----sparc01 PING Statistics----
   5 packets transmitted, 5 packets received, 0% packet loss
   round-trip (ms)  min/avg/max = 1/1/3

ここで、packet loss が異常に多い場合は、ネットワークのトラフィックが 混雑しすぎているか、あるいは何らかのトラブルが考えられます。

複雑な経路をトレースするには traceroute というパブリックな コマンドがあります(但し、traceroute は TCP/IP を完全にサポートしていないよ うなネットワークでは使用できない時があります。例えば、ATM (Classical IP over ATM) がそうです)。

   $ traceroute ipce4
   traceroute to ipce4 (202.11.99.aa), 30 hops max, 40 byte packets
    1  cisco45 (202.11.98.xxx)  4 ms  2 ms  2 ms
    2  cisco5 (202.11.96.y)  3 ms  3 ms  3 ms
    3  ipce4 (202.11.99.zz)  4 ms *  4 ms

この場合、ipce4 へのルーティングは、cisco45 $\to$ cisco5 $\to$ ipce4 という 経路を通っていることが分かります。この経路が、意図した通りかも 確かめておく必要があります。 また、TCP/IP では行きと帰りの経路が異なっていても構わないのですが、 自サイトのネットワークの中で、これが違っている場合は設定ミスである 場合が多いので、片方を調べるだけでなく、双方向で確かめる必要 があります。

参考

ネットワーク上のパケットの状態を監視するには、 etherfind(SunOS4), tcpsnoop(SunOS5) があります。 更には、etherfind を改良し、パブリックに利用できるものとして tcpdump があります。これらのツールを使えば、2点間で実際にパケットが流れている のかということや、あるホストからパケットが流れているかということを 調べることができます。パケットの中を全て知る事が出来る訳ですから、 一般ユーザには使用出来ないようにしておかないといけません。また、ネットワークに 接続されたワークステーションからは、こうした packet snooping が可能な訳です から、セキュリティを重視する場合には物理的なセグメントの分割などを考える 必要があります。



Noriyo Kanayama