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.confike=aes128-sha256-modp3072 の行を追加せずに接続を試みると、以下のようなエラーが /var/log/syslog に出ます。

peer didn't accept DH group ECP_256, it requested MODP_3072

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です