静的ルーティング
ルート (route) とは、特定のネットワーク (または単一のホスト) に到達するために、どの物理ネットワークインターフェースやゲートウェイが必要かを判定するのに使用される、カーネル内に設定されるルールです。ルーティング対象プロトコルには複数の種類がありますが、この記事では Linux カーネルでの IP プロトコルのルーティングについて取り扱います。
IP ルートはカーネル内に保持されていますが、以下の例で説明するようにユーザ空間ツールによって変更することが可能です。
ルートを表示する
iproute2 を使用してルーティングテーブルを表示します:
user $
ip route
default via 192.168.1.1 dev wlan1 metric 1 192.168.50.0/24 dev lan proto kernel scope link src 192.168.50.1 127.0.0.0/8 via 127.0.0.1 dev lo 192.168.1.0/24 dev wlan1 proto kernel scope link src 192.168.1.1
または、sys-apps/net-tools を使用してルーティングテーブルを表示します:
user $
netstat -rn
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.50.0 0.0.0.0 255.255.255.0 U 0 0 0 lan 192.168.1.0 0.0.0.0 255.255.255.0 U 2000 0 0 wlan1 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 192.168.1.1 0.0.0.0 UG 2000 0 0 wlan1
静的ルートを追加する
静的ルートを追加する前に必要な前提情報は、IP アドレス、サブネットマスク (CIDR) と、ゲートウェイです。
この例では、サブネットマスク 255.255.255.0
を持つネットワーク 10.10.10.0
を、ゲートウェイ 192.168.1.50
へとルート設定します。sys-apps/iproute2 パッケージのコマンド (ip) を使用してルートを追加するときには、CIDR スタイルのネットマスクが必要です。次の例では 10.10.10.0/24
ルートを追加します:
root #
ip route add 10.10.10.0/24 via 192.168.1.50
ip route コマンドを使用してルーティングテーブルを表示します:
user $
ip route
default via 192.168.1.1 dev wlan1 metric 1 10.10.10.0/24 dev wlan1 via 192.168.1.50 src 10.10.10.1 192.168.50.0/24 dev lan proto kernel scope link src 192.168.50.1 127.0.0.0/8 via 127.0.0.1 dev lo 192.168.1.0/24 dev wlan1 proto kernel scope link src 192.168.1.1
古いシステムには、上の例で使用した ip コマンドが無く、netstat または route コマンド (sys-apps/net-tools) しか無いということがあるかもしれません。
route コマンドを使用して、上の説明と同じ静的ルートを追加します:
root #
route add -net 10.10.10.0 netmask 255.255.255.0 gw 192.168.1.50
netstat (sys-apps/net-tools) を使用してルーティングテーブルを表示してください:
user $
netstat -rn
Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10.10.10.0 192.168.1.50 255.255.255.0 UG 0 0 0 wlan1 192.168.50.0 0.0.0.0 255.255.255.0 U 0 0 0 lan 192.168.1.0 0.0.0.0 255.255.255.0 U 2000 0 0 wlan1 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 192.168.1.1 0.0.0.0 UG 2000 0 0 wlan1
ルーティングテーブルは、特化したルートから一般的なルートへという順でソートされます。これはルーティングプロセスがテーブルをどう読むかでもあります。最長プレフィックス一致は、最小のネットワーク、言い換えると最大のネットマスクを持つネットワーク、または最も特化したルート 255.255.255.255
が、ルーティングテーブルの最初の位置に来るという意味です。
永続的な静的ルートを追加する
netifrc スクリプト (OpenRC の標準のネットワークツール) を利用している場合は、好きなテキストエディタで /etc/conf.d/net を開いてファイルを修正することで、永続的な静的ルートを追加することができます。
参考のために、現在のルーティングテーブルを参照してください。
routes_wlan1="10.10.10.0/24 via 192.168.1.50
default via 192.168.1.1"
ネットワークマネージャとして dhcpcd を使う場合は、静的ルートは代わりに /etc/dhcpcd.conf に設定します。
上の 2 行の意味は次の通りです:
10.10.10.0/24
ネットワーク宛ての IP パケットは192.168.1.50
に送信されます。- 他のすべてのネットワーク (
0.0.0.0/0
) 宛ての IP パケットは192.168.1.1
に送信されます。
0.0.0.0/0
はプレフィックス (サブネットマスク) が無く、他のすべてのネットワーク、デフォルトルートを意味します。デフォルトルート 0.0.0.0/0
は以下の場合に使用されます:
- ホストがターゲットネットワークセグメント内に物理または論理 IP インターフェースを持たない場合。
- ホストが自身のネットワークセグメントの外に IP パケットを送る必要があり、ルーティングテーブルに、ターゲット IP ネットワークのために特化したルートが見つからない場合。
関連項目
- iproute2 — a tool developed to unify network interface configuration, routing, and tunneling for Linux systems.
- Network management — describes possibilities for managing the network stack.
外部資料
- Longest prefix match (Wikipedia)
- Gentoo Bug 5409326