ほねにくのうわずみ

私(@honeniq)の個人ブログです。日々の生活の中で感じた諸々のことから、人様にお見せできるような上澄み部分を抽出して投稿しています。

iPhoneとpfSenseでIPSec接続する設定

ここ最近は、ALIX.2D13にpfSenseを入れて、ブロードバンドルータ兼ファイアウォールとして使用しています。*1イーサネットポートが3つ用意されているので、WAN・LAN・DMZに分けるのに丁度良いです。

今回はpfSenseのVPN機能を使って、iPhoneから自宅ネットワークにIPSec接続ができるようにしてみます。

鯖管ろぐ Ver.2.0: IPSec VPN w/Mobile Client
こちらの記事を参考にさせていただきました。

画像大量注意。

IPSecの有効化

f:id:honeniq:20131113094229p:plain

  • 上部メニューのVPN→IPSecを選択。
  • 「Enable IPSec」にチェックを入れてSave。

モバイル対応設定

f:id:honeniq:20131113095100p:plain

  • 「Mobile clients」タブを選択。
  • 「Enable IPSec Mobile Client Support」にチェックを入れる。
  • 「Provide a virtual IP address to clients」にチェックを入れる。
  • その下にVPNクライアント用サブネットのアドレスを入力。
  • Save!

それ以外の項目は必要に応じて。

Phase1設定

f:id:honeniq:20131113095426p:plain

Phase1の定義が無いよ!と怒られるので、「Create Phase1」ボタンをクリック。

Phase1の設定をしていきます。

f:id:honeniq:20131113112233p:plain

  • Authentication Methodを「Mutual PSK + Xauth」に変更。公開鍵暗号なんかも使えますが、今回は共通鍵で。
  • Peer Identiferのテキストボックスに識別子を入れる。「グループ名@ドメイン」にする必要は特にないみたいです。
  • Pre-Shared Keyに適当な共通鍵を入力。
  • Proposal Checkingを「Obey」に変更。
  • Encryption algorithmを「AES」、強度を「256bits」に変更。クライアントによっては対応していないので、128bitsに下げたり3DESに変えたりして下さい。

他は初期設定で大丈夫なはず。

Phase2設定

続いてPhase2の設定。

f:id:honeniq:20131113102123p:plain

IPSecのサマリー画面で「Show 0 Phase-2 entries」と書いてある隣「+」をクリックします。

f:id:honeniq:20131113102618p:plain

空っぽのPhase2設定が展開されるので、「+」をクリック。

f:id:honeniq:20131113103432p:plain

  • Excryption algorythmsは、AES 256bitsを除いてチェックを外す。
  • Hash algorithmsも、SHA1のみにチェック。

VPN接続用グループ作成

f:id:honeniq:20131113104131p:plain

  • 上部メニューのSystem→User Managerを選択。
  • 「Groups」タブを選択。
  • 右下の「+」ボタンをクリック。

ここからちょっと不自然な画面遷移をしますが、仕様です。

f:id:honeniq:20131113104430p:plain

  • Group nameを入力してSave。

先ほど作成したグループを編集します。

f:id:honeniq:20131113104648p:plain

  • 新しく作成したグループの横の「e」ボタンをクリック。

Assigned Privillegesの欄が増えています。

f:id:honeniq:20131113104851p:plain

  • Assigned Privillegesの横の「+」ボタンをクリック。

f:id:honeniq:20131113105117p:plain

  • System Privillegesは「User - VPN - IPsec xauth DialIn」のみ選択。
  • Save!

ひとつ前の画面に戻ります。

f:id:honeniq:20131113105607p:plain

  • Assigned Privillegesに先ほど追加した権限が反映されているのを確認してSave。

ユーザー作成

最後にVPN接続用のユーザーを作成します。

f:id:honeniq:20131113105901p:plain

  • 「Users」タブを選択。
  • 右下の「+」ボタンをクリック。

f:id:honeniq:20131113110458p:plain

  • Username、Passwordを入力。
  • Group Membershipsは、先ほど作成したグループのメンバーになるように設定。この例の場合はMember Ofの側に「vpnuser」が入るように移動させました。
  • IPsec Pre-Shared KeyにPhase1で設定した共通鍵と同じものを入力。
  • Save!

pfSense側の設定は以上です。長かった!

iPhoneの設定

iPhoneにVPNの設定を追加します。

設定アプリから「VPN」→「VPN構成を追加...」を選択。

f:id:honeniq:20131113113807p:plain

  • 「IPSec」タブを選択。
  • 「説明」は何でもOK。ここの設定がiPhoneのVPN設定一覧に出てくる名前になります。
  • 「サーバ」にpfSenseのIPアドレスを入力。もちろんグローバルじゃないと繋がりません。
  • 「アカウント」にVPN接続用に作成したユーザー名を入力。
  • 「グループ名」にPhase1で設定した識別子を入力。
  • 「シークレット」にPhase1で設定した共通鍵を入力。
  • 保存!

接続テスト

設定が全てできたので、接続テストをしてみます。 自宅でWi-Fiに繋いでいたりするとうまくいかないので、テスト時はWi-Fiを切って3G/LTE回線経由で。

f:id:honeniq:20131113114613p:plain

VPN設定画面のスイッチをタップすると、接続を始めてくれます。パスワードは保存できないので、毎回入力する必要あり。

VPN接続が成功すると、iPhoneの画面上部「VPN」の表示が出ます。

f:id:honeniq:20131113115538p:plain

テストとして、ブラウザからpfSenseのLAN側アドレスにアクセスしてみた状態。pfSenseのオレオレ証明書が警戒されてエラーが出ていますが、とりあえずアクセスには成功している模様。

というわけで、繋がるようになりました。 iOS7のiPhone5でしか動作確認をしていないので、他の機種の場合は設定を調整してやる必要がありそうです。

追記: Androidからの接続

そういえばAndroidも持っていたのを忘れていました。

結局Xpedia Tipoを買いました

設定アプリから無線とネットワーク「その他」→「VPN」→「VPNネットワークの追加」。

f:id:honeniq:20131113213049p:plain

  • 「名前」何でも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に切り替えたことを書いてなかった。