2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

strongSwanを利用したAzure VPN GatewayへのP2S接続

Last updated at Posted at 2019-02-23

背景

Azureで構築した仮想マシンにAWSのEC2インスタンスからアクセスしたい、だけどAzure,AWS環境の仮想マシンにグローバルIPを割り当てることは社内規定上禁止されているのでクラウドプラットフォーム間での通信はできない。。。といった事態に遭遇しました。
VPN Gateway間でS2S接続できれば一番良いのですが、今回は諸事情によりstrongSwanを利用しAzure VPN GatewayへP2S接続することとなったので、その方法について記載したいと思います。

前提

  • EC2インスタンスはRedhat7.x系を利用

※P2S接続についてはこちらを参照

構成

ToBe.png

事前準備

  1. こちらの手順に沿ってAzure VPN Gatewayを構成
  2. こちらAzure Portal を使用してルールを生成するを参考にVPN クライアントをダウンロードしておく

設定

以下EC2インスタンスでの作業

  1. strongSwanインストール

    sudo yum install -y strongswan
    
  2. IPSec設定

    1. 事前準備の2番で取得したVPNクライアントを解凍
    2. VpnServerRoot.cerをGenericディレクトリから**/etc/strongswan/ipsec.d/cacerts/**へコピー
    3. 事前準備の1番で作成したクライアント証明書をclient.p12として保存
    4. client.p12を**/etc/ipsec.d/private/**へコピー
    5. Genericディレクトリに保存されているVpnSettings.xmlファイルを開きVPNServerに設定されている値をコピー
    6. /etc/strongswan/ipsec.confに設定追加
    conn azure
            keyexchange=ikev2
            type=tunnel
            leftfirewall=yes
            left=%any
            leftauth=eap-tls
            leftid=%P2SChildCert
            right=<VPNServerの値を記載>
            rightid=%<VPNServerの値を記載>
            rightsubnet=0.0.0.0/0
            leftsourceip=%config
            auto=add
    
  3. /etc/strongswan/ipsec.secretsに設定追加

     # ipsec.secrets - strongSwan IPsec secrets file
     : P12 client.p12 '<クライアント証明書のパスワード>'
    

接続確認

connection azure established successfullyと表示されればOK

sudo systemctl start strongswan
sudo strongswan up azure

接続確認スクリプトの作成

意図せずVPN接続が切れていることがあったので、接続確認スクリプトを作成

作ったもの:

  • VPNStartUp.sh
  • StartUp.func
  • CheckStatus.func
  • Logs.func

実行方法

mkdir logs
nohup ./VPNStartUp.sh &
VPNStartUp.sh
#!/bin/bash

shelldir=`dirname $BASH_SOURCE`
timestamp=`date +%FT%H-%M-%S`
serverIP="<Azure上の仮想マシンIPアドレスを記載>"
logFile="./logs/log_${timestamp}"

#Change Current Directory
cd ${shelldir}

source ./CheckStatus.func
source ./StartUp.func
source ./Logs.func

startUpVPN

checkStatus
StartUp.func
function startUpVPN(){

   #Start Strongswan
   systemctl restart strongswan

   if [ $? -ne 0 ]; then
      log "Failed to Start Strongswan."
      exit 1
   fi

   sleep 80

   #Up Azure VPN Session
   strongswan up azure

   if [ $? -ne 0 ]; then
      log "Failed to Establish Connection."
      exit 1
   fi
}
CheckStatus.func
#!/bin/bash

function checkStatus(){

   while true
     do
        sleep 30
   
        ping ${serverIP} -c 5 > /dev/null

        if [ $? -ne 0 ]; then
           log "Target server is not up"
           log "Disconnecting session"

           strongswan down azure

           startUpVPN
        else
           log "Target Server is Up"
        fi
      done
}
Logs.func
function log() {
   logtimestamp=`date +%FT%H-%M-%S`

   echo "${logtimestamp} $*" >> ${logFile}
}
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?