Windos Azureの地域間VPN接続を試してみましたが、仮想ネットワークの動きを知らないと構築しにくいと思いますので、とりあえずメモしてきます。構成の設定を順に紹介していきます。
始めの調査ということで、今回は失敗した記事となっています。。。
1.始めに考えた構成
Windows AzureのEast AsiaにGatewayを作成し、West USからはlinuxのopenswanを使用したVPN GatewayでEast AsiaのGatewayにIPSecでVPN接続する構成です。
2.仮想ネットワーク設定
East Asia側の仮想ネットワークはvn-asiaとして作成ました。West US側の仮想ネットワークはvn-usとして作成しています。
また、vn-asiaとvn-usをサイト間接続するため、East Asia側ゲートウェイの先にあるWest USのネットワークを、ローカルネットワークとしてvn-local-usとして作成しています。
East Asia側のネットワーク設定
East Asia側のネットワーク設定では、ゲートウェイ作成と、仮想ネットワークアドレス空間の設定、ローカルネットワークの指定を行います。ここで指定するローカルネットワークはWest US側のアドレス空間です。(構築後の設定を見ていますので、VPNとしては繋がってます)
West US側のネットワーク設定
West US側のネットワーク設定では、仮想ネットワークアドレス空間の設定だけを行っています。
3.West US側VPN Gatewayの作成
VPN Gateway として利用するUbuntuのlinux仮想マシンをWest USの仮想ネットワークに作成します。
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の仮想マシンに向けます。
4.通信確認
地域間でVPNを使用した通信に問題がないか確認してみます。今回はそれぞれの地域に確認用サーバのlinuxを作成してみました。East AsiaのUbuntuは以下のようになります。あと、標準でlinuxのファイアウォール設定がされているので注意してください。簡単に外す場合は、以下のコマンドです。
$sudo iptables –F
West USの確認用サーバのlinuxは以下のような感じです。East Asiaの確認用サーバと同じようにファイアウォール設定に注意してください。あと、VPN経由で通信するために、スタティックルートの設定をします。簡単に設定する場合は以下のコマンドです。
$sudo route add -net 10.20.0.0/16 gw 10.10.0.4
West USのVPN GatewayからEast Asiaのサーバにアクセス
まずは、West USのlinuxのVPN GatewayからEast Asiaの確認用linuxにPingしてみます。
Pingの応答があるのですが念のためにEast Asiaの確認用linuxにPingのicmpパケットが届いているかtcpdumpで確認してみます。
問題なさそうですね。行きと帰りでパケットが通っているようです。
West USとEast Asia間のlinuxで通信確認
確認してみましたが通信できませんでした。以下はtcpdumpした内容です。
West USからEast Asiaに通信
West USのlinux
West USのVPN Gateway
East Asiaのlinux
East AsiaからWest USに通信
East Asiaのlinuxのtcpdump
West USのVPN Gatewayのtcpdump
West USのlinuxのtcpdump
5.まとめ
West USのネットワークでは、設定したアドレスの範囲外アドレスがIPヘッダの送信元か送信先に含まれると、仮想ネットワーク内でドロップしています。ここからは推測ですが、これは仮想ネットワークで管理されていないIPアドレスが含まれているため、ホストの仮想スイッチでドロップしているのではないかと考えています。Hyper-Vのネットワーク仮想化と同じ動きだとも考えています。
East Asiaではローカルネットワークとして登録しているのでGatewayを通って、West USのVPN Gatewayまではパケットが流れていますね。AzureでNew-NetVirtualizationCustomerRoutのようなPSコマンドが欲しいです。
動きがわかれば、対策は立てられるので、次回は地域間で通信できる構成を紹介する予定です。
あと、Hyper-Vのネットワーク仮想化に関しては、後藤さんのnvgreの資料を参考にしました!ありがとうございます。