はじめに
Azure 仮想マシン や、仮想ネットワーク を使っている際に、いくつかのシチュエーションで、Azure 外のネットワークと通信させたい場合が出てきます。
以下のようなシチュエーションの際に、今回紹介する方法を使う事で、NAT 変換 を使わずに 相互ルーティングを可能にすることができます。
シチュエーション 1
Azure の既定では、S2S や P2S、ExpressRoute などの手段が用意されていますが、仮想ネットワークゲートウェイ をデプロイする必要があり、NAT 変換が不要で相互に通信が可能ですが、それなりにコストが掛かります。
代わりに、Azure VM を使って VPN ルーター(仮想アプライアンス)を構築して安価に済ます方法があります。この場合は NAT 変換 を使う方法が簡単で、一般的です。
しかし、外部から Azure VM への片方向の通信となってしまいます。
シチュエーション 2
Azure 上 の VM として Hyper-V を構築して、さらに Hyper-V 上に VM (Nested VM) を構成することが可能です。このとき、Nested VM から Azure VM への通信は、NAT 変換を使う方法が簡単で、一般的です。
しかし、Nested VM から Azure VM への片方向の通信となってしまいます。
この場合は、Hyper-V ホスト に RAS サービスを構成し、仮想アプライアンス と見立てて、ルーティングを構成すると、回避策にできる見込みがあります(まだ未検証)
シチュエーション 3
Azure VM として、Active Directory のドメインコントローラー を構築済です。
このたび、VPN ルーター(仮想アプライアンス)経由で 上記のドメインに、物理の追加ドメインコントローラーを構築したいです。
ドメインコントローラー間の接続において、NAT 変換はサポートされていません。困りました。
1. 構成イメージ
-
NAT が構成されている場合は、VPN クライアントから、VM への通信は可能だが、VM から VPN クライアントへのルーティングはできない。
-
本記事の構成を採用すると、VM から VPN クライアントへのルーティングが可能になります。
この記事では、仮想アプライアンス として OpenVPN と RAS (SSTP) を想定しています。
手順に使用した画面キャプチャは OpenVPN を想定したものになっていますが、他の方法で VPN を構築した場合でも、同様に扱えます。
本題とは逸れますが、Azure VM を使った VPN ルーターでは、IPsec では受付出来ない様子です。そのため、SSL-VPN を採用している仕組みのみが利用可能です。
私が検証してみて、本構成と組み合わせて実績があるのは、OpenVPN と、Windows Server の RAS 役割サービス を使った SSTP 接続です。
参考:OpenVPN
OpenVPN の構築については、以下の記事を参考にしてください。
本記事の内容と組み合わせて、検証済みです。
参考:SSTP
SSTP の構築については、以下の記事を参考にしてください。
本記事の内容と組み合わせて、検証済みです。
2. NAT 無しで構成するために必要な事
NAT を使えば、これらの構成は不要で通信できるので楽なのですが、片方向です。
相互に通信させるために、直接ルーティングを行うためには、色々とテクニックを駆使する必要があります。
- アドレス空間の定義 (2-1 章)
- NIC の IP 転送 (2-2 章)
- ルーティングの構成 (2-3 章)
この記事では、既に NAT 変換を使って 外部から Azure VM への通信が確立できている状況から、NAT 無しの相互通信へ移行するための手順を案内していきます。
2-1.アドレス空間の定義(推奨)
この設定は、オプションですが、やっておくことをお勧めします。
単一の仮想ネットワーク の構成であれば、この章の手順を行わなくても問題ありません。
しかし、ピアリング や V2V、S2S、P2S、ExpressRoute、Azure Firewall などの Azure の機能で、別のネットワークと接続された構成との相互接続の場合に支障をきたします。
本記事で紹介する NAT 無しの相互ルーティングの方法と、上記の Azure による外部ネットワーク接続方式間を 相互にルーティングさせるためには、本章の構成が必要です。
※アドレス空間が定義されていないと、仮想ネットワークゲートウェイ によって、パケットが破棄されてしまう事が理由です。
忘れたころにハマる事になるので、本章の構成は、やるものだと思っておけば万全です。
-
仮想アプライアンス の 概要 ページを開き、割り当てられている 仮想ネットワーク を開きます。
-
アドレス空間 を選択します。※この時点で、緑枠のアドレス空間は1つだけです。
-
アドレス空間 を追加して、保存 を押します。
下図の場合は 192.168.240.0/24 という 仮想アプライアンス(VPN ルーター)の先にあるネットワークアドレスを追加しています。
- 以下の通知が表示されれば OK です。
- 以下のようにアドレス空間が定義されていれば OK です。
2-2. IP 転送(必須)
-
仮想アプライアンス の左ペインから、ネットワーク設定 を選び、赤枠の ネットワークインターフェイスの名前 を選択します。
-
ネットワークインターフェイス の左ペインから、IP構成 を選択し、IP 転送を有効にする にチェックを入れて、適用 を押します。
- 以下の通知が表示されれば OK です。
NIC の IP 転送を有効にしていない場合、自分自身(NIC に割り当てられている IP アドレス)以外の宛先パケットは、破棄 されてしまいます。それ以外の宛先であっても VM へ転送するために、この設定が必要です。
2-3. ルーティングの構成(必須)
仮想アプライアンス(VPN ルーター)の先にあるネットワーク宛の ゲートウェイを定義する必要があります。いわゆるルーティングの設定です。
Azure では、ルーティングを構成する場合は、あらかじめ ルートテーブル というリソースを作成しておき、そこに ルート(経路)設定 を構成する必要があります。
上記で作成した ルートテーブルを 仮想ネットワーク の サブネット に割り当てることで、ルーティングが機能します。
2-3-1. ルートテーブル の作成
- Azure Portal の検索窓に ルート と入力して ルート テーブル を選択します。
-
作成 ボタンを押します。
-
基本 タブでは、任意のリソースグループとリージョン(仮想アプライアンスと揃えると良い)を選択し、任意の リソース名 を命名し、確認および作成 を押します。
- 以下の確認画面で 作成 を押します。
- デプロイが完了したら リソースに移動 を押します。
2-3-2. ルートの追加
- ルートテーブルが作成されると、以下の画面のようになります。なお、この時点では 緑下線 部分は、結果なし となっており、何も構成されていないことが判ります。
続いて、ルーティング を構成するために ルート を押します。
-
追加 を押します。
- 以下の番号を参考に、値を設定していきます。最後に 追加 を押します。
№ | 項目名 | 設定値 | 備考 |
---|---|---|---|
① | ルート名 | 任意の名称 | |
② | 宛先の種類 | "IP アドレス" | ネットワークアドレスを宛先として指定するため |
③ | 宛先 IP アドレス/CIDR 範囲 | [仮想アプライアンスの先にある ネットワークアドレス帯] | 私の環境では VPN のアドレス帯である 192.168.240.0/24 を指定しています。 |
④ | ネクストホップの種類 | "仮想アプライアンス" | 仮想アプライアンス経由で外部に接続するルートを示すために必要な設定です。 |
⑤ | ネクストホップアドレス | [仮想アプライアンスの IP アドレス] | 宛先 IP 帯へ接続するためのゲートウェイを指定する必要があります。 私の環境では 10.10.10.8 を指定しています。 |
2-3-3. ルートテーブルの割り当て
構成された ルートテーブル を、サブネットに割り当てることで、ルーティング が機能するようになります。
-
仮想アプライアンス に割り当てられている 仮想ネットワーク を開きます。
- 左ペインのメニューから サブネット を選択します。
-
ルートテーブル を割り当てる サブネット を選択します。
この時点では 緑枠 の箇所が空欄になっています。
-
ルートテーブル 欄で、先ほど作成した ルートテーブルの名前を選択して 保存 を押します。
- 以下の通知が表示されれば OK です。
- 以下の緑枠のように ルートテーブル 欄に割り当てられたことが確認できます。
最終的に、ルートテーブルは、以下のような設定内容になります。
さらに、以下のように 有効なルート を見る事で、実際に動作しているルーティングテーブルの内容を確認できます。ネットワークインターフェイス では、起動中の VM の NIC を選ぶ必要があります。VM が起動していないと 有効なルート は参照できません。
3. 仮想アプライアンス に構成されていた NAT の無効化
前章までの手順で、Azure 仮想ネットワークと、VM 内に構成された外部のネットワークとの間でルーティングが行われるように構成できました。
最後に、仮想アプライアンス 内で構成されている NAT を無効化します。
こうすることで、Azure 仮想ネットワーク上の VM と、仮想アプライアンス を経由した 外部のホストとの間で、ルーティングが行われて、相互に通信をすることができます。
以下の記事に OpenVPN の NAT を無効化する手順を公開してありますので、参考にしてください。
さいごに
実は、2-2 章(IP 転送)と、2-3 章(ルートテーブル)は、Azure の 仮想ネットワーク の基本として、習うことができるネタで 良く知られた話なのですが、2-1 章(アドレス空間)に サブネットで扱う以外のアドレス帯をあえて設定する方法は、裏技的なネタで、あまり聞かない話だと思います。
この点、参考にしていただき、仮想アプライアンス と、Azure ネットワーク間を 相互接続させる際の参考にしていただければ 幸いです。