前記事に書いた通り, UbuntuでPPTPを用いて京都大学のVPNシステムKUINS-IIIへの接続に成功した.
しかし, PPTP接続にはセキュリティ上の問題があり, 公式ページではIKEv2による接続が推奨されている.
その一方で, Linuxによる設定方法は示されておらず,今までIKEv2により接続することができなかった.
前回の成功に味をしめていろいろ検索していると,(Linux から京大の IKEv2 VPN に接続する方法)[https://blog.kmconner.net/archives/201]サイトを発見したので,これを参考にしてIKEv2によるVPN接続を試みる.
パッケージのインストール
OSはUbuntu 20.04 LTSを想定していますが, 18.04 LTSでも動作すると思います.
IKEv2はstrongswanと呼ばれるパッケージを用いて設定を行うため,必要なパッケージをパッケージマネージャによりインストールします.
$ sudo apt-get install strongswan libcharon-extra-plugins
接続設定の作成
strongswanをインストールすると,/etc/ipsec.conf
というファイルが作成されているはずなので,そちらに今回接続するVPNの設定を記述する.
$ sudo cat << EOF >> /etc/ipsec.conf
conn KUINS
auto=start
right=<IKEv2サーバー>
rightid=<IKEv2サーバー>
rightsubnet=10.0.0.0/8
rightauth=never
left=%defaultroute
leftsourceip=%config
leftid=<ECS-ID>
leftauth=eap-mschapv2
eap_identity=%identity
keyexchange=ikev2
type=tunnel
ike=aes128-sha256-modp3072
EOF
<IKEv2サーバー>の部分は公式ページ
から確認できる.
KUINS-IIへ接続する場合はikev2.kuins.kyoto-u.ac.jpとすればよい.VLAN固定接続(KUINS-III)の場合は接続するキャンパスのホスト名を選択する. また,leftid=<ECS-ID@vlan番号>
としなければならない.
次に,EAP認証する際のパスワードを/etc/ipsec.secrets
に追記する.
$ sudo cat << EOF >> /etc/ipsec.secrets
ECS-ID : EAP "ECS-IDのパスワードを直打ち"
EOF
サーバー証明書の設定
前述の設定でクライアント認証のための設定は完了した.あとは,サーバーまでのルートを認証するための証明書を設定して置かなければならない.
$ sudo curl https://www.secomtrust.net/service/ninsyo/cer/scrootca2.txt >> /etc/ipsec.d/cacerts/key.pem
$ sudo chmod 600 /etc/ipsec.d/cacerts/key.pem
接続前の前準備
各種設定後,初回接続前に変更内容を反映させる必要がある.
$ sudo ipsec restart # strongswanの再起動
$ sudo ipsec reload # 設定内容を再読込
$ sudo ipsec listcacerts # 設定された証明書を表示
List of X.509 CA Certificates
subject: "C=JP, O=National Institute of Informatics, CN=NII Open Domain CA - G5"
issuer: "C=JP, O=SECOM Trust Systems CO.,LTD., OU=Security Communication RootCA2"
validity: not before Mar 22 15:33:29 2018, ok
not after Mar 22 15:33:29 2028, ok (expires in 2793 days)
serial: 22:b9:b1 ...
flags: CA CRLSign
CRL URIs: http://repository.secomtrust.net/SC-Root2/SCRoot2CRL.crl
OCSP URIs: http://scrootca2.ocsp.secomtrust.net
pathlen: 0
certificatePolicies:
1.2.392.200091.100.901.4
CPS: https://repository.secomtrust.net/SC-Root2/
authkeyId: 0a:85:a9 ...
subjkeyId: 67:3a:3a ...
pubkey: RSA 2048 bits
keyid: 8e:c0:9a ...
subjkey: 67:3a:3a ...
subject: "C=JP, O=SECOM Trust Systems CO.,LTD., OU=Security Communication RootCA2"
issuer: "C=JP, O=SECOM Trust Systems CO.,LTD., OU=Security Communication RootCA2"
validity: not before May 29 14:00:39 2009, ok
not after May 29 14:00:39 2029, ok (expires in 3225 days)
serial: 00
flags: CA CRLSign self-signed
subjkeyId: 0a:85:a9 ...
pubkey: RSA 2048 bits
keyid: 3b:37:c0 ...
subjkey: 0a:85:a9 ...
上記のような表示がされれば準備はOKである.
接続
次のコマンドで接続・切断を行うことができる.
$ sudo ipsec up KUINS # VPNに接続
$ sudo ipsec down KUINS # VPNから切断
感想
公式ページで,「LinuxはiKEv2に対応していない」とお茶を濁す意味がわかった気がする.テキストベースでの設定が多くこの方法を公開すればトラブル対応に追われるのが落ちである.しかしよく考えてみると,KUINS自体がstrongswanで構築されているのでLinuxで接続できないわけがない笑