iPhoneとpfSenseでIPSec接続する設定
ここ最近は、ALIX.2D13にpfSenseを入れて、ブロードバンドルータ兼ファイアウォールとして使用しています。*1イーサネットポートが3つ用意されているので、WAN・LAN・DMZに分けるのに丁度良いです。
今回はpfSenseのVPN機能を使って、iPhoneから自宅ネットワークにIPSec接続ができるようにしてみます。
鯖管ろぐ Ver.2.0: IPSec VPN w/Mobile Client
こちらの記事を参考にさせていただきました。
画像大量注意。
IPSecの有効化
- 上部メニューのVPN→IPSecを選択。
- 「Enable IPSec」にチェックを入れてSave。
モバイル対応設定
- 「Mobile clients」タブを選択。
- 「Enable IPSec Mobile Client Support」にチェックを入れる。
- 「Provide a virtual IP address to clients」にチェックを入れる。
- その下にVPNクライアント用サブネットのアドレスを入力。
- Save!
それ以外の項目は必要に応じて。
Phase1設定
Phase1の定義が無いよ!と怒られるので、「Create Phase1」ボタンをクリック。
Phase1の設定をしていきます。
- Authentication Methodを「Mutual PSK + Xauth」に変更。公開鍵暗号なんかも使えますが、今回は共通鍵で。
- Peer Identiferのテキストボックスに識別子を入れる。「グループ名@ドメイン」にする必要は特にないみたいです。
- Pre-Shared Keyに適当な共通鍵を入力。
- Proposal Checkingを「Obey」に変更。
- Encryption algorithmを「AES」、強度を「256bits」に変更。クライアントによっては対応していないので、128bitsに下げたり3DESに変えたりして下さい。
他は初期設定で大丈夫なはず。
Phase2設定
続いてPhase2の設定。
IPSecのサマリー画面で「Show 0 Phase-2 entries」と書いてある隣「+」をクリックします。
空っぽのPhase2設定が展開されるので、「+」をクリック。
- Excryption algorythmsは、AES 256bitsを除いてチェックを外す。
- Hash algorithmsも、SHA1のみにチェック。
VPN接続用グループ作成
- 上部メニューのSystem→User Managerを選択。
- 「Groups」タブを選択。
- 右下の「+」ボタンをクリック。
ここからちょっと不自然な画面遷移をしますが、仕様です。
- Group nameを入力してSave。
先ほど作成したグループを編集します。
- 新しく作成したグループの横の「e」ボタンをクリック。
Assigned Privillegesの欄が増えています。
- Assigned Privillegesの横の「+」ボタンをクリック。
- System Privillegesは「User - VPN - IPsec xauth DialIn」のみ選択。
- Save!
ひとつ前の画面に戻ります。
- Assigned Privillegesに先ほど追加した権限が反映されているのを確認してSave。
ユーザー作成
最後にVPN接続用のユーザーを作成します。
- 「Users」タブを選択。
- 右下の「+」ボタンをクリック。
- Username、Passwordを入力。
- Group Membershipsは、先ほど作成したグループのメンバーになるように設定。この例の場合はMember Ofの側に「vpnuser」が入るように移動させました。
- IPsec Pre-Shared KeyにPhase1で設定した共通鍵と同じものを入力。
- Save!
pfSense側の設定は以上です。長かった!
iPhoneの設定
iPhoneにVPNの設定を追加します。
設定アプリから「VPN」→「VPN構成を追加...」を選択。
- 「IPSec」タブを選択。
- 「説明」は何でもOK。ここの設定がiPhoneのVPN設定一覧に出てくる名前になります。
- 「サーバ」にpfSenseのIPアドレスを入力。もちろんグローバルじゃないと繋がりません。
- 「アカウント」にVPN接続用に作成したユーザー名を入力。
- 「グループ名」にPhase1で設定した識別子を入力。
- 「シークレット」にPhase1で設定した共通鍵を入力。
- 保存!
接続テスト
設定が全てできたので、接続テストをしてみます。 自宅でWi-Fiに繋いでいたりするとうまくいかないので、テスト時はWi-Fiを切って3G/LTE回線経由で。
VPN設定画面のスイッチをタップすると、接続を始めてくれます。パスワードは保存できないので、毎回入力する必要あり。
VPN接続が成功すると、iPhoneの画面上部「VPN」の表示が出ます。
テストとして、ブラウザからpfSenseのLAN側アドレスにアクセスしてみた状態。pfSenseのオレオレ証明書が警戒されてエラーが出ていますが、とりあえずアクセスには成功している模様。
というわけで、繋がるようになりました。 iOS7のiPhone5でしか動作確認をしていないので、他の機種の場合は設定を調整してやる必要がありそうです。
追記: Androidからの接続
そういえばAndroidも持っていたのを忘れていました。
設定アプリから無線とネットワーク「その他」→「VPN」→「VPNネットワークの追加」。
- 「名前」何でもOK。VPN設定の一覧に表示される名前。
- 「タイプ」は「IPSec Xauth PSK」を選択。
- 「サーバーアドレス」はpfSenseのグローバルIPアドレス。もしくはホスト名。
- 「IPSec ID」はPhase1で設定した識別子を入力。
- 「IPSec事前共有鍵」はPhase1で設定した共通鍵。
特にpfSense側の調整の必要もなく、すんなり繋がりました。
ちなみにバージョンはAndroid4.0.4。たしか4.0からIPSec VPNの接続がOSレベルでサポートされたので、最近の機種なら同じ条件で使えそうです。
*1:そういえば、SEIL/x86からpfSenseに切り替えたことを書いてなかった。