10/12/2013

Windows Azureのリージョン間でVPN接続してみた

 

前回「Windows Azureの地域間VPNを試してみた(始めの調査編)」では、Windows Azureのデータセンター間で双方向に通信することができませんでしたが、今回は双方向通信を実現する構成の紹介です。(2013年10月7日のWindows Azure機能で構築してます)

1.構成

Windows AzureのEast Asia、West Asiaにそれぞれ仮想ネットワークのゲートウェイを作成しています。それぞれのデータセンタからは、Linux(Ubuntu)で相互に各地域のゲートウェイにVPNトンネルを接続しています。

network-design01

前回の調査結果からこのような構成になりました。現段階ではVPNトンネルを2つ用意して確認しています。

また、Linux(Ubuntu)のVPNゲートウェイで、相手のネットワークからの通信をNAT(MASQUERADE)しています。例えば、vn-asia-vmからvn-us-vmへの通信は、vn-us-gwでNATされています。

network-design02

 

2.作成した仮想ネットワーク

仮想ネットワークは構成の通り、East AsiaとWest USの2つです。

network

それぞれの仮想ネットワークに存在するゲートウェイに接続するローカルネットも作成します。これらのローカルネットは仮想ネットワークのネットワークアドレスと同じ範囲になってしまいますが問題ありません。

localnetwork

3.各地域の仮想マシン

始めに作成した仮想マシンは構成と同じように4台作成しました。この4台はLinux(Ubuntu)のVPN2台(vn-asia-ge, vn-us-gw)と、通信テスト用の仮想マシン2台(vn-sia-vm, vn-us-vm)です。

vms

East Asiaのゲートウェイ

エンドポイントでは、IPSec NAT Traversal用のUDPポートの設定を行います。ISAKMPのUDP 500ポートと、IPSec NAT TraversalのUDP 4500ポートを、vn-asia-vmに向けています。

vn-asia-gw

East Asiaの通信テスト用仮想マシン

vn-asia-vm

West USのゲートウェイ

エンドポイントでは、IPSec NAT Traversal用のUDPポートの設定を行います。ISAKMPのUDP 500ポートと、IPSec NAT TraversalのUDP 4500ポートを、vn-us-vmに向けています。

vn-us-gw

West USの通信テスト用仮想マシン

vn-us-vm

4.各地域の仮想ネットワーク

East Asiaの仮想ネットワークです。仮想マシンがネットワーク上にいることが確認できます。作成したゲートウェイはStatic Routingです。

vn-asia-dashboard

West USの仮想ネットワークです。仮想マシンがネットワーク上にいることが確認できます。作成したゲートウェイはStatic Routingです。

vn-us-dashboard

5.各地域のLinux(Ubuntu)VPN仮想マシン設定

各地域の通信確認用仮想マシンの設定は特に説明しませんが、通信確認する際は下記のコマンドでファイアウォールのルールを削除しておくと便利です。

$sudo iptables –F

5.1.まずは、East Asia側のVPN仮想マシン

5.1.1.VPNの設定

Open Swanのインストール。

$sudo apt-get install openswan

IPSecの設定です。ipsec.conは変更箇所だけ編集して、最後の行にincludeの行を挿入します。

$sudo vi /etc/ipsec.conf
config setup
      protostack=netkey
      nat_traversal=yes
      virtual_private=%v4:10.20.0.0/16
      oe=off
include /etc/ipsec.d/*.conf

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

IPSecの鍵設定をします。鍵はWindows Azureの仮想ネットワークのダッシュボードから取得します。

$sudo vi /etc/ipec.secrets
10.20.0.4 168.61.64.182 : PSK "krOurXxXX6XxXXX7xxxwnXXXXXaLkXXX"

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

5.1.2.ファイアウォールとNATの設定

VPNの設定が終わったら、ファイアウォールとNATの設定をします。今回使用しているLinuxはUbuntuですので、Ubuntuのお作法にのっとってiptablesの設定をします。

https://help.ubuntu.com/lts/serverguide/firewall.html

まずは、ファイアウォール設定から。SSH用のポート設定は重要です。この設定をしないとLinux(Ubuntu)にアクセスできなくなります。(一回やってしまった)

$sudo ufw allow proto tcp to any port 22
$sudo ufw allow proto udp to any port 500
$sudo ufw allow proto udp to any port 4500

つぎにNAT(MASQUERADE)の設定です。VPNの設定でOSのIPフォワード設定をしましたが、ここではファイアウォール側のフォワード設定を行います。

$sudo vi /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"

次にNATの設定を行います。以下の設定をファイルのトップに書いてください。

$sudo vi /etc/ufw/before.rules

# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]

# Forward traffic from eth1 through eth0.
-A POSTROUTING -s 10.10.0.0/16 -o eth0 -j MASQUERADE

# don't delete the 'COMMIT' line or these nat table rules won't be processed
COMMIT

さいごにファイアウォールを有効にします。

$sudo ufw disable && sudo ufw enable

5.2.次に、West USの設定


5.2.1.VPNの設定


Open Swanのインストール。


$sudo apt-get install openswan


IPSecの設定です。ipsec.conは変更箇所だけ編集して、最後の行にincludeの行を挿入します。


$sudo vi /etc/ipsec.conf
config setup
      protostack=netkey
      nat_traversal=yes
      virtual_private=%v4:10.10.0.0/16
      oe=off
include /etc/ipsec.d/*.conf


$sudo vi /etc/ipsec.d/azure-asia.conf
conn azure-asia
   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


IPSecの鍵設定をします。鍵はWindows Azureの仮想ネットワークのダッシュボードから取得します。


$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


5.2.2.ファイアウォールとNATの設定


VPNの設定が終わったら、ファイアウォールとNATの設定をします。


まずは、ファイアウォール設定から。SSH用のポート設定は重要です。この設定をしないとLinux(Ubuntu)にアクセスできなくなります。


$sudo ufw allow proto tcp to any port 22
$sudo ufw allow proto udp to any port 500
$sudo ufw allow proto udp to any port 4500


つぎにNAT(MASQUERADE)の設定です。VPNの設定でOSのIPフォワード設定をしましたが、ここではファイアウォール側のフォワード設定を行います。


$sudo vi /etc/default/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"


次にNATの設定を行います。以下の設定をファイルのトップに書いてください。


$sudo vi /etc/ufw/before.rules


# nat Table rules
*nat
:POSTROUTING ACCEPT [0:0]


# Forward traffic from eth1 through eth0.
-A POSTROUTING -s 10.20.0.0/16 -o eth0 -j MASQUERADE


# don't delete the 'COMMIT' line or these nat table rules won't be processed
COMMIT


さいごにファイアウォールを有効にします。

$sudo ufw disable && sudo ufw enable

6.Windows Azureの地域に分かれる仮想ネットワーク間で通信してみる


Pingで確認してみます。まずは、East Asiaのvn-asia-vmからWest USのvn-us-vmに通信します。


vn-asia-vm-ping


通信できますね。次はWest USのvn-us-vmからEast Asiaのvn-asia-vmに通信します。


vn-us-vm-ping


問題なく通信できますね。


7.最後に


Windows Azureの機能では、地域間VPNの機能がありませんが、自分でVPNを動かせばVPNトンネルを使った通信ができることがわかりました。次は、SQL ServerとかActive Directoryとかを拠点間で動かしてみたいですね。