OS X での VPN 時に特定経路のみ、VPN にルーティングするには
VPN 接続時のトラフィック制御は以下 2 パターンに分類することが出来ます。
- 全てのトラフィックを VPN 経由にするケース
- 主に企業ユース。本社に FW や UTM があり、全トラフィックは必ずそこを経由させる… というパターン
- 特定の経路のみ、VPN 経由にするケース
- 主に個人ユース。必要なトラフィックのみ VPN にルーティングし、その他のトラフィックは通常通り、デフォルトルートに向けたまま… というパターン
今回は後者の「特定経路のみを VPN にルーティングし、他トラフィックはデフォルトゲートウェイに向けたまま」という設定を行います。OS X 10.10.2 で設定を行いました。
「すべてのトラフィックを VPN 接続経由で送信」のオフ¶
まず、「環境設定 → ネットワーク」で VPN 接続の詳細を開き、「すべてのトラフィックを VPN 接続経由で送信」のチェックボックスからチェックを外します。
VPN 接続確立時のルーティング追加スクリプト作成¶
VPN 接続確立時は /etc/ppp/ip-up というスクリプトが呼ばれます。このファイルを以下のように修正し、「ppp 接続時に必要な経路を追加する」というスクリプトにします(存在しない場合は新規作成します)。今回は例として「VPN にルーティングしたい経路」を「192.168.123.0/24」としています。
1 2 3 4 5 |
|
スクリプトには以下のように実行権限を付与しておきます。
1 |
|
もし、複数の経路を VPN にルーティングしたい場合は以下のように route add を羅列します。ここでは以下の 3 経路を VPN にルーティングしています。
- 192.168.11.0/24
- 192.168.33.0/24
- 192.168.55.0/24
1 2 3 4 5 6 7 |
|
今回はあくまで「例」ですが、経路を集約出来るのであれば集約すべきです。
VPN 接続断時の挙動¶
今回のスクリプトでは NextHop を ppp0 インターフェイスに指定しています。VPN が切断された場合、ppp0 への到達性が無くなる為、追加された経路は自動的に消滅します。よって、特別のアフターケアは必要ありません。
改善点¶
今回のスクリプトでは「複数の VPN 接続先が登録された状態」で「宛先を見分け、追加する経路を変更する」という対策を実施していません。VPN の接続先は /etc/ppp/ip-up スクリプト中から $5 として取得することが出来ました。よって、「宛先を見分け…」を実現するには $5 によって条件分岐するスクリプトを書くことにより、実現可能と思われます。