Loading
連載
» 2001年11月01日 10時00分 UPDATE

ネットワークコマンド使い方:route 〜ルーティングテーブルの表示/設定を行う

[加地眞也,@IT]

目的と用途

アイコン

 routeコマンドは、IPパケットをルーティングするためのルーティングテーブルの内容表示と設定を行う。ルーティングテーブルは、おもにOSが管理するルーティング情報を保管したメモリテーブルだ。テーブルのエントリーが経路を表している。経路はネットワークまたはホストへ到達するために通過する必要のあるゲートウェイを表している。

 ここで、ルーティングテーブルの管理とは、

  • ルーティングテーブルの表示と確認
  • ルーティングテーブルへの経路の追加、削除、変更

を意味する。

書式

●Windowsの場合

route[ -f][ -p][ PRINT| ADD| DELETE| CHANGE[ 宛先IPアドレス][ MASK サブネットマスクアドレス[ ゲートウェイIPアドレス][ METRIC メトリック数][ IF インターフェイス名]]

-f ルーティングテーブルのすべての経路情報をクリアする
-p ADD(追加)時に指定すると、追加した経路は次回以降のOS起動時にも自動的に追加される。指定しない場合は今回限りの設定となる。PRINT(表示)時に指定すると、このオプションで追加した経路のみを表示する*1
PRINT ルーティングテーブルを表示する
ADD 経路を追加する
DELETE 経路を削除する
CHANGE すでに登録されている経路を変更する
MASK 経路が使用するサブネットマスクアドレスを指定する
ゲートウェイIPアドレス 経路が使用するゲートウェイIPアドレスを指定する
METRIC 経路のメトリック値を1〜9999までの範囲で指定する
IF 経路が割り当てられるインターフェースを指定する。インターフェイス名は「route PRINT」で表示される「Interface List」の16進値を指定する。省略されるとゲートウェイIPアドレスから最適と考えられるインターフェイスを自動選択する

*1ヘルプなどにはこのように記載されているが、実際には普通のPRINTと何も変わらないようだ


●Linuxの場合

  • ――ルーティングテーブルの表示
    route[ -n][ -v][ -e| -ee][ -F][ -C][ -A アドレスファミリ名]

  • ――経路の追加
    route[ -v][ -F] add{ -host| -net} 宛先IPアドレス[/プレフィックス][ gw ゲートウェイIPアドレス][ metric メトリック数][ netmask サブネットマスクアドレス][ mss MSSサイズ][ window TCPウィンドウサイズ][ irtt 初期ラウンドトリップ時間][ mod][ dyn][ reinstate][[dev] インターフェイス名]

  • ――拒否経路の追加
    route[ -v][ -F] add{ -host| -net} 宛先IPアドレス[/プレフィックス][ metric メトリック数] reject

  • ――経路の削除
    route[ -v][ -F] del{ -host| -net} 宛先IPアドレス[/プレフィックス][ gw ゲートウェイIPアドレス][ metric メトリック数][[dev] インターフェイス名]

  • ――バージョン情報の表示
    route{ -V| --version}

  • ――ヘルプの表示
    route{ -h| --help}[ -A アドレスファミリ名]
-n 出力をIPアドレスのみに抑制する(DNS逆引きを行わない)
-v 詳細モード
-e netstatと同様のフォーマットで表示する。-eeはnetstat形式のデータも含めた詳細情報を表示する
-F FIB(Forwarding Information Base:Linuxにおけるルーティングテーブルの実装方式。宛先IPアドレスをキーに経路情報を効率的に配置して性能の向上を図っている)テーブルを用いる。デフォルト
-C カーネルキャッシュでの情報を表示する
-A プロトコル種別。デフォルトは「inet(IPv4)」。ほかに「ipx(IPX)」「inet6(IPv6)」などが使用できる
add 経路を追加する
del 経路を削除する。削除する経路は宛先IPアドレスなど追加時に指定したパラメータが一致する経路である
-host ホストのための経路情報として登録する
-net ネットワーク(サブネット)のための経路情報として登録する
宛先IPアドレス 経路の宛先IPアドレス
gw 経路が使用するゲートウェイIPアドレスを指定する
metric 経路のメトリック値を指定する
netmask 経路が使用するサブネットマスクアドレスを指定する
mss 経路におけるMSS(Maximum Segment Size:TCPパケットの最大データサイズ)を指定する。デフォルトはインターフェイスのMTU(ifconfigコマンドで指定)から導かれる。単位はバイト
window TCPにおけるwindowサイズを指定する。windowsサイズはTCPコネクションにおける最大連続転送サイズである。単位はバイト
irtt 経路におけるTCPの初期ラウンドトリップ時間を指定する。ラウンドトリップ時間はTCPコネクションにおける通信途絶を判断するまでのタイムアウト時間である。単位はミリ秒。1〜12000の範囲で指定する
mod/dyn/reinstate ダイナミックルーティング時などに利用される診断用フラグを設定する
dev 経路が割り当てられるインターフェイス名を指定する。インターフェイス名の指定がすべてのパラメータの最後である場合にはdevキーワードは省略できる
reject ルーティングを拒否する経路を指定する。デフォルトゲートウェイより優先するので、このホストで簡易に特定のネットワークへのルーティングを禁止したい場合には便利だ
-V バージョン情報を表示する
-h ヘルプを表示する

使用方法

ルーティングテーブルを確認する

 Windowsでは「route PRINT」、Linuxでは「route」で現在のルーティングテーブルを確認できる。それぞれ細かな点で出力内容が異なるが、経路情報に関する基本は完全に同じだ。

●Windowsでの使用例

C:\>route print
===========================================================================
Interface List
0x1 ........................... MS TCP Loopback interface
0x1000003 ...00 a0 b0 16 91 92 ...... I-O DATA ET100-PCI-S Fast Ethernet Adapter

=============================================================================
=============================================================================
Active Routes:
Network Destination(1)     Netmask(2)       Gateway(3)    Interface(4) Metric(5)
          0.0.0.0          0.0.0.0    192.168.1.254    192.168.1.10         1
        127.0.0.0        255.0.0.0        127.0.0.1       127.0.0.1         1  <--(c)
      192.168.1.0    255.255.255.0     192.168.1.10    192.168.1.10         1  <--(b)
     192.168.1.10  255.255.255.255        127.0.0.1       127.0.0.1         1  <--(a)
    192.168.1.255  255.255.255.255     192.168.1.10    192.168.1.10         1
        224.0.0.0        224.0.0.0     192.168.1.10    192.168.1.10         1
  255.255.255.255  255.255.255.255     192.168.1.10    192.168.1.10         1
Default Gateway:     192.168.1.254                                   &nbsnbsp;         <--(d)
=============================================================================
Persistent Routes:
  None


●Linuxでの使用例

[root@host1 ~]# route
Kernel IP routing table
Destination(1)  Gateway(3)      Genmask(2)      Flags Metric(5) Ref    Use Iface(4)
host1           *               255.255.255.255 UH    0         0        0 eth0  <--(a)
192.168.1.0     *               255.255.255.0   U     0         0        0 eth0  <--(b)
127.0.0.0       *               255.0.0.0       U     0         0        0 lo    <--(c)
default         192.168.1.254   0.0.0.0         UG    0         0        0 eth0  <--(d)


 上記の例は最も簡単な、つまりインターフェイスを1つだけ設定している場合だ。ホストのIPアドレスは「192.168.1.10(ホスト名:host1)」を設定している。実はほとんどの場合、自身が持つインターフェイスに関する経路はOSが自動的に登録してくれる。そのため、上記は自動設定の結果に過ぎない。Windowsでは、ブロードキャストアドレスへの経路(「192.168.1.255」「255.255.255.255」)やマルチキャストへの経路(「224.0.0.0」)なども追加されて経路数が増えているものの、内容はどちらもほぼ同じだ。

 インターフェイス1つにつき、最低限でも「(a) 自身(ホスト)への経路」「(b) 自身の所属するネットワークへの経路」「(c) ローカルループバックへの経路」の3つは必ず必要になる。このうち「ローカルループバックへの経路」は、仮想インターフェイスのための経路だ。たとえインターフェイスが1つもなくとも、必ず自動的に設定される。

 共通したルーティングテーブル列は以下のとおりだ。

  • (1) 宛先IPアドレス
  • (2) サブネットマスクアドレス
  • (3) ゲートウェイIPアドレス
  • (4) インターフェイス
  • (5) メトリック

 「宛先IPアドレス」が、それぞれのサブネットにおける経路となる。このネットワークや、そこに所属するホスト向けのパケットは、経路として設定されたインターフェイスからゲートウェイへと転送されることになる。またサブネットマスクは、「宛先IPアドレスがネットワークを意味しているのか」「ホストなのか」を判断するのに使用される。この例では、「192.168.1.0」への経路は、サブネットマスクから導かれるホスト番号(下位8ビット)が0であることから、ネットワークへの経路であると分かる。Linuxでは、ゲートウェイが「*」の場合には、実際にゲートウェイを使用するのではなく、自身のインターフェイスから転送可能である(つまりルーティングを必要としない)ことを意味している。Windowsでも、ゲートウェイが自身のインターフェイスの場合は同様だ。

 (d)はデフォルトゲートウェイの指定を意味している。この例では、「192.168.1.254」がデフォルトゲートウェイだ。経路は自身と自身の所属するネットワークしか登録されていないので、それ以外のすべてのルーティングは「192.168.1.254」へ送られることになる。

 また、WindowsとLinuxでは固有の情報も表示されている。Windowsの「Interface List」は、設置されているインターフェイスの一覧だ。一番左の番号(16進数)はインターフェース個々の番号だ。Linuxでの「Flags」は経路の種類を示している。「U」は有効、「H」はホスト、「G」はゲートウェイを意味している。そのほか、ダイナミックルーティングを行っている場合には、固有のフラグが追加されることもある。また、「Ref」は経路が参照された回数、「Use」は経路が実際に使用された(ルーティングされた)回数を表している。

経路の追加と変更を行うには

●経路の追加

 経路をルーティングテーブルに追加するには、Windows/Linuxともに「route add」コマンドを用いる。

●Windowsでの使用例

Windowsでの使用例

●Linuxでの使用例

Linuxでの使用例

 上記では、ネットワーク「192.168.10.0/24」への経路(ゲートウェイ「192.168.1.254」)を追加している。「192.168.10.0/24」はゲートウェイの先にあるので、メトリックは1となる。インターフェイスは省略することもできる。この場合は、ゲートウェイアドレスなどから最も適切と考えられるインターフェイスが自動的に選ばれる。

 多くの場合、経路を追加するのは、インターフェイス(NIC)を追加したり、デフォルトゲートウェイだけでは対処できないネットワークが新たに追加された、などの場合だろう。例えば、以下の図1のような構成でのホストXからホストYへのルーティングでは、ホストZがネットワーク「192.168.99.0/24」を知らなければ、ルーティングは行えないので、ホストZに対して以下のような経路を追加するとよい。

図1 経路追加が必要なネットワーク構成例 図1 経路追加が必要なネットワーク構成例

●Linuxでの使用例

[root@host-z ~]# route add -net 192.168.99.0 gw 192.168.10.253  metric 1 netmask
 255.255.255.0 eth1
[root@host-z ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.10.254  *               255.255.255.255 UH    0      0        0 eth1
host-z          *               255.255.255.255 UH    0      0        0 eth0
192.168.10.0    *               255.255.255.0   U     0      0        0 eth1
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
192.168.99.0    192.168.10.253  255.255.255.0   UG    0      0        0 eth1
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
赤字の部分が追加された経路


 なお、この例のように、ほかのホストからのIPパケットを、インターフェイスから別のインターフェイスへと転送することを「IPフォワーディング」と呼ぶ。この機能は通常、デフォルトでは不可となっているので、使用する場合には明示的に使用を許可しなくてはならない。

 Linuxでは「/etc/sysconfig/network」ファイルで

FORWARD_IPV4="no"

を「yes」に変更する。またはRedHat 6.2以降などでは、「/etc/sysctl.conf」の

net.ipv4.ip_forward = 0

を「1」に変更することで許可する場合もある。

 Windows 2000ではレジストリを設定するか*2、またはRRAS(Routing and Remote Access Service)を使用したほうが無難だろう。

*2\\HKEY_LOCAL_MACHINE \SYSTEM \CurrentControlSet \Services \Tcpip \Parameters \IPEnableRouterに「1」をセットする


●継続的な経路の追加

 これらのコマンドで追加された経路は一時的なもので、ホストをリブートすると無効になってしまう。そこで、Windowsでは「-p」オプションを追加することで、OSブート時に再設定される経路(Persistent Routes)を追加できる。再設定される経路は「route PRINT」コマンドで「Persistent Routes」に表示される。Linuxではrouteコマンドでは行えないが、「/etc/sysconfig/static-routes」ファイルに経路を記述しておけば、OSブート時に再設定される。

●Windowsでの使用例

C:\>route -p add 192.168.99.0 mask 255.255.255.0 192.168.10.253 metric 1 if 0x1000003
C:\>route print
        :
  255.255.255.255  255.255.255.255     192.168.1.10    192.168.1.10       1
Default Gateway:       192.168.1.254
===========================================================================
Persistent Routes:
  Network Address          Netmask  Gateway Address  Metric
     192.168.99.0    255.255.255.0    192.168.10.253       1
赤字の部分が追加された再設定経路


●Linuxでの使用例

eth0 net 192.168.99.0 netmask 255.255.255.0 gw 192.168.10.253
        :


●拒否経路の追加

 Linuxでは拒否経路を追加することもできる。拒否経路には、そのホストでルーティングしない宛先を指定する。デフォルトゲートウェイを設定している環境で、ルーティングしたくないネットワークやホストがある場合に追加する。

●Linuxでの使用例

[root@host1 ~]# route add -net 192.168.40.0 netmask 255.255.255.0 reject
[root@host1 ~]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
        :
192.168.40.0    -               255.255.255.0   !     0      -        0
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         gw              0.0.0.0         UG    0      0        0 eth0
「Flags」が「!」の経路が拒否経路


●経路の削除と変更

 経路の削除は、Windowsは「route DELETE」コマンド、Linuxは「route del」コマンドで行う。

●Windowsでの使用例

C:\>route delete 192.168.90.0


●Linuxでの使用例

[root@host1 ~]# route del -net 192.168.90.0 netmask 255.255.255.0


 Windowsでは経路の変更は「route CHANGE」コマンドで行えるが、Linuxでは変更は行えない。「route del」と「route add」を組み合わせる必要がある。

ルーティングにまつわるトラブルをいかに解決するか

●トラブル解決の第一歩は現状の把握から

 ルーティングのトラブルは、ネットワーク障害において最もやっかいな部類に入る。まず、必ずしも自身のホストにおける問題でないことが多い。ほかの場所にあるルータや、中継に使っているホストのルーティング設定ミスが問題だとすると、すぐには原因がつかみにくい。また影響範囲が大きく、深刻な問題を起こしやすい。ダイナミックルーティングを使っていると、設定ミスがほかの機器に伝播してしまうこともある。

 問題を早急に収束させるためにも、普段からネットワーク構成がどうなっているか、本来どのようにルーティングさせるべきとしているか、きちんとまとめて把握しておくようにしよう。あるべき理想の姿と、現状の障害の様子を比較することは、原因調査の第一歩である。

 経路情報は非常に複雑なので、経路図を覚えるのも無理がある。経路の設計書など資料を管理するのはもちろんだが、ルータや中継ホストのルーティングテーブルを正常に稼動している際にダンプして保存し、障害時に比較できるようにしているケースもある。台数が多いと逆に煩雑になるだけだが、ネットワークの根幹に設置しているなど、ポイントとなる機器のみを対象にしてもいいだろう。単純だが実は意外に効果がある方法だ。いずれにせよ、普段からの準備が解決の速度を決めると心がけよう。

●ネットワークコマンドで状況を探る

 ルーティングの状態を確認するには、まずは「traceroute(tracert)」コマンドを用いるのがベストだ。もっとも、traceroute(tracert)コマンドはある特定ホストから別のホスト間の経路についてだけ表示するものだともいえる。ただ1つの経路で調査するだけでなく、複数のホストから調査を行って比較する必要もある。もし複数の調査結果が同じルータやホストを示していれば、ほぼ原因は絞れる。

●有効なサブネットマスク/ゲートウェイが使用されているか?

 原因となるルータやホストが特定できたら、そこで使用されているルーティングテーブルが適切かどうかの判断を行うわけだが、意外に多いミスはサブネットマスクの間違いだ。すでに述べたように、サブネットマスクはサブネットのネットワーク番号を決定するのに使われる。つまり、宛先IPアドレスがマッチしないと判断されて、別のゲートウェイに転送されたり破棄されてICMPエラーになっているかも知れない。ゲートウェイの設定ミスでも、もちろん同じ現象を引き起こす。

 また、デフォルトゲートウェイの設定も見落としがちだ。便利なために必要がなくともつい設定してしまい、設定間違いからルーティングミスにつながる場合もある。デフォルトゲートウェイは、ほかのすべてのネットワークを意味する「ワイルドカード」でしかない。決して最適なゲートウェイということではないので注意しよう。

●メトリックは適切か?

 特定ホストに対して複数の経路があり得る場合、その経路選択の判断に使用されるのがメトリックだ。このメトリックは、ダイナミックルーティングを使用している場合には動的に更新されるため、実際に運用してみると設計時の想定動作と異なる、という場合もある。

 もっとも、動的に変更された距離(ホップ数)や回線品質によって経路を変更できるのがダイナミックルーティングのメリットなので、それで問題ないということでもいいが、RIP/RIP2ではその経路が何らかの問題で使用不可だと判断すると、メトリックを非常に大きな数値にして使用しないようにしてしまう。実際に稼働しているシステムでのメトリックの変化にも着目するようにしよう。

●不用意にRIP/RIP2が使用されていないか?

 ダイナミックルーティング、特にRIP/RIP2の場合、ネットワーク内に予想外のroutedなどが稼働していると、自動的にその情報を受け取り、ルーティングテーブルが混乱してしまうことがある。特に、送出されたルーティングテーブルがテスト用など不適切なものだと、間違ったルーティングテーブルがネットワーク全体にあっという間に広まってしまう。復旧するには、予定外のroutedを停止し、混乱したルータやホストのルーティングテーブルを修正して回るなどしかない。非常に危険なミスなのだが、実際に多いケースでもある。

 これを防ぐためには、根幹となるルータやホストではスタティックにルーティングテーブルを設定し、routedは受信不可/送信のみ可能とする、などの方法が考えられる。

関連ネットワーク・コマンド/ツール

route 〜ルーティングテーブルの設定/表示

traceroute(tracert) 〜ネットワークの経路を調査する


ネットワークコマンド使い方


Copyright© 2016 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

この記事に関連するホワイトペーパー

Focus

- PR -

編集部からのお知らせ

@IT編集部では、編集記者を募集しています。ご興味のある方は奮ってご応募ください。

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。