おうち891FJのVPNをAppleデバイス用に設定しました。設定終盤に「常時接続ができない」ことに気づいたので放棄しました。悲しみ。

はじめに

OSは以下の通り表記する。ややこしい。

  • iOS: AppleのOSの方
  • IOS: CiscoのOSの方

CiscoのリモートアクセスVPNの種類

いわゆるPoint to Site VPN。ややこしいことに名前が3種類あり、さらにSite to Site VPNはまた別

  1. EzVPN(EasyVPN)
  2. FlexVPN
  3. AnyConnect VPN

今回はEzVPNを使う。

891FJ設定

ドキュメントは以下の通り。各種パラメータはAppleのドキュメントに沿う。

# EzVPNで使う認証と認可の設定。RADIUSなどを使う場合はここらへんが変わる
# authenticationはauthn、authorizationはauthzと略すらしい https://www.cloudflare.com/ja-jp/learning/access-management/authn-vs-authz/
aaa new-model
aaa authentication login EZVPN-AUTHN local
aaa authorization network EZVPN-AUTHZ local

# 認証に使うユーザー。面倒なのでパスワードは平文で保存する。暗号化する場合はsecretにする
username user01 privilege 0 password 0 mDA6M4Jvh9spjXQPK3CUx8v6
#username user01 privilege 0 secret mDA6M4Jvh9spjXQPK3CUx8v6

# クライアントに配るIPアドレス
ip local pool EZVPN-POOL 192.168.30.101 192.168.30.150

# IKE v1(ISAKMP) 周りの設定。ポリシーの数値は優先度らしいが、他にISAKMP使っていなければなんでも良さそう
crypto isakmp policy 10
# 「暗号化アルゴリズム: 3DES、AES-128、またはAES-256。」とあるので固そうなやつ
 encryption aes 256
# 事前共有キーで認証する。証明書ベースの場合はここらへんが変わるはず
 authentication pre-share
# 「Diffie-Hellmanグループ: 事前共有キーおよびハイブリッド認証の場合は、グループ2にする必要があります。」なので2
 group 2
# 「認証アルゴリズム: HMAC-MD5またはHMAC-SHA1。」なのでsha
 hash sha
# 「フェーズ1の鍵更新: 現時点では対応していません。サーバでの鍵更新時間を1時間に設定することをお勧めします。」の通り。単位は秒
 lifetime 3600
exit

# クライアントに配るパラメーター系。Appleデバイス側でこのグループ名を指定する。名前をdefaultにすると既定のグループになる
# 「ユーザ用の認証グループを作成することをおすすめします。」とあるので作る
crypto isakmp client configuration group EZVPN-ISAKMP-CLIENT-GROUP
# 事前共有キー
 key kWAQ2GGNgDyZkH7ksGMcZXhd
# クライアントに使わせるIPアドレスのプール
 pool EZVPN-POOL
# クライアントに使わせるDNSサーバ。アドブロックDNSを使ってる場合はここらへんに指定する
 dns 8.8.8.8 8.8.4.4
# クライアントに使わせるドメイン名。無くてもいい気がする
 domain myhome.test
# クライアントにPFSを使わせる
 pfs
# クライアントにパスワードの保存を許可する。効果あるのかはよく分かっていない
 save-password
# VPN接続時に表示されるバナーメッセージ。何でもいいし無くてもいい。@はただの区切り文字で、メッセージ中に出てこなければ何でもいい
 banner @ Welcome to my VPN! @
exit

# フェーズ1のプロファイル
crypto isakmp profile EZVPN-ISAKMP-PROFILE
# 紐づけるピアの指定(よく分かってない)
 match identity group EZVPN-ISAKMP-CLIENT-GROUP
# 使用する認証と認可
 client authentication list EZVPN-AUTHN
 isakmp authorization list EZVPN-AUTHZ
# クライアントからIPアドレスの要求があったら返す
 client configuration address respond
# 「Dead Peer Detection: 推奨。」とあるので入れる。秒数は適当
 keepalive 30 retry 10
# 使用する仮想インターフェイス。定義は下の方で行う
 virtual-template 10
exit

# トランスフォームセットの定義。IPsecに適用されるプロトコルやら何やらを定義する
crypto ipsec transform-set EZVPN-IPSEC-TS esp-aes 256 esp-sha-hmac 
# 「モード: トンネルモード。」と書いてあるのでそうする
 mode tunnel
exit

# フェーズ2のプロファイル
crypto ipsec profile EZVPN-IPSEC-PROFILE
# トランスフォームセットの紐付け
 set transform-set EZVPN-IPSEC-TS
# 「PFS(Perfect Forward Secrecy): PFSを使用する場合、IKEフェーズ2では、Diffie-HellmanグループをIKEフェーズ1と同じにする必要があります。」なので2
 set pfs group2
exit

# 仮想インターフェイスに紐づくIPアドレスを持つだけのLoopbackインターフェイス
interface loopback 10
 ip address 192.168.30.1 255.255.255.0
exit

# 仮想インターフェイス。Templateとあるように、クライアントが接続する度にインターフェイスが増えていく
interface Virtual-Template 10 type tunnel
# loopbackを作らず直接指定したら動かなかった
 ip unnumbered loopback 10
# 大抵の場合は891FJでNAPTしているはずなので書く。NAPTしてなければ不要
 ip nat inside
# IPv4でトンネルを張る
 tunnel mode ipsec ipv4
# トンネルにフェーズ1/2のプロファイルを紐づける
 tunnel protection ipsec profile EZVPN-IPSEC-PROFILE isakmp-profile EZVPN-ISAKMP-PROFILE
exit

# 既にWAN側INにACLがかかっている場合、UDPの500と4500、ESPを開ける。4500はNAT関連なので891FJがグローバルアドレス持っていれば不要なはず
ip access-list extended v4WanIn
 permit udp any host 192.168.1.10 eq isakmp non500-isakmp
 permit esp any host 192.168.1.10
exit

iPhone設定

Macの場合も大体同じ。VPN構成の追加から以下のように設定する。

  • タイプ: IPsec
  • 説明: Myhome (なんでもいい)
  • サーバ: 891FJのWAN側のIPアドレスかドメイン。フレッツならだいたいDialer1
  • アカウント: 891FJで設定したusernameのユーザー名部分
  • パスワード: 891FJで設定したusernameのパスワード部分
  • グループ名: crypto isakmp client configuration group の後ろ
  • シークレット: crypto isakmp client configuration group の中で指定したkey

なお、iOSのプロファイル経由でVPN設定を行うとVPN常時接続を有効化出来るが、Apple ConfiguratorでIPsecを選ぶと常時接続の設定値が出てこない。敗北。