Linux から京大の IKEv2 VPN に接続する方法
家の PC から研究室内のネットワークに接続しようとしたときに色々とハマったので、メモです。 (筆者はネットワークにそこまで詳しくはないので多少マズい設定があるかもしれませんのでおかしかったらコメントなどで教えてください。)
京大の VPN に関して
京大の学生、教職員であれば基本的に KUINS-VPN が使用できます。 接続方法には、 OpenVPN や PPTP などもありますが、利用可能な場合には IKEv2 を使用することが推奨されています。
また、 VLAN 固定接続の機能を使用することで研究室内のネットワークに接続することもできます。 (要申請)
設定手順
この手順は Ubuntu 18.04 で動作確認しています。
この記事に出てくるコマンドは全て root 権が必要なので必要に応じて sudo
をつけてください。
ソフトウェアのインストール
VPN クライアントには strongSwan を使用します。また、追加で libcharon-extra-plugins をインストールする必要があります。 以下のコマンドでインストールできます。
apt-get install strongswan libcharon-extra-plugins
設定ファイルの編集
ファイルに設定を書き込みます。
まず、 /etc/ipsec.conf
に以下の行を追加します。
conn Config-Name
auto=add
right=<VPN host>
rightid=<VPN host>
rightsubnet=10.0.0.0/8
rightauth=never
left=%defaultroute
leftsourceip=%config
leftid=ECS-ID[@VLAN ID]
leftauth=eap-mschapv2
eap_identity=%identity
keyexchange=ikev2
type=tunnel
ike=aes128-sha256-modp3072
これらの行を追加することで VPN 構成を追加することができます。
Config-Name
の所には任意の接続名を設定することができます。
また、 VPN Host
には VPN サーバーのホスト名を指定してください。 (VLAN 固定接続をしない場合には ikev2.kuins.kyoto-u.ac.jp
です。
VLAN 固定接続をしたい場合には http://www.iimc.kyoto-u.ac.jp/ja/services/kuins/vpn/ikev2.html
の下の方にある表を参照してください。)
ECS-ID[@VLAN ID]
の部分には自分の ECS-ID (a では始まるID) を指定してください。 (VLAN 固定接続をする際にはそのあとに @VLAN-ID を追加してください。)
この設定ファイルの詳細に関しては https://wiki.strongswan.org/projects/strongswan/wiki/ConnSection を参照してください。
次に、 /etc/ipsec.secrets
に以下の行を追加します。
ECS-ID[@VLAN-ID] : EAP "PASSWORD"
このファイルは接続時に使用される認証情報を書き込むファイルです。 詳細は https://wiki.strongswan.org/projects/strongswan/wiki/IpsecSecrets を参照してください。
サーバー証明書の設定
最後に、ルートCA 証明書を ダウンロードします。京大ではセコムトラストの証明書が使われているようなので、 https://www.secomtrust.net/service/ninsyo/cer/scrootca2.txt
を /etc/ipsec.d/cacerts/secom.pem
として保存してください。 (ディレクトリが正しければファイル名は任意)
接続方法
上記の設定が完了したら、まず strongSwan の再起動が必要です。
systemctl restart strongswan
設定ファイルで自動的に接続するように設定されている場合には strongSwan が起動した時点で自動的に接続されるはずです。 (/etc/ipsec.conf
の設定の、 auto=add
の行を auto=start
に変更すれば良いはずです。)
そうでない場合には
ipsec up Config-Name
で接続
ipsec down Config-Name
で切断できます。
設定までにハマったポイント
ここからは筆者がハマったポイントなので単純に VPN 接続の設定を知りたい人は読み飛ばしていいかもしれません。
ルートCA証明書がない とエラーになる
上記の手順の中の サーバー証明書の設定 の手順をしていなかったのが原因でした。
接続時に以下のようなエラーが出ていました。
certificate status is not available
no issuer certificate found for "(CA の詳細)"
no trusted RSA public key found for '(VPN サーバーの Host)'
EAP_IDENTITY がサポートされていない というエラーになる
libcharon-extra-plugins
がインストールされていない場合は接続時に以下のようなエラーが出るようです。
server requested EAP_IDENTITY (id 0x00), sending 'ECS-ID'
EAP_IDENTITY not supported, sending EAP_NAK
generating IKE_AUTH request 2 [ EAP/RES/NAK ]
sending packet: from (VPN クライアントの IP)[4500] to (VPN サーバーの IP)[4500] (80 bytes)
received packet: from (VPN サーバーの IP)[4500] to (VPN クライアントの IP)[4500] (80 bytes)
parsed IKE_AUTH response 2 [ EAP/FAIL ]
received EAP_FAILURE, EAP authentication failed
generating INFORMATIONAL request 3 [ N(AUTH_FAILED) ]
暗号化の方法が合わない
/etc/ipsec.conf
に ike=aes128-sha256-modp3072
の行を追加せずに接続を試みると、以下のようなエラーが /var/log/syslog
に出ます。
peer didn't accept DH group ECP_256, it requested MODP_3072