ROUTE(8)

名称
route - ルーティングテーブルを手動で操作する

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

解説
route は、ネットワークのルーティングテーブルを手動で操作するためのユーティリティ です。しかし、 routed(8) のようなシステムルーティングテーブル管理デーモンがこの作業に従事するため、 通常はこのユーティリティを使う必要はありません。

route ユーティリティは、限られた数のコマンドしかサポートしていません。 しかし、多機能なコマンドプロセッサを用いることで、 route(4) で説明しているプログラマチックインタフェースを介してリクエストを送れば、 ユーザはどのようなリクエストでもできるようになります。

利用可能なオプションは以下の通りです:

-f  全ての経路を削除します (flush のように)。 add, change, delete, get コマンドと組み合わせた場合、 route はそのコマンドを実行する前に経路を削除します。

-n  動作報告時に、ホストやネットワークのシンボル名を出力しないようにします。 (シンボル名と数値との間での変換作業にはかなりの時間がかかり、 そのうえネットワークが正しく動作している必要があるため、特にネットワークの 動作を修正中の時などはこれを行わないほうが好都合かもしれません。)

-q  すべての出力を抑制します。

-v  詳細な情報をもっとたくさん出力します (verbose)。

route ユーティリティで使用可能なコマンドは以下の通りです:

add 経路を追加します。
flush
    すべての経路を削除します。
delete
    指定した経路を削除します。
change
    経路の属性 (ゲートウェイなど) を変更します。
get destination への経路を検索し、表示します。
show
    "netstat -r" に似た経路の表を表示します (netstat(1) を参照してください)。
monitor
    ルーティング情報のすべての変更、経路の検索の失敗、 ネットワークが分割された疑いがあるなどの情報を絶え間なく報告します。

monitor コマンドは、以下のような文法を持っています:

[-n] monitor

flush コマンドは、以下のような文法を持っています:

[-n] flush [family]

flush コマンドが指定された場合、 route は全てのゲートウェイエントリのルーティングテーブルを ``フラッシュ'' します。 -osi, -xns, -atalk, -inet のうちのいずれかの修飾子でアドレスファミリが指定された場合、 destination アドレスが指定したアドレスファミリに属する経路が削除されます。

他のコマンドは以下のような文法を持っています:

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

destination は到達先ホストもしくはネットワークであり、 gateway はパケットが次に中継される 1 hop 先のホストです。特定のホストへの経路と、 destination で指定されたインターネットアドレスから判断したネットワークへの経路は 区別された方がいいかもしれません。 省略可能な修飾子である -net と -host は、destination がそれぞれネットワークもしくはホストであると強制的に解釈させる ために用いられます。これを指定しなかった場合、もし destination が INADDR_ANY の ``ローカルアドレス部'' を含んでいたり、 destination がネットワークのシンボル名で指定されていたりした場合は、 その経路はネットワークへの経路であると仮定されます。これ以外の場合は、 ホストへの経路であると仮定されます。

例えば、 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 として解釈されます。

destination へ、ゲートウェイとして働く中継ホストを介す必要なく 直接ネットワークインタフェースを通じて到達することが可能な場合、 -interface 修飾子を指定すべきです。指定されたゲートウェイアドレスは、 コモンネットワーク上にあるこのホストのアドレスです。

省略可能な識別子である -xns, -osi, -atalk, -link は、その後に記述したアドレスが XNS, OSI, AppleTalk のアドレスファミリであることを明示するか、リンクレベルのアドレスである ことを明示するものです。そして、その名前はシンボル名よりはむしろ 数値で表したものであるべきです。

省略可能な修飾子である -netmask は、netmask オプションつきの OSI ESIS リダイレクトの効果を実現するためにあります。言い換えると、 そのネットワークインタフェースに暗黙で使用される netmask とは違う netmask でサブネットの経路を手動で追加する (OSPF や ISIS 経路制御プロトコルを 用いて通信する場合と同じように) ためにあるということです。 この修飾子の直後にはアドレスパラメータを 1 つ指定します (これは netmask として 解釈されます)。 AF_INET の場合に暗黙のうちに作成されるネットマスクは、 本オプションを指定することで上書きされます。

経路には以下のようなフラグがあり、その経路を使う destination へデータを 送信する時のプロトコルの動作に影響します。 これらのフラグは、対応する以下の修飾子を用いることで設定 (または取り消し) されます。

    -cloning   RTF_CLONING    - 使用中の経路を新たに 1 つ生成します。
    -xresolve  RTF_XRESOLVE   - (外部からの検索に対して) 使用している旨のメッセ
                                ージを発行します。
    -iface    ~RTF_GATEWAY    - 直接到達可能な範囲に destination が存在します。
    -static    RTF_STATIC     - 手動で経路が追加されます。
    -nostatic ~RTF_STATIC     - カーネルやデーモンによって追加される経路です。
    -reject    RTF_REJECT     - ICMPが到達不可である旨を出力します。
    -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 メタ修飾子を用いることで、その後に続く全ての値をロックすることが出来ます。

経路を指定するための destination や gateway にその資格がない場合に change や add コマンドを使うときは、 -ifp や -ifa 修飾子を用いることで、インタフェースやインタフェースのアドレスを指定する ことが出来ます。

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) で得たルーティングテーブルのエントリです。使用した gateway の アドレスがその gateway のプライマリアドレス (gethostbyname(3) が返した値のうちの最初のもの) でない場合、gateway アドレスは、シンボル名表記と 同じような感じで数値で表示されます。

delete [ host &| network ] %s: gateway %s flags %x
    上記のメッセージと類似していますが、エントリを削除する時の出力です。

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

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

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

routing table overflow
    エントリを追加する命令を試みましたが、システムの資源が乏しく、 新しいエントリを作成するためのメモリが足りませんでした。

Permission denied
    実行した命令は特権命令です。ルーティングテーブルを操作できるのは root だけです。この保護機構はカーネルで提供されているものです。

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

歴史
route コマンドは 4.2BSD から登場しました。

バグ
最初の段落は、 routed(8) の機能説明としては少し大げさです。