OpenWrt で PBR してみた備忘録です.
OpenWrt で PBR する方法は?
公式サイトによると,OpenWrt で PBR (Policy-Based Routing) する方法は
- PBR with netifd
- VPN policy routing
- mwan3
の3つの方法があるようです.
このうち,どうも netifd によるものは GUI の設定ができないっぽい.そして mwan3 は GUI での設定ができるのですが,かなり本格的なものっぽく,設定がかなり面倒そう.
と言うことで,VPN Policy routing を試してみたのですが,結論からいえば,
個人的に使うのならこれで十分
だと思います.設定も易しいです.なお,mwan3 の使用例については
に試しておられる方がいますが,VPN Policy Routing ではできない回線の死活を監視して自動的に切り替えるなんてこともできるみたいです.
回線のトポロジーと切り替えポリシー
今回は PoE で接続されている回線と PPPoE で接続されている回線を接続先のドメインに応じて切り替えることにします.メインは PoE で,補助的特定のドメイン名の場合は PPPoE を使うという感じですね.
なお,これ以外にも,
- アドレス範囲に応じた切り替え
- プロトコルに応じた切り替え
も簡単にできますし,Linux のファイアーウォールの知識は必要ですが,どのチェインに適用するのかも簡単に設定することができます(普通は PREROUTING だと思いますが).
必要なパッケージ
OpenWrt 上部の【システム】→【Software】を選択し(私の場合は GUI は日本語化されていますので,英語環境をお使いの方は適当に読み替えて下さい),
- Update lists ボタンをクリック
- Filter 欄に vpn-policy-routing を入力
- luci-i18n-vpn-policy-routing-ja パッケージをインストール
します.luci-i18n-vpn-policy-routing-ja さえ入れれば依存関係をチェックし関係する必要なパッケージも自動的に入ります.
なお,luci-i18n-vpn-policy-routing-ja は日本語対応の設定画面用のパッケージのはずなのですが,実際の設定画面はほぼ英語のままです(が,OpenWrt ではよくあること).
パッケージ導入後,いったんログアウトし再びログインすれば,OpenWrt の上部のメニューの中に【VPN】メニューが追加され,その中に【VPN Policy Routing】が出てきます.
WAN 回線の準備
次は WAN 回線の準備をします.
この設定は OpenWrt の【ネットワーク】メニューの【インターフェース】から行いますが,PoE 回線の設定方法については以下をご覧ください(ひかり電話なしの OCN バーチャルコネクトの設定例です.ひかり電話ありの場合も同様だと思います).
PPPoE の場合は,「インターフェースを新規作成」を選び,
- 名前:適当なもの(私の場合は WANFS)
- プロトコル:PPPoE
- デバイス:WAN インターフェース(NTTの装置に繋がっているもの)
のように設定してインターフェースを作成すれば良いだけです.作成後,【編集】
を選択し,【一般設定】タブの
- PAP/CHAP ユーザー名
- PAP/CHAP パスワード
にプロバイダから提供されているユーザーIDとパスワードを入力します.また,【詳細設定】タブの
- ゲートウェイメトリックを使用
に1より大きな適当な値(私の場合は10)を設定します.
なお,これ以外にも複数 WAN の回線がある場合は適当に「ゲートウェイメトリックを使用」欄の数字を変えながら(優先して使用したい回線を若い番号にする)設定すればOKです.
さらに【ファイアーウォール設定】の「ファイアウォールゾーンの作成または割り当て」に「WAN」を選んでおきます(本当は専用のゾーンを用意した方が良いのですが,とりあえず).
全て設定した後に設定を適用すれば(ダメな場合は再起動すれば)OpenWrt の【ステータス】メニューの中にある【概要】の「ネットワーク」欄が以下のように表示されるはずです(私の場合はIPv6回線が1回線,IPV4回線が OCN バーチャルコネクト,PPPoE,VPN 2回線分設定されています).
PBR の設定
ここまで来ればあとは PBR の設定を OpenWrt 設定の【VPN】メニューの【VPN and WAN Policy-Based Routing】から行うことができますが,まず確認しておくべき部分は,その上部にある「サービス・ステータス」です.
このサービス・ステータスに表示されている Service Gateway が PBR で利用できる回線です.なお,上記では IPv6 回線が表示されていませんが,これは「基本設定」タブの「設定」にある「IPv6 サポート」にチェックを入れていないからです.
PBR の実際の設定は「基本設定」の「ポリシー」欄から以下のように行います.
上記の設定だと,yahoo.co.jp ドメイン向けの場合は PPPoE(インターフェースに「WANFS」とあるのが PPPoE の回線です.サービス・ステータスの表示と見比べて下さい)経由でアクセスするように設定しています.
なお,実際に設定する際は,注意しなければならないことがいくつかあります.
まず,注意しなければならないことは,この WANFS というインターフェース,ポリシー欄でいきなり設定(選ぶことが)できません.
どうもこの VPN and WAN Policy-Based Routing パッケージ,物理的なインターフェースの場合は自動的に「ポリシー」の「インターフェース」から選べるようになるようなのですが,仮想インターフェースの場合はこれが自動ではないことがあるようで,実際,PPPoE の場合は出てきません.
この場合は,「詳細設定」タブの「Supporrted Interfaces」欄に,該当のインターフェース名を以下のように設定すれば使えるようになります.
またここで設定するインターフェース名は「大文字・小文字をきちんと区別して設定」する必要があります.つまり,インターフェースを作った際,設定した名前をその通り設定する必要があると言うことです.ポリシーのインターフェース名は全て大文字で表示されますが,設定自体は大文字・小文字を区別して行わなければなりません.
さらに,より詳細なポリシーを設定するには「Web UI Configuration」タブから必要な列を有効にする必要があります.
VPN への対応
最後に,本パッケージ,名前から分かる通り,VPN で接続した先に通信を振り向ける用に作られているようで,実際,公式サイト
によると,
- L2TP
- Openconnect
- OpenVPN
- PPTP
- Wireguard
によるトンネルに対応している旨記されています.ただし実際に対応させるには別に自分でパッケージを入れてやらないとダメです.オマケに入れて使えるようにするのは(モノにもよりますが)かなり手間がかかります.実際 L2TP と OpenVPN を試みましたがあまりに面倒で途中で投げ出してしまいました.
正直上に記したような VPN 使うのなら Softether を使った方が簡単ですし安定もすると思います.公式には記述はありませんが,OpenWrt には Softether VPN Client パッケージが用意されており,VPN policy routing パッケージと組み合わせて素直に使えます.
以上!