🥑

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

2022/12/18に公開

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

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

image.png

image.png

バックエンドには、IPv4 の IPアドレスしか持たない WEBサーバーを立てておきます。
今回は IPv4 のパブリックIPアドレスのみを割り当てた Windows Server に、IIS をインストールしたものを用意しました。
当たり前ですが、このままでは、このWebサーバーには IPv4 でないと到達できません。

  • IPv4 クライアントからのアクセス
    image.png

  • IPv6 クライアントからのアクセス
    image.png

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

image.png
image.png
image.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アドレスについては こちら で公開がされています。
NSGで接続を許可する場合には、サービスタグで「AzureFrontDoor.Backend」を許可することで、許可できます。

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

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

image.png

ipv6しか持っておらず、大丈夫そうです。
image.png

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

image.png

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

image.png

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

Microsoft (有志)

Discussion