AzureでIPv6しかない世界を体験する
はじめに
しばらく追っかけていなかったのですが、Azure仮想ネットワークのIPv6対応がかなり進んでいました。
2019年夏ごろに一度試したときは、まだパブリックプレビューで仮想マシン(NIC)にIPv6のパブリックIPアドレスを付与できず、ロードバランサ経由のみの対応でした。
当時の記事は「Azure Virtual NetworkでIPv6がPreviewになったので試す」で紹介しています。
最近趣味の範囲でIPv6について学習しているのですが、今回はAzure上でIPv6しか対応していないサーバで色々試してみます。
Azure Virtual Network の IPv6 の概要
Azure設計
とりあえず基本的な設定をしていきましょう。
ネットワーク
IPv6のユニークローカルアドレス(ULA)は「fd00::/8」で設計する必要があります(いわゆるIPv4でいうところのプライベートIPレンジ)。
今回は仮想ネットワーク全体のレンジを「fd10::/48」として、各サブネットを「fd10:0:0:1::/64」「fd10:0:0:2::/64」…と採番しようかなと考えます。
Azure仮想ネットワークは可能であればIPv6のみで構成したいと考えます。
ただし、この後の仮想マシンデプロイ時にはNICの最初のipconfigはIPv4でないといけない制限があるようなので、いきなり妥協します。
具体的には以下の感じです。
- vnet-ipv6 (fd10::/48, 192.168.100.0/24)
- snet-default (fd10:0:0:1::/64, 192.168.0.0/26)
- snet-vms (fd10:0:0:2::/64, 192.168.100.64/24)
仮想マシン
テストする仮想マシンは「snet-vms」に入れようかな。snet-defaultの用途はまた今度考えます。
Windows仮想マシンを「Windows Server 2022 Datacenter」で作成します。
テスト用途なので、SMALLDISK(32GB)で。
NICはIPv4, IPv6の2つのipconfigを設定して、Standard Public IP AddressはIPv6側だけにパブリックIPアドレスを割り当てます。
ファイアウォール設計
今回はNSGをsnet-vmsのサブネットに割り当てます。
受信規則としてはTCP/22, TCP/3389を空けますが、接続元は(IPv6)の自分の拠点からのみとします。
Azure上にデプロイ
では、デプロイしますか。基本的にはAzureポータルから実施します。
NSG
まずは適当なリソースグループを作成しました。今回は「rg-zenn-ipv6」とします。
NSG自体はIPv4, IPv6関係なく利用できます。TCP/22, TCP/3389の接続元IPアドレスは自身の拠点に割り当てられているIPv6プレフィックスを指定します。
確認方法は様々ですが、私は良く「https://test-ipv6.com/」を利用しています。
こちらの結果画面で、IPv6アドレスの最初の64ビット部分(こちらの画面でいうと393aの手前まで)が割り当てられているパブリックなIPv6プレフィックスです。
後半の64ビットは各PCに固有に割り当てられているアドレスです。この例ではWindows 11が一時IPv6アドレスとして「393a:ea93:eff7:49e9」を割り当てています。こちらは時間経過と共に別のアドレスに切り替わりますので、接続元のIPv6アドレスが接続先で保持されても安全ですね。
なので今回は/64指定で接続元拠点(自宅)からは全てのPCからAzure仮想ネットワークに繋がるように指定しました。
仮想ネットワーク
AzureポータルのUIが、とても操作性が悪いので、今回はAzure CLIで作成しました。
注意点として、アドレス空間の指定はIPv4, IPv6の順番で記述することです。この後Azureポータルでの操作に不具合が生じるので必ずです。
VNETNAME=vnet-ipv6
RGNAME=rg-zenn-ipv6
az network vnet create -g $RGNAME -n $VNETNAME --address-prefixes 192.168.100.0/24 fd10::/48
az network vnet subnet create -g $RGNAME --vnet-name $VNETNAME --name snet-default --address-prefixes 192.168.100.0/26 fd10:0:0:1::/64
az network vnet subnet create -g $RGNAME --vnet-name $VNETNAME --name snet-vms --address-prefixes 192.168.100.64/26 fd10:0:0:2::/64 --network-security-group nsg-snet-vms
Windows
仮想マシンを作成します。仮想ネットワークは先に設計したsnet-vms配下で配置します。
ちょっといやな予感がしたので、この時点ではPublic IPは作成しませんでした。
うまくデプロイできましたね。
IPv6のPublic IP Addressを作成しましょう。
VMのNICにIPv6用のipconfigを作成して、Public IP Addressを割り当てましょう。この操作は仮想マシン起動中でも大丈夫です。
クライアントPCのリモートデスクトップ接続で、IPv6のアドレスを使ってWindows仮想マシンにログインします。
無事ログインできて、コマンドプロンプトからnetstatで見ると、予想通りAzure基盤とのやりとりにはIPv4アドレスを使っていますね。
WindowsのネットワークプロパティでIPv4を無効化してしまうと、色々問題が出そうですね。
ipconfig /allで見ると、Default GatewayのIPv6アドレスがリンクローカルIPv6アドレスになっていますが、アドレスが超覚えやすいですね。
IPv4のNICに通常パブリックIPアドレスが付与されていないと、Azureが良しなにリザーブしている共有のパブリックIPアドレスを使って外部のサーバと通信してくれます。
ただし今回はIPv6のNICにパブリックIPアドレスがIPv6のみ付与されているので、外部通信はIPv6に限られるようです。
今の状態は以下の通りです。
- DNSはAzure標準のDNSサーバ(168.63.129.16)で名前解決ができる
- 接続先にA, AAAAレコード両方がある場合は、ブラウザは両方に接続を試みる
- IPv4(Aレコード)側はタイムアウトを起こす
- 結果IPv6(AAAAレコード)での接続は表示されるが、IPv4のタイムアウト後らしく表示が異様に遅い
- 接続先がAレコードのみのサイトには当然つながらないがやはりIPv4のタイムアウト後なのでエラー表示が遅い
というわけで、色々と使い勝手が悪いです。
OS上からIPv4を無効化
はっきり言って禁じ手です。
先に説明した通り、Azure管理プレーン向けに、IPv4の168.63.129.16宛にAzureエージェントから通信できる必要があるほか、DHCPで払いだされるDNSサーバのIPアドレスも同様です。
でも、やってみます。
Windowsのコントロールパネルから「Ethernet」アダプタのプロパティを開きます。
「Internet Protocol Version 4(TCP/IPv4)」のチェックを外します。
「Internet Protocol Version 6(TCP/IPv6)」のプロパティから、DNSサーバの部分を手動割り当てに変更して、以下のGoogle DNSのIPv6アドレスを設定します。
- 2001:4860:4860::8888
- 2001:4860:4860::8844
一度再起動しましたが、その後のipconfig /allの結果は以下の通り、目的通りIPv6のみの構成になりました。
ブラウザから色々繋げてみる
GAFAMのトップサイトは一応表示できました。Facebookはログイン時のMFA含めてOKでした(他は確認していない)。
- https://www.google.com/
- https://www.apple.com/
- https://www.facebook.com/
- https://www.amazon.co.jp/
- https://www.bing.com/
Microsoft 365(https://www.office.com/)はトップページが表示されましたが、残念ながらサインインを行おうとするとエラーになってしまいました。
「login.microsoftonline.com」がAAAAレコードを返してくれていませんね。
Azure ADのIPv6サポートが2023年3月からというアナウンスが先日ありましたので、その後随時対応していくのではと考えます。
Azure Active Directory での IPv6 サポート
ちなみにTwitter(https://twitter.com/)もAレコードしか登録されていないのでアクセス不可でした。
Netflix(https://www.netflix.com/)はばっちり視聴できました。
最初に紹介したIPv6確認サイト「https://test-ipv6.com/」自体がIPv6に対応していなかったのは残念でした。
The KAME project(https://www.kame.net/)では、ちゃんと亀がダンスしてくれたので、そこは良かったです。
結論と感想
今回の結論と無責任な感想です。
- GAFAMはほとんどIPv6に対応している
- OfficeやAzureポータルなどはAzure ADのIPv6対応待ち
- Twitterはがんばれ
- Azure仮想マシンとして正しく動作させる為にもIPv4は今のところ必須(OSで無効化しないこと)
- 草の根的なサイト含めて全てIPv6対応するにはあと何年かかるんだろう
おわりに
間違いなくAzureのIPv6対応は、ここ2年位の間にかなり成長していると感じます。
2023年初頭の段階では、IPv4を捨て去る事は出来そうになかったのですが、今後に期待しています(が、別に自分はIPv4大嫌いマンという訳ではない)。
軽くですが、パブリッククラウドであるMicrosoft Azureと、一般的に良く使われているサイトのIPv6対応状況について調査しました。
少しでも参考になれば幸いです。
Discussion