Cisco 891FJにApple製品で使えるIPsec VPNを作る
おうち891FJのVPNをAppleデバイス用に設定しました。設定終盤に「常時接続ができない」ことに気づいたので放棄しました。悲しみ。
はじめに
OSは以下の通り表記する。ややこしい。
- iOS: AppleのOSの方
- IOS: CiscoのOSの方
CiscoのリモートアクセスVPNの種類
いわゆるPoint to Site VPN。ややこしいことに名前が3種類あり、さらにSite to Site VPNはまた別
- EzVPN(EasyVPN)
- 昔ながらのIPSecのこと。IKEv1でISAKMPとか使う
- さらに拡張EzVPNとレガシーEzVPNがある
- 仮想インターフェースを作るパターンが拡張EzVPN、クリプトマップを使うのがレガシーEzVPN
- 前者はルートベースVPN、後者はポリシーベースVPNと呼ばれているケースもある
- IPSecだがL2TPという言葉は出てこない
- これを使う場合はiOS側でVPNのタイプを
IPsec
にする(Ciscoのロゴが出るやつ)
- FlexVPN
- IPSecでもIKEv2を使うパターン
- EzVPN-NEM から FlexVPN への移行ガイド - Cisco
- iOSから繋がるかは分からない
- AnyConnect VPN
- SSL VPNのこと。TCPの443を使うやつ
- ライセンスが必要で、それなりの額なので個人で使うのは厳しい
- AnyConnect により、CLIを使用したCisco IOSルータヘッドエンドの基本的なSSL VPNの設定 - Cisco
- これを使う場合はiOS側でAnyConnectアプリを入れる
今回は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を選ぶと常時接続の設定値が出てこない。敗北。