Ubiquiti Networks Edgerouter X (ER-X) で Policy Based Routing (PBR) 備忘録です.
本家による解説は,
ですが,ちょっとわかりにくいので,備忘録としてまとめておきたいと思います.
Policy Based Routing ってなに?
Policy Based Routing (以後 PBR) って,
によると,
ルーティングテーブルに従ってパケットを転送するのではなく,管理者が設定した「送信元アドレス,プロトコル,ポート番号,パケットサイズ,入力I/F」の情報に基づきルーティングを行える技術
のことだそうですが,ER-X の場合は,
管理者が設定した「送信元アドレス,プロトコル,ポート番号,パケットサイズ,入力I/F」の情報に基づき,適用するルーティングテーブルの種類を切り替える技術
ととらえる方が分かりやすいと思います.
ネットワーク・ダイアグラム
今回は以下の様な条件のネットワークを考えます.
- 192.168.0.0/24 が LAN 側で,VLAN ID 1 が割り当てられている.
- 172.20.10.0/24 が WAN 側で,VLAN ID 10 が割り当てられている.
- 172.20.10.1 が VLAN ID 10 側の Default Route である.
- 172.20.20.0/24 も WAN 側で,VLAN ID 20 が割り当てられている.
- 172.20.20.1 が VLAN ID 20 側の Default Route である.
- 192.168.0.100 が割り当てられた端末は,172.20.10.1 経由で外部につながる.
- 192.168.0.0/24 の上記以外の端末は,172.20.20.1 経由で外部につながる.
なお,ER-X には,switch0 インターフェースが定義され,これに VLAN ID 1, 10, 20 のネットワークが収容されているとしておきますが,この設定方法については,以前の記事
をご覧ください.
要は,VLAN ID 10 は管理用のネットワークで,制限が緩く,VLAN ID 20 は制限がきついネットワークで,特定の端末 192.168.0.100 だけを緩い制限でつなげたい,って場合を考えるってことですね.
本来なら,192.168.0.100 以外は VLAN ID 10 のネットワークと通信できないようにする設定も示すべきなんだとは思いますが,これについては今回は省略です.
ルーティング・テーブルの準備
PBR はさまざまな条件で,ルーティングテーブルを切り替える技術って説明ですので,まずは,切り替えるべきルーティングテーブルを準備します.
さすがにこの辺りになると,GUI での設定はできず,CUI での設定となります.
ER-X には,デフォルトのルーティングテーブルとして main があり,これ以外に,PBR用のルーティングテーブルを table 1 – 200 まで定義できるようです.今回は,基本的にはデフォルトルートとして,172.20.20.1 を使わせたいので,main のルーティングテーブルにそれを定義し,PBR 用の table 10 にデフォルトルート 172.20.10.1 を定義します.
$ configure # set protocols static route 0.0.0.0/0 next-hop 172.20.20.1 # set protocols static table 10 route 0.0.0.0/0 next-hop 172.20.10.1
これで出来る設定は以下の通です.
# show protocols static { route 0.0.0.0/0 { next-hop 172.20.20.1 { } } table 10 { route 0.0.0.0/0 { next-hop 172.20.10.1 { } } } [edit]
ファイヤーウォール変更ルールの定義
次に,ファイヤーウォールの変更のルールとして,PBR を定義します.ルーティングのルールではなくて,ファイヤーウォールの変更のルールとして定義するのがなんとなく違和感があるのですが,まぁ,なぜだかそうするみたいです.
今回は,変更ルール名として PBR を定義し,その100番(9999まで可能)に,端末192.168.0.100 に対してルーティングテーブル 10 番を適用するよう記述します(もちろん,ポート番号や MAC アドレスなどを条件にすることも可能).
# set firewall modify PBR rule 100 description "PBR rule for terminal 100" # set firewall modify PBR rule 100 modify table 10 # set firewall modify PBR rule 100 source address 192.168.0.100/32
結果的に出来る設定は以下の通りです.
# show firewall modify modify PBR { rule 99 { description "PBR rule for terminal 100" modify { table 5 } source { address 192.168.0.100/32 } } } [edit]
ファイヤーウォール変更ルールの適用
最後に前節で作ったファイヤーウォール変更ルールを実際に適用します.今回は VLAN ID 1 に所属する端末からの通信(inbound)にルールを適用すべきで,さらに,VLAN ID 1 は switch0 インターフェースに収容されています.したがって,設定は,
# set interfaces switch switch0 vif 1 firewall in modify PBR
です.結果的に出来る設定は以下の様になります.
# show interfaces switch switch0 vif 1 address 192.168.0.1/24 description local-network firewall { in { modify PBR } } mtu 1500 [edit]
なお,192.168.0.1 は switch0.1 に割り当てている IP アドレスです.
設定の適用と確認・保存
設定の適用と保存は,
# commit # save
で,実際に PBR が適用できているかどうかは,
$ show firewall modify PBR statistics -------------------------------------------------------------------------------- IPv4 Firewall "PBR" Active on (switch0.1,IN) rule packets bytes action description ---- ------- ----- ------ ----------- 100 47200 5847817 MODIFY PBR rule for terminal 100 10000 374004 65177621 ACCEPT DEFAULT ACTION
とすれば分かります.なるほど,9999 まで modify rule が定義できるので,10000番がデフォルトルールなんですね.
以上!