Предположим, у нас есть три разных диапазона: ‘10.192.0.0/11’, ‘10.64.0.0/11’ и ‘10.128.0.0/11’. Эти диапазоны соответствуют трём разным географическим регионам в Azure. В этих верхнеуровневых блоках уже используются некоторые диапазоны. У нас есть полный список уже используемых диапазонов. Цель — автоматически выбрать следующий доступный диапазон и создать для него виртуальную сеть (VNET).
Процесс
Предположим, что мы извлекли все диапазоны VNET и получили их список, например такой:
$nets = '10.192.1.0/24','10.192.2.0/24','10.192.3.0/24','10.192.6.0/24',
'10.192.7.0/24','10.192.8.0/24','10.192.9.0/24','10.64.1.0/24',
'10.64.2.0/24','10.64.3.0/24','10.64.4.0/24','10.64.5.0/24',
'10.64.8.0/24','10.64.9.0/24','10.128.1.0/24','10.128.2.0/24',
'10.128.4.0/24','10.128.5.0/24','10.128.7.0/24','10.128.8.0/22'
Предположим, нам нужно найти следующий диапазон размером /22 в сети ‘10.64.0.0/11’. Мы делаем это так:
Get-IPRanges -Networks $nets -CIDR 22 -BaseNet "10.64.0.0/11" | ft -AutoSize

Этот вывод показывает список ваших сетей, отмеченных флагом IsFree. По сути, предполагается, что если диапазон есть в списке, значит он используется. Строка, где IsFree равно true — это диапазон, который командлет определил как следующий доступный слот для вашей сети. Попробуем другой вариант:
Get-IPRanges -Networks $nets -CIDR 24 -BaseNet "10.64.0.0/11" | ft -AutoSize
В этом случае вывод немного отличается. Первые два диапазона, которые были определены, попадают в один из свободных слотов базовой сети. А последний — это слот в конце списка занятых диапазонов.

Если мы хотим отфильтровать только те, которые нас интересуют, можно сделать так, чтобы выбрать один из них:
Get-IPRanges -Networks $nets -CIDR 24 -BaseNet "10.64.0.0/11" | ? isfree -eq $true | ft -AutoSize

Хорошо, допустим, мы выбрали ‘10.64.6.0/24’. Следующий шаг — разбить его на подсети, если это необходимо. Допустим, в соответствии с корпоративной политикой, мы хотим иметь четыре подсети в этом VNET. Первая подсеть будет зарезервирована под Gateway, затем у нас есть подсеть DMZ для размещения WAF, так как в подсети WAF другие устройства не поддерживаются. Следующая подсеть, назовём её EDGE — это подсеть, в которую мы помещаем наши WEB-серверы. Затем APP — для уровня приложений, и BKE — для уровня данных. Чтобы сделать это автоматически, нам нужно взять диапазон, выбранный на предыдущем шаге, и определить структуру. Также необходимо задать размер каждой подсети в количестве IP-адресов. Пример ниже:
$subnets = @{type = "GTWSUBNET"; size = 30},
@{type = "DMZSUBNET"; size = 62},
@{type = "EDGSUBNET"; size = 30},
@{type = "APPSUBNET"; size = 62},
@{type = "BKESUBNET"; size = 62}
Get-VLSMBreakdown -Network 10.64.6.0/24 -SubnetSize $subnets | ft -AutoSize
Это будет разбивка VNET по подсетям:
