2013ケンタテクブロ最近はAzure関係の記事です。Azureのデータセンター間で双方向に通信することができませんでしたが、今回は双方向通信を実現する構成の紹介です。Asiaにそれぞれ仮想ネットワークのゲートウェイを作成しています。それぞれのデータセンタからは、Linux(Ubuntu)で相互に各地域のゲートウェイにVPNトンネルを接続しています。前回の調査結果からこのような構成になりました。現段階ではVPNトンネルを2つ用意して確認しています。Linux(Ubuntu)のVPNゲートウェイで、相手のネットワークからの通信をNAT(MASQUERADE)しています。vn-asia-vmからvn-us-vmへの通信は、vn-us-gwでNATされています。それぞれの仮想ネットワークに存在するゲートウェイに接続するローカルネットも作成します。これらのローカルネットは仮想ネットワークのネットワークアドレスと同じ範囲になってしまいますが問題ありません。3.各地域の仮想マシン始めに作成した仮想マシンは構成と同じように4台作成しました。vn-us-vm)です。Traversal用のUDPポートの設定を行います。4500ポートを、vn-asia-vmに向けています。Traversal用のUDPポートの設定を行います。4500ポートを、vn-us-vmに向けています。Asiaの仮想ネットワークです。仮想マシンがネットワーク上にいることが確認できます。USの仮想ネットワークです。仮想マシンがネットワーク上にいることが確認できます。各地域の通信確認用仮想マシンの設定は特に説明しませんが、通信確認する際は下記のコマンドでファイアウォールのルールを削除しておくと便利です。Swanのインストール。openswanIPSecの設定です。ipsec.conは変更箇所だけ編集して、最後の行にincludeの行を挿入します。pfs=noIPSecの鍵設定をします。Azureの仮想ネットワークのダッシュボードから取得します。restart5.1.2.ファイアウォールとNATの設定VPNの設定が終わったら、ファイアウォールとNATの設定をします。今回使用しているLinuxはUbuntuですので、Ubuntuのお作法にのっとってiptablesの設定をします。https://help.ubuntu.com/lts/serverguide/firewall.htmlまずは、ファイアウォール設定から。SSH用のポート設定は重要です。この設定をしないとLinux(Ubuntu)にアクセスできなくなります。4500つぎにNAT(MASQUERADE)の設定です。VPNの設定でOSのIPフォワード設定をしましたが、ここではファイアウォール側のフォワード設定を行います。/etc/default/ufwDEFAULT_FORWARD_POLICY="ACCEPT"次にNATの設定を行います。以下の設定をファイルのトップに書いてください。processedCOMMITさいごにファイアウォールを有効にします。Swanのインストール。openswanIPSecの設定です。ipsec.conは変更箇所だけ編集して、最後の行にincludeの行を挿入します。azure-asiaauthby=secretauto=starttype=tunnelleft=10.10.0.4leftsubnet=10.10.0.0/16leftnexthop=%defaultrouteright=207.46.137.55rightsubnet=10.20.0.0/16ike=aes128-sha1-modp1024esp=aes128-sha1pfs=noIPSecの鍵設定をします。Azureの仮想ネットワークのダッシュボードから取得します。restart5.2.2.ファイアウォールとNATの設定VPNの設定が終わったら、ファイアウォールとNATの設定をします。ファイアウォール設定から。SSH用のポート設定は重要です。この設定をしないとLinux(Ubuntu)にアクセスできなくなります。4500つぎにNAT(MASQUERADE)の設定です。VPNの設定でOSのIPフォワード設定をしましたが、ここではファイアウォール側のフォワード設定を行います。/etc/default/ufwDEFAULT_FORWARD_POLICY="ACCEPT"次にNATの設定を行います。以下の設定をファイルのトップに書いてください。processedCOMMITさいごにファイアウォールを有効にします。Azureの地域に分かれる仮想ネットワーク間で通信してみるPingで確認してみます。USのvn-us-vmに通信します。Asiaのvn-asia-vmに通信します。問題なく通信できますね。Azureの機能では、地域間VPNの機能がありませんが、自分でVPNを動かせばVPNトンネルを使った通信ができることがわかりました。Directoryとかを拠点間で動かしてみたいですね。Azureの地域間VPN接続を試してみましたが、仮想ネットワークの動きを知らないと構築しにくいと思いますので、とりあえずメモしてきます。構成の設定を順に紹介していきます。始めの調査ということで、今回は失敗した記事となっています。AsiaのGatewayにIPSecでVPN接続する構成です。Asia側の仮想ネットワークはvn-asiaとして作成ました。US側の仮想ネットワークはvn-usとして作成しています。USのネットワークを、ローカルネットワークとしてvn-local-usとして作成しています。Asia側のネットワーク設定では、ゲートウェイ作成と、仮想ネットワークアドレス空間の設定、ローカルネットワークの指定を行います。US側のアドレス空間です。US側のネットワーク設定では、仮想ネットワークアドレス空間の設定だけを行っています。USの仮想ネットワークに作成します。linuxにsshでログインした後に、openswanのインストールと設定をします。以下のコマンドでインストールおよび設定、サービスの起動を行います。viコマンドの下に書かれている行は変更内容です。Asiaのゲートウェイアドレスとキーを設定します。Traversal用のUDPポートの設定を行います。Gatewayのlinuxの仮想マシンに向けます。地域間でVPNを使用した通信に問題がないか確認してみます。今回はそれぞれの地域に確認用サーバのlinuxを作成してみました。AsiaのUbuntuは以下のようになります。あと、標準でlinuxのファイアウォール設定がされているので注意してください。簡単に外す場合は、以下のコマンドです。USの確認用サーバのlinuxは以下のような感じです。Asiaの確認用サーバと同じようにファイアウォール設定に注意してください。あと、VPN経由で通信するために、スタティックルートの設定をします。簡単に設定する場合は以下のコマンドです。Asiaの確認用linuxにPingしてみます。Asiaの確認用linuxにPingのicmpパケットが届いているかtcpdumpで確認してみます。行きと帰りでパケットが通っているようです。確認してみましたが通信できませんでした。以下はtcpdumpした内容です。USのネットワークでは、設定したアドレスの範囲外アドレスがIPヘッダの送信元か送信先に含まれると、仮想ネットワーク内でドロップしています。ここからは推測ですが、これは仮想ネットワークで管理されていないIPアドレスが含まれているため、ホストの仮想スイッチでドロップしているのではないかと考えています。Hyper-Vのネットワーク仮想化と同じ動きだとも考えています。Gatewayまではパケットが流れていますね。AzureでNew-NetVirtualizationCustomerRoutのようなPSコマンドが欲しいです。動きがわかれば、対策は立てられるので、次回は地域間で通信できる構成を紹介する予定です。あと、Hyper-Vのネットワーク仮想化に関しては、後藤さんのnvgreの資料を参考にしました!ありがとうございます。