🧱

Azure Firewall での SNAT/DNAT について

2024/04/12に公開
1

はじめに

Azure Firewall では SNAT/DNAT を構成することが可能となります。利用されるシナリオとしては Private IP <--> Public IP の変換が多いイメージですが、ふと Private IP <--> Private IP での SNAT/DNAT は可能なのか?と思い動作確認をおこないました。その際の内容を共有させていただきます

Azure Firewall の概要については以下URLをご参照ください
Azure Firewall とは

検証内容

今回は Private IP <--> Public IPPrivate IP <--> Private IP の両方のパターンでどのような動きになるか検証を実施しています。具体的には以下の4パターンとなります

  1. Private IP --> Public IP (SNAT)
  2. Public IP --> Private IP (DNAT)
  3. Private IP --> Private IP (SNAT)
  4. private IP --> Private IP (DNAT)

1. Private IP --> Public IP (SNAT)

Azure Firewall では公式 Docs に記載されている通り、パブリック IP アドレスへの全ての送信トラフィックに対して SNAT 機能が提供されます

Azure Firewall は、パブリック IP アドレスへのすべての送信トラフィックに対して SNAT 機能を提供します。

よって、1 の構成を取るために必要となる設定は以下の2つとなります

  • UDR を作成し、デフォルトルートを Azure Firewall に向ける
  • Azure Firewall にてインターネット向けの通信を許可する

構成図

通信のイメージ

手順

手順の詳細は以下の公式 Docs をご参照ください

1-1. UDR を作成し、デフォルトルートを Azure Firewall に向ける

1-1-1. UDRの作成


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

1-1-3. サブネットへルートテーブルを関連付ける

1-1-4. 仮想マシンにて「有効なルート」を確認する

1-2. Azure Firewall にてインターネット向けの通信を許可する

1-2-1. ネットワーク規則の作成

Spoke1 --> Internet に対するHTTP/HTTPS(80,443)通信を許可するルールを作成する

1-2-2. 疎通確認

Spoke1VMにログインし、以下コマンドを実行する
( Azure Firewall のパブリック IP が表示されることを確認)

[cloudadmin@spoke1-centos-01 ~]$ curl inet-ip.info
4.216.27.102

※本環境の Azure Firewall のパブリック IP は以下の通り

2. Public IP --> Private IP (DNAT)

公式 Docs に記載されている通り、サブネットへのインバウンド インターネット トラフィックを変換し、フィルター処理するように Azure Firewall 宛先ネットワーク アドレス変換 (DNAT) ポリシーを構成することが可能です。なお、変換されたトラフィックを許可するルールは暗黙的に追加されるため、個別のネットワークルールを作成する必要はありません

よって、2 の構成を取るために必要となる設定は以下の1つとなります

  • UDR を作成し、デフォルトルートを Azure Firewall に向ける
  • Azure Firewall にて DNAT ルールを構成する

構成図

通信のイメージ

手順

手順の詳細は以下の公式 Docs をご参照ください

また、ルール処理ロジック(どのルールから適用されるのか?)などについては以下の公式 Docs をご参照ください

2-1. UDR を作成し、デフォルトルートを Azure Firewall に向ける

パターン1 の手順を参照してください
→ DNAT の場合は UDR の作成は不要となります

2-2. Azure Firewall にて DNAT ルールを構成する

作成するルールは以下の通り
(項目についてはPortalでの作成時に表示される通りに記載。日本語翻訳が変な気がする・・・)

名前 ソースの種類 ソース プロトコル 宛先ポート 宛先(ファイアウォールIPアドレス) 翻訳されたタイプ 翻訳されたアドレスまたはFQDN 変換されたポート
SSH-SpokeVM1 IPアドレス * TCP 10022 4.216.27.102 IPアドレス 10.1.0.4 22
SSH-SpokeVM2 IPアドレス * TCP 20022 4.216.27.102 IPアドレス 10.2.0.4 22

2-2-1. DNAT 規則の作成


2-2-2. 接続確認

Spoke1VMへのSSHアクセス

Spoke2VMへのSSHアクセス

3. Private IP --> Private IP (SNAT)

パターン1 の構成方法とほぼ同一ですが、SNAT の動作ポリシーを変更し、プライベート IP アドレスへの通信に対しても SNAT を実施するよう Azure Firewall で設定を行う必要があります

詳細は Azure Firewall の SNAT プライベート IP アドレス範囲 をご参照ください

よって、3の構成を取るために必要となる設定は以下の3つとなります

  • UDR を作成し、デフォルトルートを Azure Firewall に向ける
  • Azure Firewall にてプライベートIP範囲 (SNAT) を設定する
  • Azure Firewall にてオンプレミス向けの通信を許可する

構成図

通信のイメージ

手順

3-1. UDR を作成し、デフォルトルートを Azure Firewall に向ける

3-1-1. UDRの作成


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

3-1-3. サブネットへルートテーブルを関連付ける

3-1-4. 仮想マシンにて「有効なルート」を確認する

3-2. Azure Firewall にてプライベートIP範囲 (SNAT) を設定する

3-3. Azure Firewall にてオンプレミス向けの通信を許可する

3-3-1. ネットワーク規則の作成

Spoke1/Spoke2 --> オンプレミス に対する ICMP 通信を許可するルールを作成する

3-3-2. 疎通確認

  • Spoke1VM から OnpreVM に ping を実施する
  • OnpreVM にて tcpdump を実施する (送信元 IP が Azure Firewall であることを確認)

4. private IP --> Private IP (DNAT)

実施内容は 2. Public IP --> Private IP (DNAT) と同一となるため、4 の構成を取るために必要となる設定は以下の1つとなります

  • UDR を作成し、デフォルトルートを Azure Firewall に向ける
  • Azure Firewall にて DNAT ルールを構成する

※違いは、作成する DNAT ルールの宛先を Azure Firewall のプライベートIP にする点のみ

構成図

通信のイメージ

手順

4-1. UDR を作成し、デフォルトルートを Azure Firewall に向ける

パターン2 の手順(2-1)を参照してください
→ DNAT の場合は UDR の作成は不要となります

4-2. Azure Firewall にて DNAT ルールを構成する

4-2-1. DNAT 規則の作成

パターン2 の手順(2-2)を参照してください

作成するルールは以下の通り

名前 ソースの種類 ソース プロトコル 宛先ポート 宛先(ファイアウォールIPアドレス) 翻訳されたタイプ 翻訳されたアドレスまたはFQDN 変換されたポート
SSH-SpokeVM1 IPアドレス * TCP 10022 10.0.110.4 IPアドレス 10.1.0.4 22
SSH-SpokeVM2 IPアドレス * TCP 20022 10.0.110.4 IPアドレス 10.2.0.4 22

4-2-2. 接続確認

OnpreVM から Spoke1VM への SSH アクセス

OnpreVM から Spoke2VM への SSH アクセス

まとめ

今回は Azure Firewall にて SNAT と DNAT の動作確認を実施しました。あまり利用する機会は無いかもしれませんが Private IP <--> Private IP での SNAT/DNAT についても構成可能であることを確認することができました。

本記事が Azure ネットワーク構成を検討している方に少しでも参考になれば幸いです

Appendix

公式Docs (Azure Firewall)

https://learn.microsoft.com/ja-jp/azure/firewall/tutorial-firewall-deploy-portal-policy

https://learn.microsoft.com/ja-jp/azure/firewall-manager/policy-overview

https://learn.microsoft.com/ja-jp/azure/firewall/tutorial-firewall-dnat-policy

https://learn.microsoft.com/ja-jp/azure/firewall/snat-private-range

https://learn.microsoft.com/ja-jp/azure/firewall-manager/rule-processing

公式Docs (ルートテーブル)

https://learn.microsoft.com/ja-jp/azure/virtual-network/manage-route-table

Microsoft (有志)

Discussion