Ubuntu 26.04 で複数のネットワークインターフェースや複数のセグメントを扱う場合、通常のルーティングテーブルだけでは意図した経路にならないことがあります。そのときに使うのが Policy Based Routing です。
ただし、Policy Based Routing は便利な反面、構成を複雑にします。単一のデフォルトルートで十分な環境では無理に使わず、送信元アドレス、戻り経路、Firewall、NAT、サービスの待ち受けアドレスまで含めて必要性を判断します。
- Policy Based Routing が必要になる場面を整理する
- Netplan で
routesとrouting-policyを組み合わせる基本形を確認する ip rule、ip route show table、ip route get ... from ...で反映後の経路を確認する
| 対象 OS | Ubuntu 26.04 |
|---|---|
| 管理側 NIC | ens160 / 192.0.2.10/24 / Gateway 192.0.2.1 |
| サービス側 NIC | ens192 / 198.51.100.10/24 / Gateway 198.51.100.1 |
| 追加ルーティングテーブル | 100 |
| 主な Netplan 項目 | routes / table / routing-policy |
-
1
Policy Based Routing が必要か判断する単一のデフォルトルートで済むなら、構成を増やさない方が運用しやすくなります。
-
2
現在のルートとルールを確認する
ip route、ip rule、ip route getで現状を確認します。 -
3
Netplan に追加テーブルと policy を定義する特定の送信元アドレスを、特定のルーティングテーブルへ流す形にします。
-
4
generate / try で検証してから apply するSSH 接続中のサーバーでは、経路変更で接続を失わないよう段階的に反映します。
-
5
反映後の経路を確認するルール、テーブル、送信元アドレスを指定した経路確認まで行います。
書籍
Advanced Ubuntu Administration and Management Best Practices
Ubuntu Server のネットワークや運用設計を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見るこのリンクは Amazon アソシエイトリンクです。
Policy Based Routing が必要になる場面
通常の Linux ルーティングは、宛先アドレスを見て経路を選びます。Policy Based Routing は、それに加えて送信元アドレスやルールに基づいて参照するルーティングテーブルを切り替える仕組みです。
- 管理用 NIC とサービス用 NIC で戻り経路を分けたい
- 複数のアップストリームルーターを使い分けたい
- 特定の送信元 IP アドレスだけ別のゲートウェイから出したい
- 外部向け通信と内部向け通信の経路を明確に分離したい
通常のルーティングで済むか確認する
最初に、現在のルーティングテーブルとルールを確認します。単一のデフォルトルートで期待どおり動作するなら、Policy Based Routing を追加する必要はありません。
ip route
ip rule
ip route get 8.8.8.8ip route get は、指定した宛先へ通信するときに実際にどの経路が選ばれるかを確認するのに便利です。Policy Based Routing を使う場合は、あとで送信元アドレスを指定した確認も行います。
Netplan の基本例
次は、ens160 を通常の経路、ens192 を追加テーブル 100 の経路として扱う例です。198.51.100.10 を送信元にする通信だけ、テーブル 100 を参照します。
network:
version: 2
ethernets:
ens160:
addresses:
- 192.0.2.10/24
routes:
- to: default
via: 192.0.2.1
ens192:
addresses:
- 198.51.100.10/24
routes:
- to: default
via: 198.51.100.1
table: 100
routing-policy:
- from: 198.51.100.10/32
table: 100この例では、ens160 側のデフォルトルートは通常のメインテーブルに入り、ens192 側のデフォルトルートはテーブル 100 に入ります。そして routing-policy によって、送信元が 198.51.100.10/32 の通信だけがテーブル 100 を参照します。
192.0.2.0/24 と 198.51.100.0/24 はドキュメント用アドレスです。テーブル番号を管理する
Netplan では table: 100 のように番号を直接指定できます。複数の policy を扱う場合は、運用上わかりやすいように /etc/iproute2/rt_tables で名前を確認・管理しておくと読みやすくなります。
grep -v "^#" /etc/iproute2/rt_tables | sed -n '1,120p'小規模な構成であれば、番号だけでも十分です。重要なのは、Netplan の routes 側で指定した table と、routing-policy 側で指定した table を一致させることです。
設定を反映する
まず Netplan の構文を生成・確認し、netplan try で一時反映します。
sudo netplan generate
sudo netplan trynetplan try で通信に問題がないことを確認してから、恒久反映します。ここで接続性に不安がある場合は、いったん戻して設定を見直します。sudo netplan apply反映後に確認する
反映後は、ルール、メインテーブル、追加テーブル、送信元アドレスを指定した経路を確認します。Policy Based Routing は設定ファイルだけで判断せず、実際にカーネルがどの経路を選ぶかまで確認します。
ip rule
ip route show table main
ip route show table 100
ip route get 8.8.8.8 from 198.51.100.10ip route get ... from ... の結果で、期待したインターフェース、送信元アドレス、ゲートウェイが選ばれているか確認します。ここがずれている場合は、routing-policy、テーブル番号、経路定義のどこかが一致していない可能性があります。Firewall / NAT / サービス待ち受けとの関係
Policy Based Routing は経路選択を制御する仕組みであり、Firewall、NAT、サービスの待ち受けアドレスを自動的に整合させるものではありません。特に複数 NIC 構成では、戻り経路が想定とずれると通信が不安定に見えることがあります。
- サービスがどのアドレスで待ち受けているか確認する
- Firewall が該当インターフェースや送信元アドレスを許可しているか確認する
- NAT が必要な通信では、出ていくインターフェースと変換ルールが一致しているか確認する
- 戻り通信が同じ経路で返る必要があるか確認する
まとめ
Ubuntu 26.04 では、Netplan の routes と routing-policy を使うことで Policy Based Routing を構成できます。複数 NIC や複数セグメントを扱う環境では有効ですが、構成を複雑にするため、必要な場面を見極めて使うことが重要です。
実運用では、ip rule、ip route show table、ip route get ... from ... で、設定ファイルではなく実際の経路選択を確認します。



