Azure

strongSwanを使ってP2S接続をする記事~CentOS編~

皆様こんにちは。
朝一で白シャツにコーヒーをこぼした日のモチベーションの上げ方を模索しています。
×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


Azure VMの自動起動停止を行う前のページ

祝日判定を使った自動起動について:Azure Automation次のページ

関連記事

  1. Azure

    Managed InstanceへのDB移行・アプリとの連携時の注意Point

    そがひろです。今回は、OnPremiseからAzure Manage…

  2. Azure

    Azure AD Connectの構築トラブルメモ

    今回はAzure AD Connect(AADC)を構築した際に色々…

  3. Azure

    AzureMonitorで作成できるアラートの種類と制限

    AzureMonitorのアラートの種類と制限について…

  4. Azure

    Runbookで管理タスクを自動化する。

    1.はじめに初めまして、Cloud Engineerの曽我で…

  5. Azure

    Azure Site Recoveryの課金について

    少々わかりにくい、Azure Site Recovery の…

  6. Azure

    Azure VMの自動起動停止を行う

    こんにちは、三醍醐です。今回は、Azure VMの自動起動停…

関連記事

  1. Application Gateway

    L7 負荷分散 Azure Application Gateway について:2…
  2. Application Gateway

    L7負荷分散 Azure Application Gateway について:1回…
  3. Azure

    Azure 資格試験の更新(2020年版)AZ-203編
  4. Application Gateway

    L7 負荷分散 Azure Application Gateway について:3…
  5. Azure

    AzureのDMSでデータを移行してみる記事 ~MySQL編~
PAGE TOP