前回「Windows Azureの地域間VPNを試してみた(始めの調査編)」では、Windows Azureのデータセンター間で双方向に通信することができませんでしたが、今回は双方向通信を実現する構成の紹介です。(2013年10月7日のWindows Azure機能で構築してます)
1.構成
Windows AzureのEast Asia、West Asiaにそれぞれ仮想ネットワークのゲートウェイを作成しています。それぞれのデータセンタからは、Linux(Ubuntu)で相互に各地域のゲートウェイにVPNトンネルを接続しています。
前回の調査結果からこのような構成になりました。現段階ではVPNトンネルを2つ用意して確認しています。
また、Linux(Ubuntu)のVPNゲートウェイで、相手のネットワークからの通信をNAT(MASQUERADE)しています。例えば、vn-asia-vmからvn-us-vmへの通信は、vn-us-gwでNATされています。
2.作成した仮想ネットワーク
仮想ネットワークは構成の通り、East AsiaとWest USの2つです。
それぞれの仮想ネットワークに存在するゲートウェイに接続するローカルネットも作成します。これらのローカルネットは仮想ネットワークのネットワークアドレスと同じ範囲になってしまいますが問題ありません。
3.各地域の仮想マシン
始めに作成した仮想マシンは構成と同じように4台作成しました。この4台はLinux(Ubuntu)のVPN2台(vn-asia-ge, vn-us-gw)と、通信テスト用の仮想マシン2台(vn-sia-vm, vn-us-vm)です。
East Asiaのゲートウェイ
エンドポイントでは、IPSec NAT Traversal用のUDPポートの設定を行います。ISAKMPのUDP 500ポートと、IPSec NAT TraversalのUDP 4500ポートを、vn-asia-vmに向けています。
East Asiaの通信テスト用仮想マシン
West USのゲートウェイ
エンドポイントでは、IPSec NAT Traversal用のUDPポートの設定を行います。ISAKMPのUDP 500ポートと、IPSec NAT TraversalのUDP 4500ポートを、vn-us-vmに向けています。
West USの通信テスト用仮想マシン
4.各地域の仮想ネットワーク
East Asiaの仮想ネットワークです。仮想マシンがネットワーク上にいることが確認できます。作成したゲートウェイはStatic Routingです。
West USの仮想ネットワークです。仮想マシンがネットワーク上にいることが確認できます。作成したゲートウェイはStatic Routingです。
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に通信します。
通信できますね。次はWest USのvn-us-vmからEast Asiaのvn-asia-vmに通信します。
問題なく通信できますね。
7.最後に
Windows Azureの機能では、地域間VPNの機能がありませんが、自分でVPNを動かせばVPNトンネルを使った通信ができることがわかりました。次は、SQL ServerとかActive Directoryとかを拠点間で動かしてみたいですね。