🎃

AzureでIPv6しかない世界を体験する

2023/01/23に公開

はじめに

しばらく追っかけていなかったのですが、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/」を利用しています。

img

こちらの結果画面で、IPv6アドレスの最初の64ビット部分(こちらの画面でいうと393aの手前まで)が割り当てられているパブリックなIPv6プレフィックスです。

後半の64ビットは各PCに固有に割り当てられているアドレスです。この例ではWindows 11が一時IPv6アドレスとして「393a:ea93:eff7:49e9」を割り当てています。こちらは時間経過と共に別のアドレスに切り替わりますので、接続元のIPv6アドレスが接続先で保持されても安全ですね。

なので今回は/64指定で接続元拠点(自宅)からは全てのPCからAzure仮想ネットワークに繋がるように指定しました。

img

仮想ネットワーク

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

img

img

Windows

仮想マシンを作成します。仮想ネットワークは先に設計したsnet-vms配下で配置します。

ちょっといやな予感がしたので、この時点ではPublic IPは作成しませんでした。

img

うまくデプロイできましたね。

img

IPv6のPublic IP Addressを作成しましょう。

img

VMのNICにIPv6用のipconfigを作成して、Public IP Addressを割り当てましょう。この操作は仮想マシン起動中でも大丈夫です。

img

クライアントPCのリモートデスクトップ接続で、IPv6のアドレスを使ってWindows仮想マシンにログインします。

img

無事ログインできて、コマンドプロンプトからnetstatで見ると、予想通りAzure基盤とのやりとりにはIPv4アドレスを使っていますね。

img

IP アドレス 168.63.129.16 とは

WindowsのネットワークプロパティでIPv4を無効化してしまうと、色々問題が出そうですね。

ipconfig /allで見ると、Default GatewayのIPv6アドレスがリンクローカルIPv6アドレスになっていますが、アドレスが超覚えやすいですね。

img

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」アダプタのプロパティを開きます。

img

「Internet Protocol Version 4(TCP/IPv4)」のチェックを外します。

img

「Internet Protocol Version 6(TCP/IPv6)」のプロパティから、DNSサーバの部分を手動割り当てに変更して、以下のGoogle DNSのIPv6アドレスを設定します。

  • 2001:4860:4860::8888
  • 2001:4860:4860::8844

img

一度再起動しましたが、その後のipconfig /allの結果は以下の通り、目的通りIPv6のみの構成になりました。

img

ブラウザから色々繋げてみる

GAFAMのトップサイトは一応表示できました。Facebookはログイン時のMFA含めてOKでした(他は確認していない)。

img

Microsoft 365(https://www.office.com/)はトップページが表示されましたが、残念ながらサインインを行おうとするとエラーになってしまいました。

img

「login.microsoftonline.com」がAAAAレコードを返してくれていませんね。

img

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/)では、ちゃんと亀がダンスしてくれたので、そこは良かったです。

img

結論と感想

今回の結論と無責任な感想です。

  • GAFAMはほとんどIPv6に対応している
  • OfficeやAzureポータルなどはAzure ADのIPv6対応待ち
  • Twitterはがんばれ
  • Azure仮想マシンとして正しく動作させる為にもIPv4は今のところ必須(OSで無効化しないこと)
  • 草の根的なサイト含めて全てIPv6対応するにはあと何年かかるんだろう

おわりに

間違いなくAzureのIPv6対応は、ここ2年位の間にかなり成長していると感じます。

2023年初頭の段階では、IPv4を捨て去る事は出来そうになかったのですが、今後に期待しています(が、別に自分はIPv4大嫌いマンという訳ではない)。

軽くですが、パブリッククラウドであるMicrosoft Azureと、一般的に良く使われているサイトのIPv6対応状況について調査しました。

少しでも参考になれば幸いです。

img

Discussion