Azure Firewall DNSプロキシを試す


# はじめに

本記事ではAzure Firewall　DNSプロキシを試します。

|登場する単語|意味|
|:--|:--|
|名前解決|FQDN(例example.com)をIPアドレスに変換すること
|Azure Private Link|プライベートにAzureリソースへ接続できるサービス
|Azure プライベートDNS|プライベートIPアドレスで名前解決するためのDNSサービス

# なぜAzure Firewall DNSプロキシが必要なのか

例えば何かのサービスでPrivate Linkを使用することがあるかと思います。
Private Linkを使用する場合、同時にプライベートDNSを使用することになります。

プライベートDNSは通常、**Azure内でのみ利用できます。**

[Learn](https://learn.microsoft.com/ja-jp/azure/dns/private-dns-overview)の図のように通常はVNet内から名前解決をしています。

![プライベートDNS.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/51571888-3c3c-4915-a512-7f629ca40736.png)

しかし、オンプレミス環境から接続する際にもこのプライベートDNSを使用したいケースがあります。オンプレミス環境からプライベートDNSへ名前解決をしたくとも応答してくれません。

そんな時に登場する解決策の一つがAzure Firewall DNSプロキシです。
今回はAzure Firewall DNSプロキシを使用して、オンプレミス環境から名前解決してみます。

# 構成図

クライアントPCのDNS設定をAzure Firewallにした状態で、プライベートDNSへ名前解決します。

![P2S-firewall-simple.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/5c8e2510-51b6-4d2a-985d-6364a7bb68ae.png)

以下の順に作成します。
1. 閉域接続設定
1. プライベートDNS作成
1. Azure Firewall DNSプロキシの設定

## 閉域接続設定

クライアントPCからVNetへ通信できる環境であれば何でも大丈夫です。
ExpressRoute、VPNGateway(S2S、P2S)など

私はOpenVPNを使用してP2Sで接続しています↓

https://qiita.com/yuyanz/items/6278032836d3fbc4ca41

雑な記事で申し訳ないですが、VPNGatewayでP2Sする場合は[こちら](https://qiita.com/yuyanz/items/ac88f795b29faf92753d)

- OpenVPNは少々複雑ですが、VMで起動停止が可能です
- VPNGatewayはMicrosoft純正品なのでお手軽です

## プライベートDNS作成

１. プライベートDNS作成

![プライベートDNS作成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/b123bf87-3192-4a1b-a667-a516d7f29493.png)

２. Aレコード作成

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/1e3cb86e-2e6b-4ac4-888c-ffce30be05b4.png">

３．VNetとリンク

![プライベートDNSをVNetに紐づける.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/dd1e2927-15ab-4352-97a6-c93044bee851.png)
→追加ボタンより、VNetを選択。

## Azure Firewall DNSプロキシの設定

[こちら](https://learn.microsoft.com/ja-jp/azure/firewall/dns-settings?tabs=browser#dns-proxy-configuration)を参考に進めます。

VNetのDNSサーバーをカスタムにしてAzure FirewallのプライベートIPアドレスを指定しておきます。

Azure FirewallのDNS設定画面で以下のように設定します
![DNSプロキシ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/1d2c1278-f866-4668-bcb7-3de37f79bef3.png)

:::note warn
DNS設定はAzure Firewallインスタンスの[設定] 画面に[DNS 設定] がない場合はAzure Firewallポリシーの設定画面を確認してみてください
:::

# 閉域接続せずにnslookupしてみる

自宅ＰＣからインターネット経由で名前解決してみます。

![パブリック名前解決.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/52ae6502-ebda-4be7-ab2e-5723053bb2af.png)

パブリックIPアドレスになってます。
プライベートDNSを使用できていません。

# 閉域接続

OpenVPN接続（P2S)をします。


 <img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/7a11d897-f0b4-4e71-9874-edfbe6c43275.png">


接続したインターフェースの設定を見てみると、
既にDNSが以下のように設定されていました。

<img width="350" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/82688eec-2799-4159-b7a8-2d7b9a87e0a0.png">

VNetのDNSサーバー設定を入れていると自動で反映されるようです。

# nslookupしてみる

![プライベート名前解決.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/724a31ba-561f-49b2-8e4c-ebfbe74bbdad.png)


無事プライベートIPアドレスに名前解決されました

# 余談

Azure FirewallのDNS設定を以下のようにしてみます。

![カスタムDNSにするとどうなるんじゃい？.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/58fc2769-4b83-4abc-afed-be4e3bd99bb9.png)

[168.63.129.16の機能](https://jpaztech.github.io/blog/network/dns-168-63-129-16/#168-63-129-16-%E3%81%AE-DNS-%E6%A9%9F%E8%83%BD)
168.63.129.16はAzure が提供しているDNS機能というイメージです。
Defaultでも168.63.129.16に向いているはずなので、Customでこういう風に指定してもうまくいくはず。

nslookup！
![プライベート名前解決.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/724a31ba-561f-49b2-8e4c-ebfbe74bbdad.png)

期待通りプライベートIPに名前解決されました！

# 補足（Private Linkを使用した場合）

Private Linkで作成したプライベートDNSを試した際の話です。
以下構成図でも試してみました。

![P2S-firewall.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/248327/c4f08f6c-b8cc-4164-9762-a3c57cd7fe7d.png)

通常はPrivate Endpointが作成されたVNet-Spoke-1とプライベートDNSがリンクされます。
しかし、VNet-HUBにはプライベートDNSがリンクされていません。
DNSプロキシを使用する場合はVNet(B)にもリンクしてあげる必要があります。

# 最後に

通常、プライベートDNSの名前解決をオンプレミスから実施できませんが、
Azure Firewall DNSプロキシを用いることで解決することができました。
あくまでAzure Firewallは解決策の一つの例です。他の方法が気になるかたは参考文献をご参照ください。

# 参考文献

◆Learn
[DNS プロキシの構成](https://learn.microsoft.com/ja-jp/azure/firewall/dns-settings?tabs=browser#dns-proxy-configuration)

◆ブログ　
今回以外の方法など、網羅的かつ丁寧に解説されておりおすすめです。
[Azure Private Endpoint のための DNS 構成パターン](https://qiita.com/Isato-Hiyama/items/6c61a65f12c9e7042bb2)