3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Azure 仮想アプライアンス 利用時に NAT 無しで 外部のネットワークと 相互にルーティングさせる方法

Last updated at Posted at 2024-03-23

はじめに

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. 構成イメージ

image.png

  • 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. 仮想アプライアンス概要 ページを開き、割り当てられている 仮想ネットワーク を開きます。
    image.png
     
  2. アドレス空間 を選択します。※この時点で、緑枠のアドレス空間は1つだけです。
    image.png
     
  3. アドレス空間 を追加して、保存 を押します。
    下図の場合は 192.168.240.0/24 という 仮想アプライアンス(VPN ルーター)の先にあるネットワークアドレスを追加しています。
    image.png
     
  4. 以下の通知が表示されれば OK です。
    image.png
     
  5. 以下のようにアドレス空間が定義されていれば OK です。
    image.png

2-2. IP 転送(必須)

  1. 仮想アプライアンス の左ペインから、ネットワーク設定 を選び、赤枠の ネットワークインターフェイスの名前 を選択します。
    image.png
     
  2. ネットワークインターフェイス の左ペインから、IP構成 を選択し、IP 転送を有効にする にチェックを入れて、適用 を押します。
    image.png
     
  3. 以下の通知が表示されれば OK です。
    image.png

NIC の IP 転送を有効にしていない場合、自分自身(NIC に割り当てられている IP アドレス)以外の宛先パケットは、破棄 されてしまいます。それ以外の宛先であっても VM へ転送するために、この設定が必要です。

2-3. ルーティングの構成(必須)

仮想アプライアンス(VPN ルーター)の先にあるネットワーク宛の ゲートウェイを定義する必要があります。いわゆるルーティングの設定です。

Azure では、ルーティングを構成する場合は、あらかじめ ルートテーブル というリソースを作成しておき、そこに ルート(経路)設定 を構成する必要があります。

上記で作成した ルートテーブルを 仮想ネットワーク の サブネット に割り当てることで、ルーティングが機能します。

2-3-1. ルートテーブル の作成

  1. Azure Portal の検索窓に ルート と入力して ルート テーブル を選択します。
    image.png
     
  2. 作成 ボタンを押します。
    image.png
     
  3. 基本 タブでは、任意のリソースグループとリージョン(仮想アプライアンスと揃えると良い)を選択し、任意の リソース名 を命名し、確認および作成 を押します。
    image.png
     
  4. 以下の確認画面で 作成 を押します。
    image.png
     
  5. デプロイが完了したら リソースに移動 を押します。
    image.png

2-3-2. ルートの追加

  1. ルートテーブルが作成されると、以下の画面のようになります。なお、この時点では 緑下線 部分は、結果なし となっており、何も構成されていないことが判ります。
    続いて、ルーティング を構成するために ルート を押します。
    image.png
     
  2. 追加 を押します。
    image.png
     
  3. 以下の番号を参考に、値を設定していきます。最後に 追加 を押します。
項目名 設定値 備考
ルート名 任意の名称
宛先の種類 "IP アドレス" ネットワークアドレスを宛先として指定するため
宛先 IP アドレス/CIDR 範囲 [仮想アプライアンスの先にある ネットワークアドレス帯] 私の環境では VPN のアドレス帯である 192.168.240.0/24 を指定しています。
ネクストホップの種類 "仮想アプライアンス" 仮想アプライアンス経由で外部に接続するルートを示すために必要な設定です。
ネクストホップアドレス [仮想アプライアンスの IP アドレス] 宛先 IP 帯へ接続するためのゲートウェイを指定する必要があります。
私の環境では 10.10.10.8 を指定しています。

image.png

4.以下の通知が表示されれば OK です。
image.png

5.以下のように ルート が追加されれば OK です。
image.png

2-3-3. ルートテーブルの割り当て

構成された ルートテーブル を、サブネットに割り当てることで、ルーティング が機能するようになります。

  1. 仮想アプライアンス に割り当てられている 仮想ネットワーク を開きます。
    image.png
     
  2. 左ペインのメニューから サブネット を選択します。
    image.png
     
  3. ルートテーブル を割り当てる サブネット を選択します。
    この時点では 緑枠 の箇所が空欄になっています。
    image.png
     
  4. ルートテーブル 欄で、先ほど作成した ルートテーブルの名前を選択して 保存 を押します。
    image.png
     
  5. 以下の通知が表示されれば OK です。
    image.png
     
  6. 以下の緑枠のように ルートテーブル 欄に割り当てられたことが確認できます。
    image.png

最終的に、ルートテーブルは、以下のような設定内容になります。
image.png

さらに、以下のように 有効なルート を見る事で、実際に動作しているルーティングテーブルの内容を確認できます。ネットワークインターフェイス では、起動中の VM の NIC を選ぶ必要があります。VM が起動していないと 有効なルート は参照できません。
image.png

3. 仮想アプライアンス に構成されていた NAT の無効化

前章までの手順で、Azure 仮想ネットワークと、VM 内に構成された外部のネットワークとの間でルーティングが行われるように構成できました。

最後に、仮想アプライアンス 内で構成されている NAT を無効化します。

こうすることで、Azure 仮想ネットワーク上の VM と、仮想アプライアンス を経由した 外部のホストとの間で、ルーティングが行われて、相互に通信をすることができます。

以下の記事に OpenVPN の NAT を無効化する手順を公開してありますので、参考にしてください。

さいごに

実は、2-2 章(IP 転送)と、2-3 章(ルートテーブル)は、Azure の 仮想ネットワーク の基本として、習うことができるネタで 良く知られた話なのですが、2-1 章(アドレス空間)に サブネットで扱う以外のアドレス帯をあえて設定する方法は、裏技的なネタで、あまり聞かない話だと思います。

この点、参考にしていただき、仮想アプライアンス と、Azure ネットワーク間を 相互接続させる際の参考にしていただければ 幸いです。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?