ポリシーベースルーティング
宛先だけでなく送信元IPアドレスや通信の種類などでパケットを分類し、転送先や参照する経路表を指定する仕組みである。条件に一致する通信へ、管理者が決めたポリシーを適用する。
イマシルちゃんの解説
新しい回線へ切り替えるとき、特定のサーバからの通信だけは以前の回線に残したいことがあるんだ。
普通のルーティングは、主に届け先のIPアドレスから経路を選ぶよ。
ポリシーベースルーティングでは、送信元IPアドレスなども条件にして通信を分けられるの。
例えば、業務用のプロキシから来た通信は旧回線へ、それ以外は通常の経路へ送るように決めるんだ。
この転送方針をポリシーとして設定しておけば、端末ごとに接続先を変えなくても、必要な通信の出口を選べるよ。
この解説はわかりやすかったですか?
より深い解説
同じ宛先でも出口を使い分ける
通常のIP転送では、宛先IPアドレスに対してロンゲストマッチで経路を選ぶ。同じ宛先への通信は、同じ経路表を使う限り基本的に同じ候補へ向かう。送り手が異なるという理由だけで別の回線を選びたい場合、宛先だけの経路では表現できない。
PBRは、転送前にパケットを条件で分類し、一致した通信に指定の処理を適用する。条件には送信元IPアドレス、宛先IPアドレス、プロトコル、ポート番号などを使える。指定できる項目は機種とソフトウェアによって異なる。送信元を主な条件にする方式をソースベースルーティングという。
SD-WANなどのオーバーレイでは、利用しているアプリケーションを識別し、音声会議は遅延の小さい経路へ、ファイル転送は別の経路へ、といった方針で振り分けることもできる。これも通信の種類に応じて転送先を選ぶポリシーによる制御である。ただし、一般的なルータのPBRが必ずアプリケーションの内容まで識別できるわけではない。識別に使える情報と、選択できる経路は製品の対応機能に従う。
利点は、経路表全体の出口を変えずに必要な通信の転送方針を変えられることである。 一方、通常の経路表だけを見ても転送先を説明できなくなるため、適用したポリシーとその条件も管理する必要がある。
BGPなどの経路広告や経路選択に適用するポリシーとは、処理する対象が異なる。PBRは主に流れてきたパケットの転送を制御する。経路情報を相手へ広告する機能や、通信の優先処理を保証するQoSそのものではない。
条件・転送先・適用箇所をそろえる
設定を読むときは、次の三点を分ける。
| 設定するもの | 確認する内容 |
|---|---|
| 条件 | どの送信元・宛先・通信種別を選ぶか |
| 処理 | どのネクストホップや経路表を使うか |
| 適用箇所 | どの入力インタフェースで判定するか |
Cisco IOS系の実装では、条件と処理をルートマップにまとめる。match ip addressでACLを参照して対象を選び、set ip next-hopで次に渡すルータを指定する。作成したルートマップは、ip policy route-mapで受信側のインタフェースへ適用する。
ここでACLはPBRの対象を選ぶために使っている。分類に使う条件と、ファイアウォールとして通信を許可・拒否する規則は区別する。 この使い方ではACLに一致しなかっただけでパケットを破棄するわけではない。
Cisco IOS系の通常のPBRでは、対応するルートマップのどの条件にも一致しなければ、通常の宛先に基づく転送を行う。複数の規則を作る場合は評価順序も確認する。ほかの製品で同じ設定名や動作になるとは限らない。
一部の通信だけ以前の出口へ送る
独自の例として、社内のプロキシPを10.20.0.10、外部サービスSを203.0.113.80とする。通常のデフォルトルートは新出口へ向いているが、PからSを含む203.0.113.0/24への通信だけは旧出口を利用したい。旧出口へ渡すネクストホップを10.254.0.1とする。
この例の規則は、「送信元IPアドレスが10.20.0.10で、かつ宛先IPアドレスが203.0.113.0/24に含まれるパケットを、10.254.0.1へ渡す」である。PBRを適用するのは社内側からパケットを受け取るインタフェースである。
| 通信 | この例で使う出口 |
|---|---|
| P → S | 条件に一致し、旧出口へ送る |
| 別の端末 → S | 条件に一致せず、通常の経路で新出口へ送る |
| P → 社内DNS | 外部宛ての条件に一致せず、通常の社内向け経路を使う |
PBRが指定するのは次に渡す相手であり、最終的な宛先IPアドレスを旧出口のアドレスへ書き換えるわけではない。この例ではS宛てのIPパケットを旧出口へ渡し、その先からSへ転送する。
出口でNAPTを行う構成では、旧出口から外へ出る通信は旧出口側のアドレスに変換される。外部サービスの許可リストを移行するまで、以前の接続元を維持したい場合などに使える。PBRは出口を選び、NAPTはアドレスなどを変換する。 二つの処理を分けて考える。
広すぎる条件と例外に注意する
注意:送信元だけで全通信を外向きの出口へ送ると、社内宛ての通信まで巻き込む場合がある。 プロキシからのDNS問い合わせや管理通信も同じ装置から送られるため、送り手の指定だけでは外部への通信を選び切れない。
必要な宛先範囲を条件に加えるか、社内向けを通常の経路へ戻す規則を先に設ける。インターネット宛てを選ぶときも、「プライベートアドレス以外なら全て外部」と無条件に決めず、組織で利用しているアドレスと経路を確認する。
PBRが通常の経路選択へ割り込む条件も実装による。例えばCiscoのset ip next-hopとset ip default next-hopでは、通常の宛先経路を先に利用するかが異なる。同じ「次の転送先を指定する設定」でも、コマンドの意味と対応機種を確認する。
ルータ自身が生成するpingなどのパケットは、端末から入力インタフェースへ届くパケットとは扱いが異なる場合がある。ルータからの試験が成功しても、端末の通信に同じ規則が適用された証拠にはならない。
障害時と戻りの経路を確かめる
指定したネクストホップへ到達できることに加え、その先の宛先へ到達できることも必要である。旧出口の装置が応答していても、上流回線が切れていれば外部へは届かない。障害検出には死活監視や経路の状態を利用する。
転送先が使えない場合に、別の候補へ送るのか、通常の経路表へ戻すのか、転送できなくなるのかは機器と設定で異なる。PBRの導入だけで自動的に障害へ対応できると考えず、利用できる監視連携と障害時の処理を確認する。
また、行きの出口を変えても戻りの経路が同じになるとは限らない。往復で別の装置を通る非対称経路になると、接続状態を持つファイアウォールやNAPTで通信を継続できない場合がある。条件に一致する通信と一致しない通信の両方で、往路・復路と外部から見える接続元を確かめる。
一時的な移行のために作った規則は、外部サービスの設定変更などが終われば解除を検討する。条件に一致した通信のカウンタやログを確認し、使われなくなった例外を残さないようにする。
参考資料
- Cisco:条件判定と転送先指定、機器自身の通信との違い
- Cisco:条件に一致しない場合の処理と機種ごとの制約
- Cisco:通常の宛先経路との優先関係を変える指定
- RFC 3022:アドレス変換を行う経路と通信状態