next up previous contents
Next: IP forwarding Up: ルーティング Previous: ルーティングとネットマスク

静的ルーティング

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


# netstat -rn
Routing tables

Internet:
Destination        Gateway           Flags  Ref   Use   Netif  Expire
default            10.16.128.254     UGSc     3     0   fxp0
10.16.128/24       link#1            UC       0     0   fxp0
10.16.128.101      0:40:5:17:64:73   UHLW     0   324   fxp0   945
10.16.128.254      0:0:c:7:ac:21     UHLW     3     0   fxp0   433
127.0.0.1          127.0.0.1         UH       0     3   lo0
192.168            link#2            UC       0     0   fxp1
192.168.0.150      link#2            UHLW     3   417   fxp1
202.11.96.16/28    10.16.128.10      UGSc     0     0   fxp0

ここで、Destination の欄は、宛て先のネットワークまたはホストをあらわして います。 例えば、最後の行の 202.11.96.16/28 は、28bit のマスク値を持つサブネットワークを表しており、 そのネットワークに行くには10.16.128.10のゲートウェイ(Gateway)を通る事が 次のFlagsの欄の G フラグが立っていることから分かります。

Flags の意味    
U Up 使用可能
H Host 一つのホストのみに到達可能
G Gateway 別のネットワークに行くために Gateway を通過する
D Dynamic ICMP redirect によって経路が時動的に変更された
S Static 手動で経路が追加された

(その他、FreeBSDには多くのフラグがありますが、詳しくは man route を参照 してください) 一方、default は、上記以外のネットワークまたはホストへ行く場合は、 10.16.128.254 に転送する事を示しています。 10.16.128 は 24bit のマスク値を持っており、更にfxp0でlink が生成されて いるので、自分のインターフェース(fxp0)を使って直接到達出来る事が分かります。

ちなみに、FreeBSDでは同一ネットにホストを検知すると(ARPで調べた場合)、 それも netstat で表示されます。その際に、Gateway欄にはMACアドレスが 表示されるようになっています。

最後に、127.0.0.1 はループバックアドレスで、常に自分自身を意味しています。

自分のマシンに実装されているインターフェースとインターフェース名との対応は、 そのインターフェースに振られたIPアドレスを介して、/etc/hostsによって 関係づけられています。インターフェースの設定状態は ifconfig コマンドで 見ることが出来ます。


fxp0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
        inet6 fe80::290:27ff:fe51:c128%fxp0 prefixlen 64 scopeid 0x1
        inet 10.16.128.16 netmask 0xffffff00 broadcast 10.16.128.255
        ether 00:90:27:51:c1:28
        media: autoselect (100baseTX <full-duplex>) status: active
        supported media: autoselect 100baseTX <full-duplex> 100baseTX
                                   10baseT/UTP <full-duplex> 10baseT/UTP
fxp1: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
        inet6 fe80::290:27ff:fe61:cb05%fxp0 prefixlen 64 scopeid 0x1
        inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
        ether 00:90:27:61:cb:05
        media: autoselect (100baseTX <full-duplex>) status: active
        supported media: autoselect 100baseTX <full-duplex> 100baseTX
                                   10baseT/UTP <full-duplex> 10baseT/UTP
lp0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> mtu 1500
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
gif1: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
gif2: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
gif3: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x7
        inet6 ::1 prefixlen 128
        inet 127.0.0.1 netmask 0xff000000
ppp0: flags=8010<POINTOPOINT,MULTICAST> mtu 1500
sl0: flags=c010<POINTOPOINT,LINK2,MULTICAST> mtu 552
faith0: flags=8000<MULTICAST> mtu 1500

これを見ると、fxp0 のインターフェースのIPアドレスは10.16.128.16で、 ネットマスクが 0xffffff00(255.255.255.0)であり、ブロードキャストアドレス は10.16.128.255 であることが分かります。更に、fxp1があり、それらの アドレスなども分かるでしょう。その他のインターフェースについては今の場合 関係ありません(gif,faith は IPv6関係)。

外部に到達するための出入り口が1箇所しかないような単一のネットワークならば、 その出入り口を default gateway に指定しておけばいいでしょう。一方、出入り口 へ到達するために、幾つかの内部のネットワークを経由する必要がある場合には、 そのセグメントの出入り口を gateway に指定しなければなりません。そして、 出入り口に指定されたマシンまたはルーター上でも、必要な経路情報を指定する 必要があります。 (動的な経路選択には routed デーモンがありますが、効率の点から言うと静的 ルーティングの方が良いでしょう。動的ルーティングが必要な場合とは、外に でるためのバックアップルータが別にある場合です。)

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


route add -net 10.16.0.0 10.16.128.101

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

route add -net destination gateway

静的なルーティングで、他の router を経由して、サブネットに行く場合で、 サブネット毎に router が違うような場合は destination にサブネット であることを明示するために -netmask オプションをつける必要が あります。

route add -net 202.11.96.16 -netmask 255.255.255.240 10.16.128.101

上の例では、202.11.96.16/28 のサブネットに行くために、10.16.128.101 を 通っていく事を示しています。このサブネットの指定を忘れると、 netstat -rn コマンドで見た時に、 マスク値がDestinationに表示されないので直に分かります。

なお、FreeBSDでは netmask オプションでの設定(多くのUnixで共通です)以外に、 / を用いたマスク長による指定方法があるので、少し楽が出来ます。

route add -net 202.11.96.16/28 10.16.128.101

これらのルーティングがブート時に反映されるためには、/etc/rc.conf に以下の ような記述が必要です。


static_routes="0 1"
route_0="-net default 10.16.128.254"
route_1="-net 202.11.96.16/28 10.16.128.101"

すぐに分かるように route_0, route_1 の内容が直接 route コマンド に渡されているだけです。

デフォルトルータだけの設定の場合には、defaultrouterに記述しておけば、自動的に 設定されます。


defaultrouter="10.16.128.254"      # Set to default gateway (or NO)

これらの設定は起動時に /etc/rc.network によって設定されます。 (なお、/etc/default/rc.conf では defaultrouter は "NO"に設定されています。)

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

route add -host destination gateway

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




next up previous contents
Next: IP forwarding Up: ルーティング Previous: ルーティングとネットマスク
Noriyo Kanayama