Azure仮想マシンをIPv4/IPv6のデュアルスタックで構築する
はじめに
2019/7/18にAzure Virtual NetworkでIPv6の対応のPreviewが始まりましたが、当時は仮想マシン上のNICに直接IPv6のPublic IP addressの割当は行えず、インバウンドについてはAzure Load Balancer経由となっていました。
Preview当時の記事はこちら
最近は(多分)Standard Public IP addressが登場してから、仮想マシンのNICに直接IPv6のPublic IP addressが付与できます。
色々細かいことは以下の公式サイトに書かれていますが、今回はさくっとAzure CLIで環境を作成して確認しました。
Azure Virtual Network の IPv6 の概要
Azure環境のデプロイ
実は本当は全てAzureポータルで確認したかったのですが、以下の制限があるっぽかったのでAzure CLIを選びました。。
- 仮想マシン作成時、Public IP addressにIPv6が指定出来ない(IPv4とIPv6の2つのPublic IP addressを指定したい)
- NICに対して後からIPv6のPublic IP addressの追加ができない(IP構成で追加ができない)
環境変数の設定
とりあえず環境変数を設定しておきます。
#!/bin/bash
rgname=ipv6-ds-rg
location=japaneast
vmname=vm01
nsgname=ds-nsg
vnetname=ds-vnet
subnetname=default
subnetname2=subnet2
vmid=azureuser
vmpassword=(任意の文字列)
リソースグループの作成
以下のコマンドでリソースグループを作成します。
# Create Resource Group
az group create \
--name $rgname \
--location $location
Public IPの作成
IPv4, IPv6それぞれのPublic IPを作成します。Standard SKUで、Allocation methodはstatic(静的)割当とします。
# Create an IPV4 IP address
az network public-ip create \
--name ${vmname}-pip-v4 \
--resource-group $rgname \
--location $location \
--sku standard \
--allocation-method static \
--version IPv4
# Create an IPV6 IP address
az network public-ip create \
--name ${vmname}-pip-v6 \
--resource-group $rgname \
--location $location \
--sku standard \
--allocation-method static \
--version IPv6
NSGの作成
外部からTCP/22を許可するためにNSGとルールを作成します。
# Create NSG
az network nsg create \
--name $nsgname \
--resource-group $rgname \
--location $location
# Create inbound rule for port 22
az network nsg rule create \
--name allowSSHIn \
--nsg-name $nsgname \
--resource-group $rgname \
--priority 100 \
--description "Allow SSH In" \
--access Allow \
--protocol "Tcp" \
--direction Inbound \
--source-address-prefixes "*" \
--source-port-ranges "*" \
--destination-address-prefixes "*" \
--destination-port-ranges 22
仮想ネットワークの作成
Dual Stackな仮想ネットワークを作成します。
今回はサブネットを2つ作り、IPv4とIPv6のCIDR/Prefixをそれぞれ設定します。
これでいいのか自信はないですけど、IPv6のリンクローカルアドレスのPrefix「fc00::/7」を配慮して、サブネットそれぞれのPrefixをfc00::/64, fc01::/64にしました。
※こちらについて、有識者の方コメント頂けると助かります。
# Create the virtual network
az network vnet create \
--name $vnetname \
--resource-group $rgname \
--location $location \
--address-prefixes "192.168.10.0/24" "fc00::/48" "fc01::/48"
# Create a single dual stack subnet
az network vnet subnet create \
--name $subnetname \
--resource-group $rgname \
--vnet-name $vnetname \
--address-prefixes "192.168.10.0/25" "fc00::/64" \
--network-security-group $nsgname
# Create a single dual stack subnet
az network vnet subnet create \
--name $subnetname2 \
--resource-group $rgname \
--vnet-name $vnetname \
--address-prefixes "192.168.10.128/25" "fc01::/64" \
--network-security-group $nsgname
NICの作成
NICを作成して、後からIPv6のPublic IP addressを追加しています。(この操作がAzureポータルから出来ない)
# Create NICs
az network nic create \
--name ${vmname}-nic \
--resource-group $rgname \
--location $location \
--vnet-name $vnetname \
--subnet $subnetname \
--private-ip-address-version IPv4 \
--public-ip-address ${vmname}-pip-v4
az network nic ip-config create \
--name ifconfig-v6 \
--nic-name ${vmname}-nic \
--resource-group $rgname \
--vnet-name $vnetname \
--subnet $subnetname \
--private-ip-address-version IPv6 \
--public-ip-address ${vmname}-pip-v6
VMの作成
最後に仮想マシンを作成します。
# Create VM
az vm create \
--name $vmname \
--resource-group $rgname \
--location $location \
--nics ${vmname}-nic \
--size Standard_A2 \
--admin-username $vmid \
--admin-password $vmpassword \
--image UbuntuLTS
Azureポータルからの確認
作成後はAzureポータルからも設定内容の確認は行なえます。
Virtual Networkのsubnet
Public IP address
NIC
接続確認
まずは外部のPCからIPv4で仮想マシンに接続しますが、当然繋がります。
今度はIPv6のアドレスでsshしてみます。当然ですが、クライアントPCの環境もIPv6でインターネットの利用ができる環境が必要です。
ちなみに、作成した仮想マシン上から、自宅にあるRaspberry PIにもIPv6でsshが可能です。
こちらも問題ないですね。
おわりに
まだAzureのサービス全てがIPv6に対応しているわけではありませんが、着実に追いついてきていますね。
また、色々AzureのIPv6周りを試していきたいと思います。