LoginSignup
3
1

More than 1 year has passed since last update.

Azure内の通信をダブルNATする

Last updated at Posted at 2022-12-29

駆け出しアーキテクトのやまぱんです。
今回は Azure 内の通信をダブルNATする環境を作ってみました。

今回やりたいこと

VM-A から VM-B への通信にダブル NAT かましたい。

  • ダブル NAT:SNATとDNATをかますこと

具体的には下記のようなイメージです。

  • A からみた場合、B の宛先 IP ではなく別にの IP にアドレスに向けて通信してる
    なおかつ
  • B からみた場合、A の送信元 IP ではなく別の IP アドレスから通信が来てる
    ように見せる

ちなみに (ダブル) NATしない場合は同一 Vnet 内だったらそのままのプライベートIPで通信できますし、Vnet 違いであれば VNetピアリング(仮想ネットワーク ピアリング)で通信することができます。

・仮想ネットワーク ピアリング
https://learn.microsoft.com/ja-jp/azure/virtual-network/virtual-network-peering-overview

なんでそんなことしたいか

プライベートネットワーク内でも、複数企業や組織が利用している場合があると思います。
その組織間でお互いにNWの構成(IPアドレス、5タプル情報)をセキュリティの観点等からお互いに見せたくないといったそういったニーズにこたえられます。

なにを使うか

これを Azure 上で実現するには、"Azure Private Link サービス" と ロードバランサー を使います。

Azure 上の通信をダブル NATするには Azure Private Link サービスを使う

今回作った構成

まず先にポンチ絵です。
今回はこのような環境を作って VM-A(10.0.0.4) から VM-B(10.2.0.5) への通信にダブル NAT をかましたいと思います。
image.png

環境を作る

参考までに簡単に手順を簡単に紹介します。全てのリソースは東日本リージョンを指定して作っています。
実際に作る際は下記も参考にして進めてください。
https://learn.microsoft.com/ja-jp/azure/private-link/private-link-service-overview

ポンチ絵と実際のリソース名の紐づけ

VM-A:VM-Win2019 (10.0.0.4)
VM-B:VM-Win2019-2 (10.0.0.5)
Vnet-A:RG-normal-vnet (10.0.0.0/16)
 Subnet-A:default (10.0.0.0/24)
Vnet-B:temp-vnet (10.2.0.0/16)
 Subnet-B:default (10.2.0.0/16)
LB:LB-temp
Private link service:PrivateLink-01

Vnet-B 側

1.LB を作る

内部ロードバランサーを作ります。

2.VM-B を作る
3.VM-B をLB の配下におき、NATの設定をする

今回は下記のような設定値で実施しました。

  • フロントエンド IP
    image.png
  • バックエンドプール
    image.png
  • インバウンド NAT
    image.png
    RDPするのでフロントエンドもバックエンドもポート3389 で RDP という名前のインバウンド規則を設定しました。
4.プライベートリンクサービスを作る

Azure Portal からプライベートリンクサービスを検索して作成します。
image.png
image.png

設定値は今回は下記で作成しました。
image.png
作成後 NAT IP が 10.2.0.6 が割り当てられました。

Vnet-A 側

続いて Vnet-A 側!

1.先ほど環境を作ったプライベートリンクサービスのエイリアスをコピーしておきます。

(Dynamic(動的)で 割り当てられた NAT IP もこちらから確認できます。)
image.png

2.プライベートエンドポイントを Vnet-A に作成!

image.png

image.png

作成途中で先ほどコピーしたエイリアスを貼り付けウィザードに従って作成します。
今回の設定値は以下です。
image.png

これで環境作成は完了!

試す

VM-A から VM-B へRDP して確認してみたいと思います。
具体的には VM-A から Private EndPoint に対して RDP をして、VM-Bにつながる想定です。
なお、今回 Vnet-A と Vnet-B の間の Vnet ピアリング は 構成していないので VM-A から VM-B のアドレス 10.2.0.5 に向けて RDP してもVnetが違うのでつながりません。

IPアドレス

  • VM-A:VM-Win2019 (10.0.0.4)
  • Private EndPoint (10.0.0.6)
  • VM-B:VM-Win2019-2 (10.2.0.5)
  • プライベートリンクサービス(10.2.0.6)

DNAT の確認

image.png

VM-A から RDP をした窓を見ると Private EndPoint の 10.0.0.6 となっているが実際のプライベート IP は 10.2.0.5で、DNAT が効いてることが分かります。
→ VM-A からみると 10.0.0.6 (Private EndPoint のIP) が VM-B のアドレス(宛先)と見えるが実際は違ってる。

SNAT の確認

SNAT の確認には VM-B のパケットキャプチャを取ってみたいと思います。
Azure VM のパケットキャプチャの取り方は下記をご参照ください。

https://qiita.com/aktsmm/items/6d77b8af1eb10f28cab5
とって、wireshark でみた結果が下記です。

image.png

でてるIPアドレスは VM-B 自身の 10.2.0.5 とプライベートリンクサービスの NAT IP が 10.2.0.6 のみで SNAT も効いてることが分かります。
→ VM-B からみると 10.2.0.6 (プライベートリンクサービスの NAT IP) が VM-A のアドレス(送信元)と見えるが実際は違ってる。

おわり

今回はすべて東日本にリソースを作りましたが、リージョンが違っても可能です。
またオンプレミスからの通信でも可能です。
下記公式 Docs 抜粋。

Private Link サービスには、任意のパブリック リージョン内の承認されたプライベート エンドポイントからアクセスできます。 プライベート エンドポイントは、同じ仮想ネットワークとリージョン間でピアリングされた仮想ネットワークから到達できます。 プライベート エンドポイントには、プライベート VPN または ExpressRoute 接続を使用して、グローバルピアリングされた仮想ネットワーク、およびオンプレミスから到達できます。
https://learn.microsoft.com/ja-jp/azure/private-link/private-link-service-overview#details

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