废话不多说,众所周知在 Azure 开始弃用动态 IPv4 后,az100 应该是没免费的 IPv4 可以用了,虽然可能还会有调整,但现阶段想要免费 IP 就是 IPv6 Only 了。
不过如果是老号的话,目前仍然还有动态 IPv4 的配额,也就仍然还可以创建出免费的动态 IPv4,所以接下来会分2种情况。
首先还是创建最基础的资源组和网卡。
环境变量
先把一些变量给设置好,这样就不用修改后面的命令了,只需要修改开头的这些变量就行。
我使用的是 Debian,所以命令和 Win 不通用,可以下载安装 Git Bash 这样就有了一个 Bash 环境就不用考虑做转换。
定义虚拟机的位置、资源组名字、虚拟机名字:
location=southeastasia
rsg=Debian-13-Group
vm=Debian-13
位置是预设值(这里是新加坡),另2个可以自定义。其他位置的名字可参考这帖。
接下来是定义 SKU,Azure 的 Debian 13 有 3 个 SKU,分别是
13
13-arm64
13-gen2
其中 13-gen2 是用于 TrustedLaunch 的,所以忽略(参考为什么我的受信任启动 VM 显示内存少了 50MB?)。
13 就是 x86_64 架构,13-arm64 就是 arm64 架构,就这个区别。
然后根据架构选机型来设置环境变量,固定搭配
x86_64 架构
sku=13
size=Standard_B2ats_v2
arm64 架构
sku=13-arm64
size=Standard_B2pts_v2
最后是要设置虚拟机的用户名和 SSH 公钥的位置,绝对不创建允许密码登录的虚拟机
用户名很简单
user=raymond
如果已经有公钥了设置相应的位置就行,或者重新生成一个新的
ssh-keygen -t ed25519 -C ""
设置公钥位置
sshpubkey=$HOME/.ssh/id_ed25519.pub
设置好需要的环境变量后就可以开始创建虚拟机了。
检查动态 IPv4 的配额情况
通过这个命令来查看配额
az network list-usages -l $location -o table | grep -E 'Name|---| Basic| Standard'
Basic 对应动态IP,Standard 对应静态IP,Limit 一栏就是配额,老号的话4个都是3配额,新号的话前2个是0配额也就是无法创建动态IP。
下面分创建动态 IPv4 的情况和创建静态 IPv6 的情况。
创建动态 IPv4 的 Debian 13
两条命令搞定
az group create -n $rsg -l $location -o table
az vm create -g $rsg -n $vm --image 'Debian:debian-13:'$sku':latest' --size $size --os-disk-size-gb 64 --admin-username $user --ssh-key-values "$sshpubkey" --public-ip-sku Basic --public-ip-address-allocation dynamic -o table
创建 IPv6-Only Debian 13
由于需要添加 IPv6 进来,所以比较复杂
第1步,创建资源组
az group create -n $rsg -l $location -o table
第2步,创建网络安全组
az network nsg create -g $rsg -n $vm'NSG' -o table
第3步,在网络安全组添加一个允许 SSH 连接的规则,也可以自己加其他规则,不过为了安全我只开放 22 端口连接,ICMP 都不开,这也是官方创建的默认规则,另外 Azure 自带了一个非常基础的 DDoS 防护
az network nsg rule create -g $rsg --nsg-name $vm'NSG' -n default-allow-ssh --priority 1000 --destination-port-ranges 22 --protocol tcp -o table
第4步,创建一个静态 IPv6,完全免费
az network public-ip create -n $vm'PublicIPv6' -g $rsg -l $location --sku Standard --version IPv6
第5步,创建一个支持 IPv6 的虚拟网络和子网
az network vnet create -g $rsg -n $vm'VNET' --address-prefixes "10.0.0.0/16" "2404:f800:8000:122::/63"
az network vnet subnet create -g $rsg --vnet-name $vm'VNET' -n $vm'Subnet' --address-prefixes "10.0.0.0/24" "2404:f800:8000:122::/64"
第6步,创建一个 NIC 网卡,绑定到上面创建的 NSG 和 VNET
az network nic create -g $rsg -n $vm'VMNic' --vnet-name $vm'VNET' --subnet $vm'Subnet' --network-security-group $vm'NSG' -o table
第7步,创建 ip-config 配置文件,并且把 IPv6 绑上去
az network nic ip-config create -g $rsg -n ipconfig2 --nic-name $vm'VMNic'
az network nic ip-config delete -g $rsg -n ipconfig1 --nic-name $vm'VMNic'
az network nic ip-config create -g $rsg -n 'ipconfig'$vm --nic-name $vm'VMNic'
az network nic ip-config delete -g $rsg -n ipconfig2 --nic-name $vm'VMNic'
az network nic ip-config create -g $rsg -n 'ipv6config'$vm --nic-name $vm'VMNic' --vnet-name $vm'VNET' --subnet $vm'Subnet' --private-ip-address-version IPv6 --public-ip-address $vm'PublicIPv6'
这里其实在创建网卡时已自动创建了一个 ipconfig1 的配置了,我为了保持与官方创建的命名规则一致,所以创建一个 ipconfig2 后再创建一个符合官方命名规则的,然后再删除 ipconfig2。
如果说不介意命名规则的,可以不按上面的命令,只执行下面的这条就行,直接把 IPv6 绑上去
az network nic ip-config create -g $rsg -n 'ipv6config'$vm --nic-name $vm'VMNic' --vnet-name $vm'VNET' --subnet $vm'Subnet' --private-ip-address-version IPv6 --public-ip-address $vm'PublicIPv6'
第8步,也是最后一步,创建虚拟机
az vm create -g $rsg -n $vm --image 'Debian:debian-13:'$sku':latest' --size $size --os-disk-size-gb 64 --admin-username $user --ssh-key-values "$sshpubkey" --nics $vm'VMNic' -o table
参考资料
官方教程就足够了
🍗
mark
感谢分享
学习了,感谢分享经验!
不错,
arm性能如何?
The VM size 'Standard_B2pts_v2' is not supported for creation of VMs and Virtual Machine Scale Sets with 'TrustedLaunch' security type
@kalagxw #7 貌似现在默认会打开TrustedLaunch,arm架构是不支持TrustedLaunch启动方式的
解决办法是允许不使用TrustedLaunch,也就是不使用安全启动
详见此帖 https://www.nodeseek.com/post-604831-1 的步骤一
能否用CLI这样创建v4+v6双栈的免费虚拟机?
@WXR123 #9 不行。因为它们不是同一个类别,无法共存。
我的方法是建2台机子然后通过内网连接到一起,变相实现双栈,免费肯定是免费的,不过就是要多建1台机子
见 https://www.nodeseek.com/post-365463-1