10/06/2013

Windows Azureの地域間VPNを試してみた(始めの調査編)

 

Windos Azureの地域間VPN接続を試してみましたが、仮想ネットワークの動きを知らないと構築しにくいと思いますので、とりあえずメモしてきます。構成の設定を順に紹介していきます。

始めの調査ということで、今回は失敗した記事となっています。。。

 

1.始めに考えた構成

Windows AzureのEast AsiaにGatewayを作成し、West USからはlinuxのopenswanを使用したVPN GatewayでEast AsiaのGatewayにIPSecでVPN接続する構成です。

azurevpn

 

2.仮想ネットワーク設定


East Asia側の仮想ネットワークはvn-asiaとして作成ました。West US側の仮想ネットワークはvn-usとして作成しています。

nv-networks

また、vn-asiaとvn-usをサイト間接続するため、East Asia側ゲートウェイの先にあるWest USのネットワークを、ローカルネットワークとしてvn-local-usとして作成しています。

nv-localnetworks

 

East Asia側のネットワーク設定

East Asia側のネットワーク設定では、ゲートウェイ作成と、仮想ネットワークアドレス空間の設定、ローカルネットワークの指定を行います。ここで指定するローカルネットワークはWest US側のアドレス空間です。(構築後の設定を見ていますので、VPNとしては繋がってます)

nv-asia-dashboard 


nv-asia-config

 

West US側のネットワーク設定

West US側のネットワーク設定では、仮想ネットワークアドレス空間の設定だけを行っています。

nv-us-dashboard
nv-us-config

 

3.West US側VPN Gatewayの作成

VPN Gateway として利用するUbuntuのlinux仮想マシンをWest USの仮想ネットワークに作成します。

nv-us-vm-gw-os

nv-us-vm-gw

linuxにsshでログインした後に、openswanのインストールと設定をします。以下のコマンドでインストールおよび設定、サービスの起動を行います。viコマンドの下に書かれている行は変更内容です。/etc/ipec.secretsの設定には、East Asiaのゲートウェイアドレスとキーを設定します。

 

$sudo apt-get install openswan
$sudo vi /etc/ipsec.conf
config setup
      protostack=netkey
      nat_traversal=yes
      virtual_private=%v4:10.0.0.0/16
      oe=off
include /etc/ipsec.d/*.conf

$sudo vi /etc/ipsec.d/azure-asia.conf
conn azureasia
   authby=secret
   auto=start
   type=tunnel
   left=10.10.0.4
   leftsubnet=10.10.0.0/16
   leftnexthop=%defaultroute
   right=207.46.137.55
   rightsubnet=10.20.0.0/16
   ike=aes128-sha1-modp1024
   esp=aes128-sha1
   pfs=no

$sudo vi /etc/ipec.secrets
10.10.0.4 207.46.137.55 : PSK "krOurXxXX6XxXXX7xxxwnXXXXXaLkXXX"

$sudo vi /etc/sysctl.conf
net.ipv4.ip_forward=1
$sudo sysctl -p /etc/sysctl.conf
$sudo service ipsec restart

 

エンドポイントでは、IPSec NAT Traversal用のUDPポートの設定を行います。ISAKMPのUDP 500ポートと、IPSec NAT TraversalのUDP 4500ポートを、VPN Gatewayのlinuxの仮想マシンに向けます。

 

nv-us-vpngw-endpoint

 

4.通信確認


地域間でVPNを使用した通信に問題がないか確認してみます。今回はそれぞれの地域に確認用サーバのlinuxを作成してみました。East AsiaのUbuntuは以下のようになります。あと、標準でlinuxのファイアウォール設定がされているので注意してください。簡単に外す場合は、以下のコマンドです。

$sudo iptables –F

nv-asia-vm-srv

 

West USの確認用サーバのlinuxは以下のような感じです。East Asiaの確認用サーバと同じようにファイアウォール設定に注意してください。あと、VPN経由で通信するために、スタティックルートの設定をします。簡単に設定する場合は以下のコマンドです。

 

$sudo route add -net 10.20.0.0/16 gw 10.10.0.4

 

nv-us-vm-srv

 

 

West USのVPN GatewayからEast Asiaのサーバにアクセス

まずは、West USのlinuxのVPN GatewayからEast Asiaの確認用linuxにPingしてみます。

nv-asia-vpngw

  Pingの応答があるのですが念のためにEast Asiaの確認用linuxにPingのicmpパケットが届いているかtcpdumpで確認してみます。

問題なさそうですね。行きと帰りでパケットが通っているようです。

  nv-srv-asia-tcmdump

 

West USとEast Asia間のlinuxで通信確認

確認してみましたが通信できませんでした。以下はtcpdumpした内容です。

West USからEast Asiaに通信

West USのlinux

ua00

West USのVPN Gateway

ua01

East Asiaのlinux

ua03

 

East AsiaからWest USに通信

East Asiaのlinuxのtcpdump

au00

West USのVPN Gatewayのtcpdump

au01

West USのlinuxのtcpdump

au02

 

5.まとめ

West USのネットワークでは、設定したアドレスの範囲外アドレスがIPヘッダの送信元か送信先に含まれると、仮想ネットワーク内でドロップしています。ここからは推測ですが、これは仮想ネットワークで管理されていないIPアドレスが含まれているため、ホストの仮想スイッチでドロップしているのではないかと考えています。Hyper-Vのネットワーク仮想化と同じ動きだとも考えています。

East Asiaではローカルネットワークとして登録しているのでGatewayを通って、West USのVPN Gatewayまではパケットが流れていますね。AzureでNew-NetVirtualizationCustomerRoutのようなPSコマンドが欲しいです。

動きがわかれば、対策は立てられるので、次回は地域間で通信できる構成を紹介する予定です。

あと、Hyper-Vのネットワーク仮想化に関しては、後藤さんのnvgreの資料を参考にしました!ありがとうございます。