IPv4 しか話せないWEBサーバーと Azure Front Door を組み合わせて、IPv6 に対応させてみる 

# Azure Front Door で IPv6 to IPv4 ができる…？
IPv4 の WEBサービスを Azure へリフトしたものの、IPv6のクライアントからのアクセスへの対応はどうしようか… という場合があります。
「Azure では IPv6/IPv4変換はできないんだ…おわった…」と思っていたら、実は Azure Front Door を立てるだけでアッサリ対応できました！ というお話です。


Azure Front Door は IPv4のみならず IPv6 対応のサービスですので、クライアントからの IPv6アクセスを受け付けてくれます。また、Azure Front Door のバックエンドには IPv4も用意されており、IPv6 に対応できない WEBサービスとも IPv4 で疎通が可能です。


# 環境用意
環境用意と言っても、以下の図のように、IPv4のみのバックエンドの前に、Azure Fornt Door を用意してあげるだけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/7d6e609e-53c1-debf-394b-dc02a3e21270.png)

早速 Azure Front Door をデプロイしてあげました。
試しに、Azure Front Door の エンドポイント を名前解決してみると、確かに IPv4 と IPv6 両方を持っていることが確認できます。IPv6 で受付してくれそうです！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/d052298f-64af-b69d-f026-10d853b02918.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/9737e4c7-6cf3-a640-130b-26c2143abd48.png)

バックエンドには、IPv4 の IPアドレスしか持たない WEBサーバーを立てておきます。
今回は IPv4 のパブリックIPアドレスのみを割り当てた Windows Server に、IIS をインストールしたものを用意しました。
当たり前ですが、このままでは、このWebサーバーには IPv4 でないと到達できません。
- IPv4 クライアントからのアクセス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/c03fcd6c-18fc-f1a4-e85a-5862a32b4a3d.png)

- IPv6 クライアントからのアクセス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/2ee3203c-f450-9317-d455-36e30ef92ce8.png)

念のためWEBサーバー内で、アクセスログを確認しておきましょう。
IISですので、アクセスログの設定は [IIS manager] を開いて [Logging] を選択すると、設定ができます。
既定のままでも、接続元IPアドレスが記録されるようになっていると思いますので、今回特に設定は変更してはいません。
ログの保管されているディレクトリを開き、ログファイルを確認てみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/be3e18ec-afba-4941-f113-6cb6ca806fcb.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/2c343c8a-96da-fcf6-7e25-ac7264bef237.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/41651cc4-3fdb-4a05-e38e-aca6bbd6a318.png)

147.243.*.*　などからのアクセスが記録されています。
また、正常性プローブの確認であることも記録されています。

実はこの 147.243.*.* というIPアドレスは、 Azure Front Door のバックエンドのIPアドレスです。
Azure Front Door は、ユーザからの接続を受け付けるフロントエンド側のIPアドレスと、バックエンドと接続するためのIPアドレスが、異なっているサービスなのです。

https://learn.microsoft.com/ja-jp/azure/frontdoor/standard-premium/faq#how-do-i-lock-down-the-access-to-my-backend-to-only-azure-front-door

なお、バックエンド側のIPアドレスについては <a harf=https://www.microsoft.com/en-us/download/details.aspx?id=56519>こちら</a> で公開がされています。
NSGで接続を許可する場合には、サービスタグで「AzureFrontDoor.Backend」を許可することで、許可できます。


# 確認結果： IPv6クライアントから表示できました！

さて、Azure Front Door を配置することで、IPv6 で疎通可能になったかどうか、確認をしてみます。
確認用のクライアントとしては、パブリック IPv4 を持たず、IPv6 のみをもつ VM を作成しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/0f473d2f-5dfc-a8e2-da11-0f616e0f79b9.png)

ipv6しか持っておらず、大丈夫そうです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/d9ebf8c9-5bdd-723c-d7c5-edd8f18cb586.png)

それでは、Azure Front Door のURLを開いてみましょう。
結果は以下の通りで、無事、 IIS のお馴染みのページが表示できました！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/5a800baa-ad86-fc4b-55e0-941adab43273.png)

アクセスログを確認すると、Azure Front Door のバックエンドIPアドレス からの アクセスであることが記録されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1461633/87e52278-e3ac-9d77-5675-b00835889b0f.png)

```text
2022-12-18 13:08:48 10.1.0.4 GET / - 80 - 147.243.28.137 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/108.0.0.0+Safari/537.36+Edg/108.0.1462.46 - 200 0 0 1
2022-12-18 13:08:48 10.1.0.4 GET /iisstart.png - 80 - 147.243.28.137 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/108.0.0.0+Safari/537.36+Edg/108.0.1462.46 http://***-ckh3fsfyafe5acgq.z01.azurefd.net/ 304 0 0 1
2022-12-18 13:08:48 10.1.0.4 GET /favicon.ico - 80 - 147.243.28.137 Mozilla/5.0+(Windows+NT+10.0;+Win64;+x64)+AppleWebKit/537.36+(KHTML,+like+Gecko)+Chrome/108.0.0.0+Safari/537.36+Edg/108.0.1462.46 http://***-ckh3fsfyafe5acgq.z01.azurefd.net/ 404 0 2 1
```

Azure Front Door を設置することで、IPv6 からの接続を受け付けることができるようになりました。
一方で、クライアントの発信元IPアドレスが確認できなくなってしまいますので、取得したい場合には x-forwarded-for を確認する必要がありそうですね。

https://learn.microsoft.com/ja-jp/azure/frontdoor/front-door-http-headers-protocol

https://learn.microsoft.com/ja-jp/azure/frontdoor/front-door-faq#azure-front-door----x-forwarded-for------------------

# デュアルスタック
なお、WEBサービス自体も IPv6 対応できるのであれば、Azure VM は IPv4 と IPv6 デュアルスタック可能ですので、普通に VMに IPv6 を持たせればよいと思います。

https://learn.microsoft.com/ja-jp/azure/virtual-network/ip-services/ipv6-overview


# 参考
https://level69.net/archives/28736

https://blog.shibayan.jp/entry/20190419/1555675249