ルーティングテーブルの設定を一時的に変更し、内容を確認する際にはrouteコマンドを使います。
本連載では、ネットワーク管理の基本コマンドを順を追って紹介していきます。基本書式と用法、主要なオプション、用例サンプルを示しますので、manやhelp代わりに通読し、各コマンドでできることを順次おさらいしてみてください。今回は、一時的なルーティングテーブル(IP経路テーブル)の変更に利用する「route」コマンドを紹介します。
なお、本連載では、執筆時点の最新版「Red Hat Enterprise Linux(RHEL)」および「CentOS」環境で動作を確認しています。また、用法事例はIPv4(Internet Protocol version 4)ネットワークを前提にしています。コマンドのサンプルなどで一部環境に依存した出力例となる場合がありますので、その際には適宜ご自身の環境に合わせて読み替えてください。
IP通信の経路情報を静的に設定するときには、「route」コマンドを利用するとルーティングテーブルを手動で編集できます。複数のネットワークインターフェースカード(NIC)を装備したLinuxマシンをルーターとして運用する場合などで、恒久的なルーティングを行う場合のテスト目的に利用できるコマンドです。
route [オプション] [ターゲット]
route add -net [宛先IP] netmask [サブネット] gw [GW IP] [NIC]
route del [宛先IP/サブネット]
※[ ]は省略可能な引数を示しています。
routeコマンドは、ルーティングテーブルの表示/設定を行います。特定の宛先ネットワークに対し、デフォルトとは異なるゲートウエイのIPアドレスを指定するときや、一時的にスタティックルート(静的ルート)を設定する際などに利用します。
routeコマンドを引数なしで実行すると現在のルーティングテーブルが表示されます(書式1)。オプションに「add」を指定すると新しいルーティングテーブルが作成され(書式2)、「del」を指定すると既存のルーティングテーブルが削除されます(書式3)。なお、現在のルーティングテーブルの内容は一般ユーザーでも表示できますが、ルーティングテーブルの操作にはroot権限が必要です。
routeコマンドを利用したルーティング設定は一時的なもので、ネットワークサービスあるいはシステムを再起動するとクリアされます。恒久的にルーティング設定を残す場合は、システム起動時に実行されるスクリプト(CentOSの場合、「/etc/sysconfig/network-scripts/route-<デバイス名>」)に記述を行う必要があります。
なお、Linuxマシンをルーターとして使用する場合は、異なるネットワーク間のパケット転送(IPフォワード)を許可するために、「/proc/sys/net/ipv4/ip_forward」の値を「1」に設定しておく必要があります。また、恒久的なスタティックルーティングを行う場合は、routeコマンドではなく、「/etc/sysconfig/network-scripts/route-<デバイス名>」(CentOSの場合)や「/etc/sysconfig/network」(Red Hat Enterprise Linuxの場合)などのファイルを直接編集します。
routeコマンドの主なオプションは次の通りです。
オプション | 意味 |
---|---|
-A | 指定したアドレスファミリーを使う |
-C | Linuxカーネルが持つルーティングテーブルを使う |
-e | netstatコマンドのフォーマットで表示する |
-n | ホスト名の名前解決を行わない(IPアドレスのまま表示) |
-v | 詳細な情報を出力する |
add | 経路を追加する |
del | 経路を削除する |
gw | ゲートウエイを指定する |
netmask | 経路を追加するときにサブネットマスクを指定する |
target | 対象とするネットワーク/ホストを指定する |
-net | ターゲットをネットワークとする |
-host | ターゲットをホストとする |
routeコマンドで出力される各項目の意味・内容は次の通りです。
項目 | 意味 |
---|---|
Destination | 宛先ネットワークまたは宛先ホスト |
Gateway | ゲートウエイのIPアドレス |
Genmask | 宛先のサブネットマスク(デフォルトゲートウエイの場合「0.0.0.0」) |
Flags | 経路の状態(U:経路が有効、H:宛先はホスト、G:ゲートウエイを使用、!:経路は無効) |
MSS | Max Segment Size(一度に送信できるパケットの最大長) |
Window | 一度に転送するデータサイズ |
irtt | TCP接続の初期ラウンドトリップ時間 |
Metric | 宛先までのメトリック値(宛先までの距離) |
Use | 経路の参照回数 |
Iface | 宛先経路を使うネットワークインターフェース |
現在のルーティングテーブルの設定を確認する場合は、引数を与えずrouteコマンドを実行します。netstatコマンドと同じフォーマットで表示したい場合は、オプションに「-e」を指定します。さらに「-n」オプションを指定すると、ホスト名の名前解決を行わず、「netstat -rn」を実行したときとほぼ同じ出力が得られます。
$ route -en Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default router 0.0.0.0 UG 0 0 0 eth0
参考記事「netstatコマンドとは?」(@IT)
ルーティングテーブルに新たにスタティックルートを追加する場合は、「add」に加えて「-net」オプションで宛先ネットワークを、「netmask」に続けてサブネットマスクを、「gw」に続けてゲートウエイのIPアドレスを指定し、引数として「eth1」などのネットワークデバイス名を与えます(実行には管理者権限が必要です)。
下のコマンド実行例の一行目は、「192.168.12.0/24」ネットワーク(サブネットマスク「255.255.255.0」)宛の通信のゲートウエイを「192.168.40.1」に設定しています。三行目のコマンドでは「-e」「-n」オプションを組み合わせて、netstatコマンド実行時のように設定内容を確認しています。
$ sudo route add -net 192.168.12.0 netmask 255.255.255.0 gw 192.168.40.1 eth1 Password: $ route -en Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default router 0.0.0.0 UG 0 0 0 eth0 192.168.12.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 192.168.40.0 192.168.40.1 255.255.255.0 U 0 0 0 eth1
ホスト単位でルーティング情報を設定する場合は、サブネットマスクを「255.255.255.255」(/32=サブネットマスクによるIP割り当てが1つのみ)とすればよいので、前述の「route add -net」でも設定できますが、「route add -host」を使用する方法もあります。
下のコマンド実行例では「192.168.40.254/32」に宛てた通信のゲートウエイを「192.168.39.254」に設定しています。
$ sudo route add -host 192.168.40.254 gw 192.168.39.254 eth1
Copyright © ITmedia, Inc. All Rights Reserved.