今回は、以前にも書きましたが、改めてWindows Serverのネットワーク設定において、ルーティングテーブルを管理するための「route」コマンドについて、実務的な活用方法を詳しく解説します。
ルーティングテーブルは、パケットがどの経路で宛先に到達するかを決定する重要な機構です。Windows Serverで複数のネットワークセグメントを扱う場合、GUIのネットワーク設定だけでなく、route コマンドでのルーティング設定が不可欠となります。しかし、オプションの意味や設定の永続化方法について、正確に理解していないエンジニアが少なくありません。
本記事では、ルーティングの基本概念から、実際の設定例、トラブルシューティング時の活用テクニックまで、前回とはまた違った切り口で、実現場で即役立つ知識をお伝えします。
ルーティングテーブルとは
ルーティングテーブルは、ネットワークデバイスが通信相手のIPアドレスを受け取った時に、「このIPアドレスへのパケットはどのゲートウェイ(ネットワークカード)経由で送信すればよいのか」を判定するためのテーブルです。Windows Serverは、このテーブルを参照してパケットの送信経路を決定します。
例えば、Windows Serverに複数のネットワークカード(NIC)が装備されている場合、ルーティングテーブルに基づいて、どのNIC経由で通信するかが自動的に判定されます。また、複数のゲートウェイが存在する場合は、メトリック値(コスト値)に基づいて、最短経路のゲートウェイが優先されます。
ルーティングテーブルの管理が不適切であると、ネットワーク接続に予期しない問題が発生することがあります。例えば、特定のセグメントへの通信がタイムアウトしたり、通信が全く到達しないというケースは、多くの場合ルーティング設定の誤りが原因です。
route printコマンドでのルーティング確認
まず、現在のルーティングテーブルを確認しましょう。最もシンプルな方法は「route print」コマンドを実行することです。
# ルーティングテーブルを表示(IPv4)
route print
# IPv6ルーティングテーブルを表示
route print -6
# より詳細な情報を表示
route print -v
実務では、管理者権限のコマンドプロンプトで「route print」を実行することが日常的です。これにより、現在のルーティング設定がすべて表示されます。
# 特定のルートのみを検索
route print | findstr "192.168"
grepの代わりにfindstrコマンドを使用することで、特定の条件に合致するルートのみを抽出できます。
ルーティングテーブルの見方・解釈
route printコマンドの出力は以下のような形式になります:
Active Routes:
Network Destination Netmask Gateway Interface Metric
0.0.0.0 0.0.0.0 192.168.1.1 192.168.1.100 10
127.0.0.0 255.0.0.0 On-link 127.0.0.1 306
192.168.1.0 255.255.255.0 On-link 192.168.1.100 10
各カラムの意味は以下の通りです:
| カラム | 説明 |
|---|---|
| Network Destination | パケットの宛先ネットワークのIPアドレス |
| Netmask | ネットワークマスク(クラス判定用) |
| Gateway | このルートを使用する場合のゲートウェイIP |
| Interface | 実際に通信に使用するNICのIPアドレス |
| Metric | ルート優先度(低い値ほど優先) |
「On-link」と表示されている場合は、「このネットワーク内にいるため、ゲートウェイを経由しない直接通信を使用する」という意味です。
実務では、「特定の宛先IP(例:10.0.0.0/8)への通信が遅い」というトラブルが発生した場合に、route printで「そのIPアドレスへのルートはどのゲートウェイを経由しているか」を確認し、ゲートウェイの応答性を調査するといったプロセスが一般的です。
routeコマンドでのルート追加
新しいルートをルーティングテーブルに追加する場合は「route add」コマンドを使用します。管理者権限のコマンドプロンプトが必須です。
基本的な構文は以下の通りです:
route add [Network Destination] mask [Netmask] [Gateway] metric [Metric]
具体例を示します:
# 10.0.0.0/8へのルートを、ゲートウェイ 192.168.1.1 経由で追加
route add 10.0.0.0 mask 255.0.0.0 192.168.1.1 metric 10
# 192.168.2.0/24へのルートを、ゲートウェイ 192.168.1.254 経由で追加
route add 192.168.2.0 mask 255.255.255.0 192.168.1.254
# ホストルート(/32)の追加
route add 10.10.10.100 mask 255.255.255.255 192.168.1.1
重要なポイントは、netmaskパラメータを正確に指定することです。よくある間違いとして、netmaskを省略したり、間違った値を指定することがあります。一般的なネットマスクは以下の通りです:
| クラス | ネットマスク |
|---|---|
| /8(Aクラス) | 255.0.0.0 |
| /16(Bクラス) | 255.255.0.0 |
| /24(Cクラス) | 255.255.255.0 |
| /32(ホストルート) | 255.255.255.255 |
実務では、「新しいVPN接続が追加された時に、VPN経由でアクセスするべきサブネットへのルートを手動追加する」というケースが一般的です。この時、メトリック値を適切に設定することで、複数のゲートウェイが存在する場合の優先度を制御できます。
routeコマンドでのルート削除
ルーティングテーブルからルートを削除する場合は「route delete」コマンドを使用します。
# 10.0.0.0/8へのルートを削除
route delete 10.0.0.0 mask 255.0.0.0
# 特定のゲートウェイ経由のルートのみを削除
route delete 192.168.2.0 mask 255.255.255.0 192.168.1.254
削除時には、「Network Destination」と「Netmask」を正確に指定する必要があります。指定を誤ると、別のルートが削除されてしまう可能性があります。削除前に「route print」で対象ルートを確認することを強く推奨します。
実務でハマりやすいポイントとして、「route add」で追加したルートが複数存在する場合、「route delete」で特定のルートのみを削除したい場合は、ゲートウェイも指定する必要があります。ゲートウェイを指定しないと、複数のルートが存在する場合に削除対象が曖昧になり、エラーが発生することがあります。
# ゲートウェイを指定しない削除(複数ルートがある場合はエラー)
route delete 10.0.0.0 mask 255.0.0.0
# ゲートウェイを指定した削除(特定のルートのみを削除)
route delete 10.0.0.0 mask 255.0.0.0 192.168.1.1
永続的なルーティング設定
重要な注意点として、「route add」で追加したルートは、デフォルトではサーバーの再起動によって失われます。つまり、一時的な設定になるということです。永続的にルーティング設定を保持したい場合は、以下のいずれかの方法を使用する必要があります。
方法1:route addコマンドの「-p」オプション
最もシンプルな方法は、「route add」コマンドに「-p」(persistent)フラグを付与することです。これにより、ルーティング設定はレジストリに保存され、再起動後も有効なままになります。
# 永続的なルーティング設定を追加
route -p add 10.0.0.0 mask 255.0.0.0 192.168.1.1 metric 10
# 確認コマンド(再起動後も存在することを確認)
route print | findstr "10.0.0.0"
方法2:netsh interfaceコマンド
より詳細なルーティング設定が必要な場合は、netshコマンドを使用できます。
# netshコマンドでのルーティング設定(永続的)
netsh interface ipv4 add route prefix=10.0.0.0/8 interface="Ethernet" nextHop=192.168.1.1 metric=10 store=persistent
# 確認
netsh interface ipv4 show route
方法3:レジストリでの設定
システムレジストリを直接編集する方法もあります。ただし、この方法は推奨されません。以下のレジストリキーに情報が保存されています:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\PersistentRoutes
実務では、ほぼすべてのケースで「route -p add」を使用しています。netshコマンドは、より複雑な設定(例:インターフェースメトリック値の設定)が必要な場合に限定されます。
メトリック値(コスト)の理解
メトリック値は、複数のルートが同じ宛先を指している場合に、どのルートを優先的に使用するかを決定するための数値です。メトリック値が小さいほど優先度が高くなります。
例えば、同じ10.0.0.0/8ネットワークへのルートが複数存在する場合:
# ゲートウェイ192.168.1.1経由(メトリック10)
route add 10.0.0.0 mask 255.0.0.0 192.168.1.1 metric 10
# ゲートウェイ192.168.1.2経由(メトリック20)
route add 10.0.0.0 mask 255.0.0.0 192.168.1.2 metric 20
この場合、パケットは優先度の高い(メトリック値が小さい)192.168.1.1経由で送信されます。192.168.1.1が応答しなくなった場合に初めて、192.168.1.2経由でのルーティングがアクティブになります。
メトリック値を指定しない場合は、システムが自動的にインターフェースメトリック値に基づいて計算します。
# メトリック値を自動計算させる(明示的指定なし)
route add 10.0.0.0 mask 255.0.0.0 192.168.1.1
実務では、「フェイルオーバーを実装したい」「複数のWAN接続を使い分けたい」というケースで、メトリック値の調整が活躍します。
複数ゲートウェイでのルーティング
Windows Serverで複数のゲートウェイ経由で通信する構成を実装することができます。これは、冗長性の確保やロードバランシングの実装に有効です。
例として、以下のような構成を考えます:
- メインのゲートウェイ:192.168.1.1(メトリック10)
- バックアップのゲートウェイ:192.168.1.2(メトリック20)
# 永続的に両方のルートを設定
route -p add 10.0.0.0 mask 255.0.0.0 192.168.1.1 metric 10
route -p add 10.0.0.0 mask 255.0.0.0 192.168.1.2 metric 20
# 現在のルーティングテーブルを確認
route print | findstr "10.0.0.0"
出力は以下のようになります:
10.0.0.0 255.0.0.0 192.168.1.1 192.168.1.100 10
10.0.0.0 255.0.0.0 192.168.1.2 192.168.1.100 20
通常はメトリック値が小さい192.168.1.1経由で通信されます。ただし、Windowsの自動フェイルオーバー機能によって、メインゲートウェイが応答しなくなった場合に自動的にバックアップゲートウェイへ切り替わるわけではないという点に注意が必要です。より確実な冗長構成を実装する場合は、NLB(Network Load Balancing)やTeamingなど、別のメカニズムを検討する必要があります。
ルーティング設定のトラブルシューティング
ハマりポイント1:ルート追加時のゲートウェイ到達不可エラー
「route add」コマンドでゲートウェイとして指定したIPアドレスに到達不可能な場合、エラーが発生します。
# エラー例:192.168.1.1に到達できない場合
route add 10.0.0.0 mask 255.0.0.0 192.168.1.1
# The route addition failed: The system cannot find the file specified.
この場合、まず以下を確認してください:
- ゲートウェイのIPアドレスが同じサブネット内にあるか
- ゲートウェイへのpingが成功するか
# ゲートウェイへの疎通確認
ping 192.168.1.1
# 現在のネットワーク設定を確認
ipconfig /all
ハマりポイント2:route deleteが失敗する
削除対象のルートが複数存在する場合、「Network Destination」だけでは削除できません。
# 失敗例:複数ルートがある場合
route delete 10.0.0.0 mask 255.0.0.0
# The route deletion failed: The specified route was not found.
# 成功例:ゲートウェイを指定
route delete 10.0.0.0 mask 255.0.0.0 192.168.1.1
削除前に必ず「route print」で対象ルートを確認することをお勧めします。
ハマりポイント3:デフォルトルート(0.0.0.0)の誤設定
デフォルトルート(0.0.0.0/0)を誤って設定すると、すべてのトラフィックが特定のゲートウェイに流れてしまい、ネットワーク通信が麻痺することがあります。
# デフォルトルートの確認(慎重に扱う)
route print | findstr "0.0.0.0"
# デフォルトルートを変更する場合は、現在の設定をバックアップしておく
route print > routing_backup.txt
実務では、「ネットワークが突然遅くなった」というトラブルが、実はデフォルトルートの不適切な変更によるものであったというケースを何度も経験しています。
PowerShellでの代替コマンド
Windows PowerShellを使用する場合は、より現代的なネットワークコマンドレットを使用できます。
Get-NetRoute
# 特定のルートを検索
Get-NetRoute -DestinationPrefix "10.0.0.0/8"
# ルートを追加
New-NetRoute -DestinationPrefix "10.0.0.0/8" -NextHop "192.168.1.1" -RouteMetric 10
# ルートを削除
Remove-NetRoute -DestinationPrefix "10.0.0.0/8" -NextHop "192.168.1.1" -Confirm:$false
PowerShellのコマンドレットは、より読みやすく、オブジェクト指向的です。スクリプトでのバッチ処理が必要な場合は、routeコマンドよりもPowerShellコマンドレットの使用をお勧めします。
まとめ
Windows Serverのルーティング設定は、route コマンドによって効率的に管理できます。本記事の重要なポイントは以下の通りです:
- 「route print」で現在の設定を把握する:トラブルシューティングの出発点
- ネットマスクを正確に指定する:routeコマンド使用時の最重要ポイント
- 永続的な設定には「-p」フラグを付与する:再起動後の設定保持
- メトリック値で優先度を制御する:複数ゲートウェイの場合に活用
- 削除前に必ず確認する:route deleteは予期しない結果につながる可能性あり
これらのテクニックを身につけることで、Windows Serverのネットワーク設定をより柔軟かつ安全に管理できるようになります。特にマルチNIC構成や複数のWAN接続を扱う環境では、route コマンドの正確な理解が不可欠です。
