静的ルーティング
ルート (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
静的ルートを追加する
静的ルートを追加する前に必要な前提情報は、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
ルーティングテーブルは、特化したルートから一般的なルートへという順でソートされます。これはルーティングプロセスがテーブルをどう読むかでもあります。最長プレフィックス一致は、最小のネットワーク、言い換えると最大のネットマスクを持つネットワーク、または最も特化したルート 255.255.255.255
が、ルーティングテーブルの最初の位置に来るという意味です。
永続的な静的ルートを追加する
netifrc スクリプト (OpenRC の標準のネットワークツール) を利用している場合は、好きなテキストエディタで /etc/conf.d/net を開いてファイルを修正することで、永続的な静的ルートを追加することができます。
参考のために、現在のルーティングテーブルを参照してください。
/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