Калькулятор адресного пространства для подсетей шлюза Azure
Виртуальная сеть в службах инфраструктуры Azure, подключенная к другим сетям, должна иметь подсеть шлюза. Ниже приведены рекомендации по определению подсети шлюза.
- Длина префикса подсети шлюза может иметь максимальную длину префикса 29 (например, 10.119.255.248/29), но в настоящее время рекомендуется использовать длину префикса 27 (например, 10.119.255.224/27).
- При определении адресного пространства подсети шлюза используйте последнюю часть адресного пространства виртуальной сети.
Во второй рекомендации можно определить адресное пространство подсети шлюза, задав для битов, используемых для подсети шлюза, значение 0, а остальные биты в адресном пространстве виртуальной сети — 1. Чтобы быстро вычислить адресное пространство подсети шлюза без необходимости преобразования в двоичный и обратно в десятичный, можно использовать консольное приложение, написанное на языке C# или Python, или с блоком команд PowerShell.
В этой статье содержатся блоки кода C#, Python и PowerShell, которые вычисляют адресное пространство подсети шлюза на основе значений w.x.y.z/n для префикса адреса виртуальной сети и длины префикса подсети шлюза.
Блок кода C#
Используйте этот блок кода для создания консольного приложения на C#.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// Declare variables.
const long wOctet = 16777216;
const long xOctet = 65536;
const long yOctet = 256;
double D;
int w, x, y, z, vnetPrefLen, gwPrefLen;
long d, w2, x2, y2, z2;
// Get the five values needed from the keyboard.
Console.WriteLine("**************************************************************************");
Console.WriteLine("*** Gateway subnet address space calculator for Azure virtual networks ***");
Console.WriteLine("**************************************************************************");
Console.WriteLine();
Console.WriteLine("Please supply your virtual network address space in the form of w.x.y.z/n.");
Console.WriteLine();
Console.WriteLine("w=");
w = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("x=");
x = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("y=");
y = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("z=");
z = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("n=");
vnetPrefLen = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
Console.WriteLine("Now supply the prefix length of your gateway subnet:");
gwPrefLen = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
// Perform the calculation.
D = w * wOctet + x * xOctet + y * yOctet + z;
for (int i = vnetPrefLen + 1; i < gwPrefLen + 1; i++)
{
D = D + Math.Pow(2, 32 - i);
}
d = Convert.ToInt64(D);
w2 = d / wOctet;
x2 = (d - w2 * wOctet) / xOctet;
y2 = (d - w2 * wOctet - x2 * xOctet) / yOctet;
z2 = d - w2 * wOctet - x2 * xOctet - y2 * yOctet;
// Display the result.
Console.WriteLine("**************************************************************************");
Console.WriteLine("For the Azure virtual address space {0}.{1}.{2}.{3}/{4}", w, x, y, z, vnetPrefLen);
Console.WriteLine("and gateway prefix length of {0}, the gateway subnet address space is:", gwPrefLen);
Console.WriteLine();
Console.WriteLine("{0}.{1}.{2}.{3}/{4}", w2, x2, y2, z2, gwPrefLen);
Console.WriteLine();
Console.WriteLine("Press ENTER to quit.");
Console.ReadLine();
}
}
}
Блок кода Python
Используйте этот блок кода для создания консольного приложения в Python.
import math
# Collect the values of w.x.y.z/n for your VNet address space and g, the prefix length of your gateway subnet
print("**************************************************************************")
print("*** Gateway subnet address space calculator for Azure virtual networks ***")
print("**************************************************************************\n")
print("Please supply your virtual network address space in the form of w.x.y.z/n.");
w=int(input("w = "))
x=int(input("x = "))
y=int(input("y = "))
z=int(input("z = "))
n=int(input("n = "))
print("")
g=int(input("Now supply the prefix length of your gateway subnet: "))
print("")
# Calculate
wOctet = 16777216
xOctet = 65536
yOctet = 256
D = w * wOctet + x * xOctet + y * yOctet + z
for index in range(n + 1,g + 1):
D += 2**(32 - index)
w2 = math.floor(D / wOctet)
x2 = math.floor((D - w2 * wOctet) / xOctet)
y2 = math.floor((D - w2 * wOctet - x2 * xOctet) / yOctet)
z2 = D - w2 * wOctet - x2 * xOctet - y2 * yOctet
# Display the result
gwAddrPref= "Your gateway address prefix is: " + str(w2) + "." + str(x2) + "." + str(y2) + "." + str(z2) + "/" + str(g)
print(gwAddrPref)
Блок команд PowerShell
Заполните значения и запустите результирующий блок команд в окне PowerShell или в интегрированной среде сценариев PowerShell (ISE).
# Specify the values of w.x.y.z/n for your VNet address space and g, the prefix length of your gateway subnet:
$w=
$x=
$y=
$z=
$n=
$g=
# Calculate
$wOctet = 16777216
$xOctet = 65536
$yOctet = 256
[long]$D = $w * $wOctet + $x * $xOctet + $y * $yOctet + $z;
for ($i = $n + 1; $i -lt $g + 1; $i++)
{
$D = $D + [math]::pow(2, 32 - $i)
}
$w2 = [math]::floor($D / $wOctet)
$x2 = [math]::floor( ($D - $w2 * $wOctet) / $xOctet )
$y2 = [math]::floor( ($D - $w2 * $wOctet - $x2 * $xOctet) / $yOctet )
$z2 = $D - $w2 * $wOctet - $x2 * $xOctet - $y2 * $yOctet
# Display the result
$dx= [string]$w2 + "." + [string]$x2 + "." + [string]$y2 + "." + [string]$z2 + "/" + [string]$g
Write-Host "Your gateway address prefix is: " $dx