「IKEv2 EAP-TLS リモート接続型 IPSec VPN を VyOS 1.2 に構築し macOS/iOS を接続する」ためのメモ

設定すべきこと、確認すべきこと、理解すべきことが多岐にわたるため、後日詳細をまとめる。実際に以下の設定を試行錯誤すると接続することができる。firewall 設定や細かい設定は省略。

VyOS は予期できたソフトウェアルータであるが、リモート接続型 VPN は L2TP, PPTP と選択肢が少ない。 しかしながら拠点間接続 VPN では IKE の設定が用意されており、技術的にはリモート接続型 VPN でも IKE が用いることができる様に思える。
VyOS では strongSwan を用いているため strongSwan の設定を行えば IKE による接続も可能であるが、VyOS は起動時に /etc の設定ファイルを自動生成する。 従って VyOS で用意されている枠組みで設定を終える必要性がある。
幸いにして VyOS では /etc/ipsec.conf と /etc/ipsec.secrets の外部読み込みをサポートする。
set vpn ipsec include-ipsec-conf /config/ipsec-custom.conf
set vpn ipsec include-ipsec-secrets /config/ipsec-custom.secret
しかしながらこれだけではサービスを起動してくれないので、最低限の情報を適宜追加しておかねばならない。
set vpn l2tp remote-access authentication radius server **** key ****
set vpn l2tp remote-access authentication mode radius
set vpn l2tp remote-access client-ip-pool start 192.168.100.1
set vpn l2tp remote-access client-ip-pool stop 192.168.100.100

set vpn l2tp remote-access ipsec-settings authentication mode x509
set vpn l2tp remote-access ipsec-settings authentication x509 server-key-file /config/KEY.der
set vpn l2tp remote-access ipsec-settings authentication x509 server-cert-file /config/CRT.der
set vpn l2tp remote-access ipsec-settings authentication x509 ca-cert-file /config/CA-CRT.der

set vpn ipsec ipsec-interfaces interface eth0
L2TP の設定としていくつかの設定を行っておかないとエラーが出る。radius を参照しているが、local のどちらかを指定できればいいらしく、実際には使っていないに等しい設定である。貸し出す ip は適宜指定する。鍵の設定は適宜書き換えねばならないが、/etc/ipsec.d に入れると VyOS 設定と干渉するので /config に適切なアクセス権を設定して配置すること。 ここまでやって さくらVPS上のUbuntuにstrongswanでIKEv2 VPNサーバー(証明書認証)を構築するstrongSwanでLet’s Encrypt証明書を使ったIKEv2 VPNサーバーを作る を参考にしながら /config/ipsec-custom.conf や /config/ipsec-custom.secret を編集する。 EAP-TLS の場合は前者の内容をそのまま設定するだけで動く様になる。
macOS/iOS の設定は Apple Configurator 2.app で設定ファイルを作って行うことにする。その理由は「サーバ証明書 Common Name」「IKE 暗号パラメータ」「ESP 暗号パラメータ」がシステム環境設定などでは選べないためである。前述のサイトの設定例
ike=aes256-sha1-modp1024,aes128-sha1-modp1024,3des-sha1-modp1024!
esp=aes256-sha256,aes256-sha1,3des-sha1!
では「IKE SA パラメータ」に AES-256、SHA1-96、2 を指定する。「子SAパラメータ」はデフォルトの AES-256、SHA2-256、14 を指定する。この設定はシステム環境設定のデフォルト設定らしく、プロファイルなら暗号強度を上げることが可能になる。 Common Name はプロファイルでは二種類指定が可能で、設定例として紹介したページで言われていた内容と異なって、認証局とサーバとで揃える必要性はない。 IKEv2 Cipher Suites - strongSwan wikiVPN.IKEv2.IKESecurityAssociationParameters - Device Management Profile - Apple Developer 参照。 失敗する場合は macOS では log show --predicate 'senderImagePath endswith "nesessionmanager"' として、VyOS では show log vpn all | tail -100 としてログを確認して対策を考える。

macOS 側で確認できるエラーには三段階ある。まず「IKE 暗号パラメータ」が間違っていると通信が始まらずに「不明なエラー」と出てすぐに落ちる。VyOS 側では "no matching proposal found, trying alternative config" などと出る。
クライアント認証の設定があっていない場合、直ちに「ユーザが認証できない」と出て終了する。VyOS 側では "no matching peer config found" などと出ている様に思われる。
しばらく試行し10秒程度で「サーバが応答しない」と出て落ちる場合は ESA の設定がおかしいと考えられる。実際に VyOS 側では "MAC verification failed", "verifying encrypted payload integrity failed", "could not decrypt payloads", "integrity check failed" といったエラーが記録される。

VyOS は大変優れたルータである様に思うが、VPN の設定はなかなか難しいところがあり、脆弱性が明らかな PPTP や低速な L2TP の設定の方が容易である。 昨今は拠点へのアクセスを求める機運が社会的に高まったことも相まって VPN の需要も高まっており、攻撃される機会も増えている。より安全で高速な IKE が使用できるならばその方が望ましい。OpenVPN と違い、システムに組み込まれている点も嬉しい点である。 この覚書が VyOS とともに IKEv2 を用いた IPSec VPN を導入する一助となれば幸いである。

N. EAP-TLS の導入は敷居が高いが、一度導入してしまえば様々な箇所で利用することができる。例えば nginxとOpenSSLでクライアント認証を行う といった様に HTTP でより強固な認証を用いることができ、安全に社内システムにアクセスする手段を増やすことができる。 理想としては、クライアントの暗号鍵は管理者ではなくユーザが管理し管理者は署名要求の受諾の可否を検討すべきものなので、macOS Server ならば Open Directory ユーザの Keychain に追加するという芸当が可能であると考えられる。

慣れないとわかりづらいが必要な証明書類は となっている。C はクライアント、S はサーバに入れる。ルート認証局の証明書はなくても良いが、検証を行う場合はいわゆるチェーン証明書にした方が早くなることが多いかもしれない。失効証明書はオプション。 クライアント証明は中間認証局を使う。サーバ証明はルート認証局でも中間認証局でも良いようだ。この辺りは運用方針次第だろう。 大企業を除いて中間認証局を運用することはないので、ほとんどの場合は自己署名である。ルート認証局を作り、中間認証局を作り、サーバ証明、クライアント証明を実施する。 自己署名は信頼性情報を付け加える必要性があるが、macOS/iOSではプロファイルで信頼性を設定するので特に問題がない。
VyOS の VPN で使用されている設定ファイルは次の通り。 このうち VyOS が初期化しているファイルは以下の通り。 他にもあるように思えるが主だったものはこの程度である。逆に言えばこれ以外はそのままと言えるので、/config/ipsec-custom.conf, /config/ipsec-custom.secret をうまく組み合わせればそのまま自由に設定ができる。
技術考󠄁 > IKEv2 EAP-TLS リモート接続型 IPSec VPN を VyOS 1.2 に構築し macOS/iOS を接続する
Copyright© R01[2019]. All Rights Reserved.