Linux ベースのソフトウェア VPN デバイスから Microsoft Azure Virtual Network への接続
このポストは、5 月 22 日に投稿した Connecting to a Microsoft Azure Virtual Network via a Linux-based Software VPN device の翻訳です。
概要
この記事では、ソフトウェア VPN デバイスを使用してローカルのオフィスやサイトから Microsoft Azure Virtual Network に接続する方法について説明します。ソフトウェア VPN デバイスは、クラウドへの迅速な実装が必要な、“dev/test” ワークフローを構築している場合やプロトタイプ モードで動作している場合に、特に有効です。実際、Microsoft Azure Virtual Network チーム内部でも、Azure プラットフォームは水面下で日々進化しているため、この技術を自動化して本番環境でのコード テスト (TiP) に使用しています。今回の記事では、OpenSwan (英語) VPN を Linux で構成して Microsoft Azure でホストされている Virtual Network に接続する方法を紹介します。
Linux
Linux の場合、Microsoft Azure 内部に作成した Virtual Machines を使用して、他の Linux 仮想マシンをホストしている Virtual Network に接続します。ここからは、この構成を行う方法について説明します。
まずは、OpenSwan VPN をホストする Virtual Machines を新規作成します。今回は XS サイズのコアを持つ Ubuntu 14.04 プラットフォームのイメージを使用しましたが、任意の Linux イメージが使用可能です。もちろんユーザーの VHD を使用することもできます。
VM 作成後、500 番と 4500 番のポート (いずれも UDP) が開かれていること (英語) を確認してください。これは、IPSec がこれらのポートに依存するためです。ポータルの画面から、パブリック仮想 IP (VIP) と内部 IP をメモします。これらのプロパティは、Virtual Network のローカル サイトを作成する際に使用します。またこのサイトは、その後で新しい Virtual Network に接続します。メモを取ったら、手順を先に進め、ポータルの [NETWORKS] セクションでローカル サイトを新規作成します。 |
ポータルで [NETWORKS] タブ、[LOCAL NETWORKS] セクションの順にクリックして、ローカル ネットワークを追加する手順を開始します。
VPN デバイスの IP としてパブリック IP を追加し、先に進んで、ローカル サイトの IP として内部 IP を指定します。ローカル サイトではサブネットが /32 の単一の IP アドレスを使用できます。実際にはサブネットの範囲を広げることもできますが、その場合は作成した Virtual Machines と同一のテナントに存在していなければ、該当する IP アドレスにルーティングすることはできません。また、一部の外部ネットワーク インターフェイスを Virtual Machines に追加して、範囲が広いサブネットを使用していることを表すこともできます。左隅の [NEW] ボタンをクリックして、新しいローカル ネットワークを追加します。
今回の場合は、サブネットを /24 に指定します。これは、255 個の IP アドレスをこのサブネット内で使用できることを示します。しかし、Azure のセキュリティ モデルによって同一サブネット内の他の Virtual Machines にパケットを届けることが禁止されるため、“local site” をホストしている Virtual Machines の内部 IP アドレス以外は使用できません。なお、同一サブネット内に自身の IP を使用して複数のネットワーク インターフェイスを Virtual Machines に追加すると、IP アドレスの複数使用をシミュレートすることができます。この手順が終了したら、Virtual Network を作成し、チェックボックスをオンにして、さきほど作成したローカル サイトとこの Virtual Network が通信できるように構成されていることを確認します。その後、更新内容を保存します。
これらの手順が終了したら、ポータルで静的ルーティング (IKEv1) ゲートウェイを作成します。ゲートウェイの作成処理中 (数分間を要します) に、OpenSwan VPN サーバーの構成を開始し、Microsoft Azure Virtual Network に接続できるようにします。 |
Linux の VPN の構成
まず、PuTTy などの安全なシェル クライアントを使用し、ユーザーの Linux 仮想マシンに接続します。接続が完了したら、OpenSwan のソフトウェアをインストールし、構成を行います。この作業では、下記のように apt-get コマンド (このコマンドはディストリビューションによって異なります) を使用します。
sudo apt-get install openswan
IPSec トンネルのセキュリティ確保には共有キー シークレットを使用するので、認証メソッドとして X509 認証を使用するかどうかの確認画面が表示された場合は [No] を選択します。インストールが正常に行われた場合は、ローカル パスを確認すると、ipsec という名前のプログラムがインストールされていることが表示されます。これは簡易的なチェックとして使用できます。
which ipsec
/usr/sbin/ipsec
OpenSwan をソース コードからインストールすることもできますが、この場合、Azure プラットフォームのイメージに既定で含まれていないビルド ツールのうち必要なものをすべてインストールする必要があります。
VPN 自体を構成するには、次のファイルを編集する必要があります。
sudo vi /etc/ipsec.conf
ファイルの内容は次のようなものです。
config setup
protostack=netkey
virtual_private=%v4:100.88.124.0/24
oe=off
# Do not set debug options to debug configuration issues!
# plutodebug / klipsdebug = "all", "none" or a combation from below:
# "raw crypt parsing emitting control klips pfkey natt x509 dpd private"
# eg:
# plutodebug="control parsing"
# Again: only enable plutodebug or klipsdebug when asked by a developer
#
# enable to get logs per-peer
# plutoopts="--perpeerlog"
#
# Enable core dumps (might require system changes, like ulimit -C)
# This is required for abrtd to work properly
# Note: incorrect SElinux policies might prevent pluto writing the core
dumpdir=/var/run/pluto/
#
# NAT-TRAVERSAL support, see README.NAT-Traversal
nat_traversal=yes
# exclude networks used on server side by adding %v4:!a.b.c.0/24
# It seems that T-Mobile in the US and Rogers/Fido in Canada are
plutostderrlog=~/swan.log
include /etc/ipsec.d/*.conf
ローカル サイト用に作成したサブネットの部分のみを、上記のとおり、ローカル サイト作成の際に使用した値 (ここでは 100.88.124.0/24) に変更し、構成を変更します。
ローカルの IPSec のログを確認する場合は、plutodebug オプションのコメント アウトを解除します。
これ以降は、接続に応じて設定を変更する必要があります。
conn vpn authby=secret auto=start type=tunnel left=100.88.124.18 leftsubnet=100.88.124.0/24 leftnexthop=%defaultroute right=137.117.136.XXX rightsubnet=192.168.0.0/20 ike=3des-sha1-modp1024,aes128-sha1-modp1024 esp=3des-sha1,aes128-sha1 pfs=no |
強調してある箇所には、ポータルの Virtual Network の画面でメモした 2 つのプロパティ (前出のスクリーン ショットを参照) を入力します。最初のエントリである “right” は作成されたゲートウェイの VIP です。“rightsubnet” は、Virtual Network 内で作成の際に使用される IP アドレス空間です。また、ここでは暗号化の構成を行い、Perfect Forwarding Secrecy (PFS) オプションを無効化する必要があります。構成ファイルの構文は使用している OpenSwan のバージョンにより異なります。正確な構文を参照するには、次のコマンドを実行します。 man ipsec.conf |
終了後は次のコマンドを実行して PSK を実行中の IPSec サービスに読み込み、トンネルが使用可能であるかどうかを確認する前にサービスを再起動します。
- sudo ipsec secrets
- sudo service ipsec restart
- sudo service ipsec status
IPsec running – pluto pid: 63791
pluto pid 63791
1 tunnels up
some eroutes exist
ゲートウェイへのトンネルが使用可能になったら、Azure ポータルの画面が更新され、この状況が反映されます (画面に緑色のリンクが表示されます)。これで、Virtual Machines を Virtual Network にデプロイ (英語) できるようになり、ネットワーク上でのテストを開始できます。
次に示す例は、Linux VM が Virtual Network にデプロイされ、OpenSwan をホストしているマシンのローカル ネットワーク サブネット (100.88.124/24) から Azure Virtual Network (192.168.0.0/20) 内に存在する Virtual Machines (192.168.0.4) へのネットワーク接続が有効になっていることを示しています。
また、Azure ポータルのこの画面では、Virtual Network のインバウンドおよびアウトバウンドのデータ転送量を確認することもできます。