手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 26.04 Policy Based Routing の基本

Ubuntu 26.04 ネットワーク設定の関連記事

Ubuntu 26.04 で複数のネットワークインターフェースや複数のセグメントを扱う場合、通常のルーティングテーブルだけでは意図した経路にならないことがあります。そのときに使うのが Policy Based Routing です。

ただし、Policy Based Routing は便利な反面、構成を複雑にします。単一のデフォルトルートで十分な環境では無理に使わず、送信元アドレス、戻り経路、Firewall、NAT、サービスの待ち受けアドレスまで含めて必要性を判断します。

この記事で整理すること
  • Policy Based Routing が必要になる場面を整理する
  • Netplan で routesrouting-policy を組み合わせる基本形を確認する
  • ip ruleip route show tableip route get ... from ... で反映後の経路を確認する
対象 OSUbuntu 26.04
管理側 NICens160 / 192.0.2.10/24 / Gateway 192.0.2.1
サービス側 NICens192 / 198.51.100.10/24 / Gateway 198.51.100.1
追加ルーティングテーブル100
主な Netplan 項目routes / table / routing-policy
  1. 1
    Policy Based Routing が必要か判断する
    単一のデフォルトルートで済むなら、構成を増やさない方が運用しやすくなります。
  2. 2
    現在のルートとルールを確認する
    ip routeip ruleip route get で現状を確認します。
  3. 3
    Netplan に追加テーブルと policy を定義する
    特定の送信元アドレスを、特定のルーティングテーブルへ流す形にします。
  4. 4
    generate / try で検証してから apply する
    SSH 接続中のサーバーでは、経路変更で接続を失わないよう段階的に反映します。
  5. 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 は、複数 NIC 環境を成立させるための万能な設定ではありません。まずは通常のルーティング、Firewall、NAT、サービスの待ち受けアドレスを整理し、それでも経路選択を分ける必要がある場合に使います。

通常のルーティングで済むか確認する

最初に、現在のルーティングテーブルとルールを確認します。単一のデフォルトルートで期待どおり動作するなら、Policy Based Routing を追加する必要はありません。

コマンド
ip route
ip rule
ip route get 8.8.8.8

ip 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 を参照します。

実環境では、インターフェース名、IP アドレス、プレフィックス長、ゲートウェイを自分の環境に合わせて変更してください。例示用の 192.0.2.0/24198.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 を一致させることです。

設定を反映する

SSH で接続しているサーバーの経路を変更する場合は、管理用経路を失わないように注意します。可能であればコンソールや別経路で復旧できる状態にしてから作業します。

まず Netplan の構文を生成・確認し、netplan try で一時反映します。

コマンド
sudo netplan generate
sudo netplan try
netplan 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.10
ip route get ... from ... の結果で、期待したインターフェース、送信元アドレス、ゲートウェイが選ばれているか確認します。ここがずれている場合は、routing-policy、テーブル番号、経路定義のどこかが一致していない可能性があります。

Firewall / NAT / サービス待ち受けとの関係

Policy Based Routing は経路選択を制御する仕組みであり、Firewall、NAT、サービスの待ち受けアドレスを自動的に整合させるものではありません。特に複数 NIC 構成では、戻り経路が想定とずれると通信が不安定に見えることがあります。

  • サービスがどのアドレスで待ち受けているか確認する
  • Firewall が該当インターフェースや送信元アドレスを許可しているか確認する
  • NAT が必要な通信では、出ていくインターフェースと変換ルールが一致しているか確認する
  • 戻り通信が同じ経路で返る必要があるか確認する
Policy Based Routing を入れたあとに通信が不安定な場合、ルートだけでなく Firewall / NAT / listen address / return path を同じセットで確認します。

まとめ

Ubuntu 26.04 では、Netplan の routesrouting-policy を使うことで Policy Based Routing を構成できます。複数 NIC や複数セグメントを扱う環境では有効ですが、構成を複雑にするため、必要な場面を見極めて使うことが重要です。

実運用では、ip ruleip route show tableip route get ... from ... で、設定ファイルではなく実際の経路選択を確認します。

Ubuntu 26.04 ネットワーク設定の関連記事
Ubuntu 26.04 Policy Based Routing の基本

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る