ROUTE(8)

名称
route - マニュアルでルーティングテーブルを操作する

書式
route [-dnqtv] command [ [modifiers] args]

解説
route ユーティリティはネットワークルーティングテーブルを手動で操作します。 通常は、 routed(8) のようなシステムルーティングテーブル管理デーモンが 保守をしているので、マニュアルでの操作は必要ありません。

route ユーティリティは指定できるオプションは少数ですが、 強力なコマンド言語をサポートしています。 ユーザは route(4) において解説されているプログラム可能なインタフェースを通して、 任意の要求を指定することができます。

以下のオプションを使用可能です:

-d  デバッグモードで実行します。 すなわち、ルーティングテーブルを実際には変更しません。

-n  レポートの出力において、ホスト名とネットワーク名のシンボル名での表示を 抑止します (シンボル名と数字によるアドレスの変換処理には時間がかかり、 またネットワークが正常に動作している必要があります。 そのため、特にネットワークの動作の修正中には、 変換処理を行わない方が好都合かもしれません)。

-v  (冗長モード) 詳細な情報を出力します。

-q  add, delete, flush コマンドからの全ての出力を抑制します。

route ユーティリティでは以下の 6 つのコマンドを提供しています。

add ルートを追加します。
flush
    全てのルートを削除します。
delete
    指定されたルートを削除します。
change
    ルートの属性 (ゲートウェイなど) を変更します。
get ある宛先に対するルートを検索し、表示します。
monitor
    ルーティング情報ベースの変更、ルーティング検索の失敗、 ネットワーク分割の疑いなどの情報を継続的に報告します。

monitor コマンドは以下の書式です。

route [-n] monitor

flush コマンドは以下の書式です。

route [-n] flush [family]

flush コマンドが指定されると、 route は全てのゲートウェイのエントリにおけるルーティングテーブルを削除します。 アドレスファミリが -osi, -xns, -atalk, -inet6, -inet のいずれかの修飾子によって指定されている場合、 そのアドレスファミリの宛先を持つルートだけが削除されます。

その他のコマンドは以下の書式です。

route [-n] command [-net | -host] destination gateway [netmask]

ここで destination は宛先のホストもしくはネットワークです。 gateway はパケットがルートされるべき次の中継点です。 ある特定のホストへのルートは、 destination で指定されたインターネットアドレスを解釈することによって、 ネットワークへのルートと区別されます。 オプションの修飾子 -net, -host が指定されると、 destination をそれぞれネットワークもしくはホストとして強制的に解釈します。 これらの修飾子がないなら、 destination に INADDR_ANY (0.0.0.0) の “ローカルアドレス部” が含まれるか destination がネットワークのシンボル名である場合はネットワークへのルート、 その他の場合はホストへのルートと想定します。 destination は、 net/bits の書式でも指定可能です。

例えば、 128.32 は -host 128.0.0.32 として解釈されます。 128.32.130 は -host 128.32.0.130 として、 -net 128.32 は 128.32.0.0 として、 -net 128.32.130 は 128.32.130.0 として解釈されます。 192.168.64/20 は -net 192.168.64 -netmask 255.255.240.0 として解釈されます。

destination に対する default 指定は、 -net 0.0.0.0 と同じ意味であり、デフォルト経路です。

宛先がゲートウェイとして動作する中継点なしで、 あるインタフェースから直接到達可能な場合、 -interface 修飾子を指定しなければなりません。 この場合、指定されたゲートウェイは共通なネットワーク上の ローカルホストのアドレスとなり、 そのインタフェースが転送に使用されることを示します。 また、インタフェースが point to point 接続の場合、 インタフェースをその名前で指定できます。 この場合、ローカルやリモートのアドレスが変更されても そのルートは有効のまま残ります。

オプションの修飾子 -xns, -osi, -atalk, -link はそれに続いて指定されるアドレスが、それぞれ XNS, OSI, AppleTalk アドレスファミリである、もしくはリンクレベルのアドレスであることを指定します。 これらの場合、名前はシンボル名ではなく、 数字によって指定をおこなわなければなりません。

オプションの修飾子 -netmask はネットマスクオプションつきの OSI ESIS プロトコルによるリダイレクトの効果を実現するためのものです。 つまり、ネットワークインタフェースの暗黙のネットマスクとは異なる ネットマスクをもつサブネットを手動で追加します (この方法によらない場合は、OSPF や ISIS ルーティングプロトコルによって 通信します)。 この修飾子に続いて、アドレスパラメータ (これはネットワークマスクとして解釈されます) を指定します。 AF_INET の場合に生成される暗黙のネットワークマスクは、 このオプションを destination パラメータに続いて指定することによって、上書きすることができます。

AF_INET6 では、 -mask 修飾子の代りに -prefixlen 修飾子が使用可能です。 IPv6 では非連続なマスクが許されないためです。 例えば -prefixlen 32 はネットワークマスク ffff:ffff:0000:0000:0000:0000:0000:0000 の使用を指定します。 prefixlen のデフォルト値は 64 であり、 集約可能 (aggregatable) アドレスと共に動作可能となっています。 ただし、 default 指定時には 0 が仮定されます。 この修飾子は AF_INET6 アドレスファミリのみで動作可能なことに注意してください。

ルートにはいくつかのフラグがあり、 そのルートを使う宛先にデータを送信する時のプロトコルの動作に 影響をおよぼします。 これらのフラグは以下の修飾子によってセット (もしくはクリア) できます。

    -cloning   RTF_CLONING    - 使用中のルートを新たにひとつ生成する。
    -xresolve  RTF_XRESOLVE   - (外部からの検索に対して) 使用中である旨のメッ
                                セージを発行する。
    -iface    ~RTF_GATEWAY    - 宛先が直接到達可能。
    -static    RTF_STATIC     - 手動でルートを追加する。
    -nostatic ~RTF_STATIC     - カーネルかデーモンによってルートが追加された
                                ように振舞う。
    -reject    RTF_REJECT     - マッチした場合に ICMP unreachable を出力する。
    -blackhole RTF_BLACKHOLE  - (更新中に) 何も報告せずにパケットを捨てる。
    -proto1    RTF_PROTO1     - プロトコルに特有のフラグ #1 をセットする。
    -proto2    RTF_PROTO2     - プロトコルに特有のフラグ #2 をセットする。
    -llinfo    RTF_LLINFO     - プロトコルアドレスからリンクアドレスへの変換の
                                正当性をチェックする。

オプションの修飾子 -rtt, -rttvar, -sendpipe, -recvpipe, -mtu, -hopcount, -expire, -ssthresh によって TCP や TP4 のトランスポートレベルのプロトコルによる ルーティングのエントリ中でメインテナンスされる値の初期値を指定します。 これらは各々の修飾子の前に -lock メタ修飾子を指定することによって、個別にその値をロックすることができます。 また -lockrest メタ修飾子をつけることによって、 その後に続く全ての値をロックすることもできます。

change もしくは add コマンドにおいて、 destination もしくは gateway がルートを特定するのに不十分であった場合 (たとえば ISO のケースにおいて、複数のインタフェースが同じアドレスを持っているような場合)、 -ifp や -ifa 修飾子を使うことによって、 インタフェースやインタフェースアドレスを特定することができます。

オプションの -proxy 修飾子を指定すると、 RTF_LLINFO 経路表エントリが、 “公表された (代理のみの)” ARP エントリとなり、 arp(8) はそのように報告します。

省略可能な -genmask 修正子は、クローンマスクが存在することを指定します。 これは、子の経路が作成されるべきかどうかを判断するときに、 マスクが適用されることを指定します。 これは、 RTF_CLONING フラグが設定されたネットワーク経路に対してのみ適用されます。

destination や gateway で指定された全てのシンボル名は、まずホスト名として gethostbyname(3) を使用して検索されます。 検索に失敗した場合は、その名前をネットワーク名と見なし getnetbyname(3) によって検索されます。

route ユーティリティはルーティングソケットと新しいメッセージタイプである RTM_ADD, RTM_DELETE, RTM_GET, RTM_CHANGE を使います。 ルーティングテーブルの変更はスーパユーザのみがおこなうことができます。

診断

add [host | network ] %s: gateway %s flags %x 指定されたルートがテーブルに追加されました。 出力された値は ioctl(2) の呼出しの中で使われたルーティングテーブルのエントリからのものです。 指定されたゲートウェイアドレスがそのゲートウェイのプライマリアドレス (gethostbyname(3) によって返される最初のもの) でなかった場合、 ゲートウェイアドレスがシンボル名に加えて、数字でも表示されます。

delete [ host | network ] %s: gateway %s flags %x 指定されたルートがテーブルから削除されました。

%s %s done flush コマンドが指定された場合、削除された各ルーティングテーブルエントリが この形式のメッセージで報告されます。

Network is unreachable 指定されたゲートウェイが直接到達可能なネットワーク上にないために、 ルートの追加に失敗しました。 hop 数が 1 であるゲートウェイを指定しなければなりません。

not in table テーブルにないエントリを削除しようとしました。

routing table overflow ルートの追加を試みましたが、システムの資源が少なく、 新しいエントリを作成するためのメモリを割り当てられませんでした。

gateway uses the same route change 操作の結果変更された経路は、そのゲートウェイが使用する経路と同一です。 次ホップのゲートウェイが別の経路から到達可能であるべきです。

関連項目
netintro(4), route(4), arp(8), IPXrouted(8), routed(8)

歴史
route ユーティリティは 4.2BSD で登場しました。

バグ
最初の段落は多少 routed(8) の能力を大げさに書いています。

今のところ、IP fast forward 機能が有効になっていないと RTF_BLACKHOLE フラグが設定されたルートには、フラグが効果を持つよう -iface オプションを使って lo(4) ドライバにゲートウェイを設定する必要があります。 IP fast forward 機能が有効であれば、フラグの意味は常に受け入れられます。