皆様こんにちは。
朝一で白シャツにコーヒーをこぼした日のモチベーションの上げ方を模索しています。
×3です。
今回はCentOS 7.7にstrongSwanを入れて、VPN GatewayにP2S接続するところまでやってみます。
目次
CentOS側の準備
今回使うもの
・CentOS 7.7
・strongswan-5.7.2-1.el7.x86_64
まずはstrongSwanのインストールです。
CentOSのデフォルトのリポジトリにはstrongSwanは入っていないようです。
epelリポジトリを追加するか、個別にrpmをダウンロードしましょう。
今回は個別にダウンロードしてきたrpmを使ってインストールしていきます。
というわけで、インストール実施。
# yum install strongswan-5.7.2-1.el7.x86_64.rpm
~長いので省略~
Installed:
strongswan.x86_64 0:5.7.2-1.el7
Dependency Installed:
trousers.x86_64 0:0.3.14-2.el7
Complete!
依存パッケージのtrousersも一緒にインストールされました。
これでインストールは終了です。
次にVPN Gatewayとつなげるために必要な証明書や鍵を作成していきます。
キーと証明書の生成
# strongswan pki --gen --outform pem > kakecaKey.pem # strongswan pki --self --in kakecaKey.pem --dn "CN=VPN CA" --ca --outform pem > kakecaCert.pem
CA証明書をbase64形式で印刷します。先の手順で必要となるので控えておきましょう。
# openssl x509 -in kakecaCert.pem -outform der | base64 -w0 ; echo
ユーザー証明書の生成
# export PASSWORD="hogehoge" # export USERNAME="kakeclient" # strongswan pki --gen --outform pem > "${USERNAME}Key.pem" # strongswan pki --pub --in "${USERNAME}Key.pem" | strongswan pki --issue --cacert kakecaCert.pem --cakey kakecaKey.pem --dn "CN=${USERNAME}" --san "${USERNAME}" --flag clientAuth --outform pem > "${USERNAME}Cert.pem"
パスワード、ユーザー名はお好みのものを入れてください。
ユーザー証明書が入っているp12バンドルを生成します。
# openssl pkcs12 -in "${USERNAME}Cert.pem" -inkey "${USERNAME}Key.pem" -certfile kakecaCert.pem -export -out "${USERNAME}.p12" -password "pass:${PASSWORD}"
生成したものを見てみます。
# ll
total 1464
-rw-r--r--. 1 root root 1066 Jul 9 02:44 kakecaCert.pem
-rw-r--r--. 1 root root 1675 Jul 9 02:43 kakecaKey.pem
-rw-r--r--. 1 root root 1090 Jul 9 02:46 kakeclientCert.pem
-rw-r--r--. 1 root root 1675 Jul 9 02:45 kakeclientKey.pem
-rw-r--r--. 1 root root 3157 Jul 9 02:46 kakeclient.p12
ファイルが生成されているのが確認できたら、VPN Gateway側の操作に移りましょう。
VPN Gatewayの設定
今回はVPN Gatewayの作成手順は割愛します。
作成については通常通り作成していただければ問題ないです。
ただ1点、SKUはVpnGw1 以上にしましょう。
というのもLinuxのStorongSwanクライアントでは、接続にIKEv2トンネルのみ使用しており、IKEv2トンネルが使用できるのが上記VpnGw1以上のskuとなっています。
それでは既に作成済みのVPN Gatewayのリソース画面を開き、ブレードよりユーザーVPN構成をクリックします。

VPN Gatewayを作成した後に、リソースを全く触っていなければ、
「ポイント対サイトが構成されていません」と出るかと思います。
その下にある「今すぐ構成」より設定をしていきます。
アドレスプールには、VPNクライアントに割り当てられるIPアドレス範囲を指定します。
トンネルの種類はIKEv2を選択しましょう。
認証はAzure証明書を選択します。
ルート証明書は、名前のところにCA証明書(今回だとkakeCert.pem)、
公開証明書データに控えていたbase64形式のCA証明書を転記します。
この時公開証明書は改行とかは入れずに、1行になるように注意してください。

入力が終わったら左上の「保存」をクリックし、保存が終わったら2つとなりの「VPNクライアントのダウンロード」をクリックします。
ダウンロードを解凍してみると、「WindowsX86」「WindowsAmd64」「Generic」の3つのフォルダがあります。
今回使用するのは「Generic」のみです。
Genericフォルダから、「VpnServerRoot.cer」を仮想マシンの/etc/strongswan/ipsec.d/cacerts/に転送します。
次にp12ファイルを/etc/strongswan/ipsec.d/private/にコピーします。
次に/etc/strongswan/ipsec.confファイルに以下のサンプルをもとに設定を追加します。
conn azure
keyexchange=ikev2
type=tunnel
leftfirewall=yes
left=%any
leftauth=eap-tls
leftid=%p12バンドルファイルの拡張子より前の値
right= GenericフォルダのVpnSettings.xmlのVpnServerの値
rightid=%GenericフォルダのVpnSettings.xmlのVpnServerの値
rightsubnet=0.0.0.0/0
leftsourceip=%config
auto=add
筆者の環境だとこんな感じになります。
conn azure
keyexchange=ikev2
type=tunnel
leftfirewall=yes
left=%any
leftauth=eap-tls
leftid=%kakeclient
right=azuregateway-省略.vpn.azure.com
rightid=%azuregateway-省略.vpn.azure.com
rightsubnet=0.0.0.0/0
leftsourceip=%config
auto=add
また、/etc/strongswan/ipsec.secretsファイルに以下を追記します。
: P12 kakeclient.p12 'hogehoge'
P12の後は、自身で作成したp12バンドルファイルのファイル名、その後ろにp12ファイルを作成するときに使用したパスワードをシングルコーテーションで囲んで記載します。
さて、ここまで来たら準備は完了です。
VPN接続を実施してみましょう。
いざ接続
# systemctl start strongswan
# strongswan up azure
ながながとログが出ますが、最後に、
「connection ‘azure’ established successfully」と出たら接続完了です。
「Installing new virtual IP」に新しく割り当てられたIPアドレスが表示されます。
ログで成功と出ているので問題ないはずですが、一応Portalからも確認してみます。
再度VPN Gatewayのリソース画面のブレードより、ユーザーVPN構成をクリックします。
先ほど設定をした時と違い、一番下に割り当て済みIPアドレスという項目が追加されています。
ここに 「Installing new virtual IP」 に表示されていたIPアドレスと同じアドレスが表示されるはずです。

これでLinuxから行うP2S接続の環境は完成です。
もしほかのマシンでもP2S接続したいとなった場合は、同じ手順を実施すれば可能となります。
めんどくさいな~と思った場合は、作成した証明書とかp12ファイルをそのままほかの仮想マシンに移してしまっても可能です。
まとめとあとがき
今回はLinuxからAzureのVPN GatewayにP2S接続するまでを記載しました。
公式ドキュメントの手順ではUbuntuの手順しかなく、CentOSだと手順通りにいかないことが多くて困りました。
そろそろブログのネタが尽きてきました。
次はもっと別のサービスを責めてみようかと思います。
参考サイト
ネイティブ Azure 証明書認証を使用した VNet へのポイント対サイト VPN 接続の構成:Azure portal
https://docs.microsoft.com/ja-jp/azure/vpn-gateway/vpn-gateway-howto-point-to-site-resource-manager-portal
ネイティブ Azure 証明書認証の P2S 構成のための VPN クライアント構成ファイルを作成およびインストールする
https://docs.microsoft.com/ja-jp/azure/vpn-gateway/point-to-site-vpn-client-configuration-azure-cert#linux-strongswan-gui