Azure FirewallでDNAT規則を利用した場合、NSGについても構成が必要になります。
その際、必要最低限の通信を透過するようなNSGの構成について、私が設定時に躓いたこともあり、備忘もかねて本記事を作成することにしました。
Azure FirewallのDNAT通信制御
Azure Firewallの機能の一つとしてDNATでの制御があります。
DNATとは、簡単に説明すると、インターネットからの通信を内部アドレスに変換する機能です
この機能を使用すると、Virtual MachineにはパブリックIPを持たせることなく、インターネットからの通信を可能にできます。
私が躓いたAzure FirewallのDNATのポイント
Azure FirewallにはパブリックIPとプライベートIPが付与されます。
私はAzure Firewallに割り振ったポータル上から見えるプライベートIPのみNSGで許可すればいいと思っていました。ですが、その状態でTest-NetConnectionコマンドを使って対象サーバーに疎通確認をしても、通信ができませんでした。
Microsoftのドキュメントを探しても該当する情報がなかなか見つからなず、苦労しました。
Azure Firewallのインスタンス
Azure Firewallではスケーリングするためにインスタンスを別途作成します。ポータル上から見えるプライベートIPのほかに複数のアドレスを持ちます。
インスタンスは内部的に作成されるため、Portal 上などからインスタンスの IP アドレスを確認することができません。
このことが原因となり、通信ができない状態となっていました。
では何をNSGで許可すればいいのか
前提として、Azure FirewallでDNATされた通信は以下に変わります。
--------------
送信元 IP アドレス : Azure Firewall のインスタンスの IP アドレス
宛先 IP アドレス : NAT 先の IP アドレス
--------------
Azure Firewall のインスタンスの IP アドレスはAzure Firewallサブネットのアドレス帯から割り当てられますので、NSGではAzure Firewallサブネットのアドレス帯を[xxx.xxx.xxx.xxx/26]のようなプレフィックス表記やVirtual Networkタグで許可します。
前述の通り、Azure Firewallで内部的に作成されたインスタンスはサブネットの範囲からIPを付与されます。そのため、もしインスタンスが変わっても通信が可能な状態となります。
最後に
Azure FirewallのDNATについての記事はよく見かけますが、今回のようにNSGを交えたような記事は見つからなかったため、自分なりにまとめてみました。
参考になれば幸いです。