Kierowanie ruchu sieciowego za pomocą tabeli tras przy użyciu programu PowerShell

Platforma Azure automatycznie domyślnie kieruje ruchem między wszystkimi podsieciami w sieci wirtualnej. Możesz tworzyć własne trasy zastępujące domyślne trasy platformy Azure. Możliwość tworzenia niestandardowych tras jest przydatna, jeśli na przykład chcesz kierować ruchem między podsieciami za pomocą wirtualnego urządzenia sieciowego (NVA). W tym artykule omówiono sposób wykonywania następujących zadań:

  • Tworzenie tabeli tras
  • Tworzenie trasy
  • Tworzenie sieci wirtualnej z wieloma podsieciami
  • Kojarzenie tabeli tras z podsiecią
  • Tworzenie urządzenia NVA, które kieruje ruchem
  • Wdrażanie maszyn wirtualnych w różnych podsieciach
  • Kierowanie ruchem z jednej podsieci do drugiej za pomocą urządzenia NVA

Jeśli nie masz subskrypcji platformy Azure, przed rozpoczęciem utwórz bezpłatne konto.

Azure Cloud Shell

Na platforma Azure hostowane jest Azure Cloud Shell, interaktywne środowisko powłoki, z którego można korzystać w przeglądarce. Do pracy z usługami platformy Azure można używać programu Bash lub PowerShell w środowisku Cloud Shell. Aby uruchomić kod w tym artykule, możesz użyć wstępnie zainstalowanych poleceń usługi Cloud Shell bez konieczności instalowania niczego w środowisku lokalnym.

Aby uruchomić środowisko Azure Cloud Shell:

Opcja Przykład/link
Wybierz pozycję Wypróbuj w prawym górnym rogu bloku kodu lub polecenia. Wybranie pozycji Wypróbuj nie powoduje automatycznego skopiowania kodu lub polecenia do usługi Cloud Shell. Screenshot that shows an example of Try It for Azure Cloud Shell.
Przejdź do witryny https://shell.azure.com lub wybierz przycisk Uruchom Cloud Shell, aby otworzyć środowisko Cloud Shell w przeglądarce. Button to launch Azure Cloud Shell.
Wybierz przycisk Cloud Shell na pasku menu w prawym górnym rogu witryny Azure Portal. Screenshot that shows the Cloud Shell button in the Azure portal

Aby użyć usługi Azure Cloud Shell:

  1. Uruchom usługę Cloud Shell.

  2. Wybierz przycisk Kopiuj w bloku kodu (lub bloku poleceń), aby skopiować kod lub polecenie.

  3. Wklej kod lub polecenie do sesji usługi Cloud Shell, wybierając klawisze Ctrl+Shift V w systemach Windows i Linux lub wybierając pozycję Cmd+Shift++V w systemie macOS.

  4. Wybierz klawisz Enter, aby uruchomić kod lub polecenie.

Jeśli zdecydujesz się zainstalować program PowerShell i korzystać z niego lokalnie, ten artykuł wymaga modułu Azure PowerShell w wersji 1.0.0 lub nowszej. Uruchom polecenie Get-Module -ListAvailable Az, aby dowiedzieć się, jaka wersja jest zainstalowana. Jeśli konieczne będzie uaktualnienie, zobacz Instalowanie modułu Azure PowerShell. Jeśli używasz programu PowerShell lokalnie, musisz też uruchomić polecenie Connect-AzAccount, aby utworzyć połączenie z platformą Azure.

Tworzenie tabeli tras

Przed utworzeniem tabeli tras utwórz grupę zasobów za pomocą polecenia New-AzResourceGroup. Poniższy przykład obejmuje tworzenie grupy zasobów o nazwie myResourceGroup dla wszystkich zasobów utworzonych w tym artykule.

New-AzResourceGroup -ResourceGroupName myResourceGroup -Location EastUS

Utwórz tabelę tras za pomocą polecenia New-AzRouteTable. Poniższy przykład tworzy tabelę tras o nazwie myRouteTablePublic.

$routeTablePublic = New-AzRouteTable `
  -Name 'myRouteTablePublic' `
  -ResourceGroupName myResourceGroup `
  -location EastUS

Tworzenie trasy

Utwórz trasę, pobierając obiekt tabeli tras za pomocą polecenia Get-AzRouteTable, utwórz trasę za pomocą polecenia Add-AzRouteConfig, a następnie zapisz konfigurację trasy w tabeli tras za pomocą polecenia Set-AzRouteTable.

Get-AzRouteTable `
  -ResourceGroupName "myResourceGroup" `
  -Name "myRouteTablePublic" `
  | Add-AzRouteConfig `
  -Name "ToPrivateSubnet" `
  -AddressPrefix 10.0.1.0/24 `
  -NextHopType "VirtualAppliance" `
  -NextHopIpAddress 10.0.2.4 `
 | Set-AzRouteTable

Kojarzenie tabeli tras z podsiecią

Zanim skojarzysz tabelę tras z podsiecią, musisz utworzyć sieć wirtualną i podsieć. Utwórz sieć wirtualną przy użyciu polecenia New-AzVirtualNetwork. Poniższy przykład tworzy sieć wirtualną o nazwie myVirtualNetwork z prefiksem adresu 10.0.0.0/16.

$virtualNetwork = New-AzVirtualNetwork `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name myVirtualNetwork `
  -AddressPrefix 10.0.0.0/16

Utwórz trzy podsieci, tworząc trzy konfiguracje podsieci za pomocą polecenia New-AzVirtualNetworkSubnetConfig. Poniższy przykład obejmuje tworzenie trzech konfiguracji podsieci dla podsieci Publicznych, Prywatnych i DMZ :

$subnetConfigPublic = Add-AzVirtualNetworkSubnetConfig `
  -Name Public `
  -AddressPrefix 10.0.0.0/24 `
  -VirtualNetwork $virtualNetwork

$subnetConfigPrivate = Add-AzVirtualNetworkSubnetConfig `
  -Name Private `
  -AddressPrefix 10.0.1.0/24 `
  -VirtualNetwork $virtualNetwork

$subnetConfigDmz = Add-AzVirtualNetworkSubnetConfig `
  -Name DMZ `
  -AddressPrefix 10.0.2.0/24 `
  -VirtualNetwork $virtualNetwork

Zapisz konfiguracje podsieci w sieci wirtualnej za pomocą polecenia Set-AzVirtualNetwork, która tworzy podsieci w sieci wirtualnej:

$virtualNetwork | Set-AzVirtualNetwork

Skojarz tabelę tras myRouteTablePublic z podsiecią Publiczną za pomocą polecenia Set-AzVirtualNetworkSubnetConfig, a następnie zapisz konfigurację podsieci w sieci wirtualnej za pomocą polecenia Set-AzVirtualNetwork.

Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $virtualNetwork `
  -Name 'Public' `
  -AddressPrefix 10.0.0.0/24 `
  -RouteTable $myRouteTablePublic | `
Set-AzVirtualNetwork

Tworzenie urządzenia NVA

Urządzenie NVA jest maszyną wirtualną, która realizuje funkcje sieci, takie jak routing, zapora lub optymalizacja sieci WAN.

Przed utworzeniem maszyny wirtualnej utwórz interfejs sieciowy.

Tworzenie interfejsu sieciowego

Przed utworzeniem interfejsu sieciowego należy pobrać identyfikator sieci wirtualnej za pomocą polecenia Get-AzVirtualNetwork, a następnie identyfikator podsieci za pomocą polecenia Get-AzVirtualNetworkSubnetConfig. Utwórz interfejs sieciowy za pomocą polecenia New-AzNetworkInterface w podsieci DMZ z włączonym przekazywaniem ip:

# Retrieve the virtual network object into a variable.
$virtualNetwork=Get-AzVirtualNetwork `
  -Name myVirtualNetwork `
  -ResourceGroupName myResourceGroup

# Retrieve the subnet configuration into a variable.
$subnetConfigDmz = Get-AzVirtualNetworkSubnetConfig `
  -Name DMZ `
  -VirtualNetwork $virtualNetwork

# Create the network interface.
$nic = New-AzNetworkInterface `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -Name 'myVmNva' `
  -SubnetId $subnetConfigDmz.Id `
  -EnableIPForwarding

Tworzenie maszyny wirtualnej

Aby utworzyć maszynę wirtualną i dołączyć do niej istniejący interfejs sieciowy, musisz najpierw utworzyć konfigurację maszyny wirtualnej za pomocą polecenia New-AzVMConfig. Konfiguracja obejmuje interfejs sieciowy utworzony w poprzednim kroku. Po wyświetleniu monitu o podanie nazwy użytkownika i hasła wybierz nazwę użytkownika i hasło, za pomocą którego chcesz zalogować się do maszyny wirtualnej.

# Create a credential object.
$cred = Get-Credential -Message "Enter a username and password for the VM."

# Create a VM configuration.
$vmConfig = New-AzVMConfig `
  -VMName 'myVmNva' `
  -VMSize Standard_DS2 | `
  Set-AzVMOperatingSystem -Windows `
    -ComputerName 'myVmNva' `
    -Credential $cred | `
  Set-AzVMSourceImage `
    -PublisherName MicrosoftWindowsServer `
    -Offer WindowsServer `
    -Skus 2016-Datacenter `
    -Version latest | `
  Add-AzVMNetworkInterface -Id $nic.Id

Utwórz maszynę wirtualną przy użyciu konfiguracji maszyny wirtualnej za pomocą polecenia New-AzVM. Poniższy przykład tworzy maszynę wirtualną o nazwie myVmNva.

$vmNva = New-AzVM `
  -ResourceGroupName myResourceGroup `
  -Location EastUS `
  -VM $vmConfig `
  -AsJob

Opcja -AsJob tworzy maszynę wirtualną w tle, aby móc przejść do następnego kroku.

Tworzenie maszyn wirtualnych

Utwórz dwie maszyny wirtualne w sieci wirtualnej, aby można było sprawdzić, czy ruch z podsieci Publicznej jest kierowany do podsieci Private za pośrednictwem wirtualnego urządzenia sieciowego w późniejszym kroku.

Utwórz maszynę wirtualną w podsieci Publicznej za pomocą polecenia New-AzVM. Poniższy przykład tworzy maszynę wirtualną o nazwie myVmPublic w podsieci Publiczne sieci wirtualnej myVirtualNetwork.

New-AzVm `
  -ResourceGroupName "myResourceGroup" `
  -Location "East US" `
  -VirtualNetworkName "myVirtualNetwork" `
  -SubnetName "Public" `
  -ImageName "Win2016Datacenter" `
  -Name "myVmPublic" `
  -AsJob

Utwórz maszynę wirtualną w podsieci Private .

New-AzVm `
  -ResourceGroupName "myResourceGroup" `
  -Location "East US" `
  -VirtualNetworkName "myVirtualNetwork" `
  -SubnetName "Private" `
  -ImageName "Win2016Datacenter" `
  -Name "myVmPrivate"

W ciągu kilku minut zostanie utworzona maszyna wirtualna. Nie wykonuj następnego kroku, dopóki maszyna wirtualna nie zostanie utworzona, a platforma Azure zwróci dane wyjściowe do programu PowerShell.

Kierowanie ruchem za pośrednictwem urządzenia NVA

Użyj polecenia Get-AzPublicIpAddress , aby zwrócić publiczny adres IP maszyny wirtualnej myVmPrivate . Poniższy przykład zwraca publiczny adres IP maszyny wirtualnej myVmPrivate :

Get-AzPublicIpAddress `
  -Name myVmPrivate `
  -ResourceGroupName myResourceGroup `
  | Select IpAddress

Użyj następującego polecenia, aby utworzyć sesję pulpitu zdalnego z maszyną wirtualną myVmPrivate z komputera lokalnego. Zastąp ciąg <publicIpAddress> adresem IP zwróconym w poprzednim poleceniu.

mstsc /v:<publicIpAddress>

Otwórz pobrany plik RDP. Po wyświetleniu monitu wybierz pozycję Połącz.

Wprowadź nazwę użytkownika i hasło określone podczas tworzenia maszyny wirtualnej (może okazać się konieczne wybranie pozycji Więcej opcji oraz Użyj innego konta, aby określić poświadczenia wprowadzone podczas tworzenia maszyny wirtualnej), a następnie wybierz przycisk OK. Podczas procesu logowania może pojawić się ostrzeżenie o certyfikacie. Wybierz pozycję Tak, aby nawiązać połączenie.

W późniejszym kroku polecenie jest używane do testowania tracert.exe routingu. Narzędzie Tracert używa protokołu ICMP (Internet Control Message Protocol), który jest blokowany przez zaporę systemu Windows. Wyłącz blokowanie protokołu ICMP przez zaporę systemu Windows, wprowadzając następujące polecenie w programie PowerShell na maszynie wirtualnej myVmPrivate:

New-NetFirewallRule -DisplayName "Allow ICMPv4-In" -Protocol ICMPv4

Chociaż trasa śledzenia jest używana do testowania routingu w tym artykule, zezwolenie na ICMP za pośrednictwem Zapory systemu Windows dla wdrożeń produkcyjnych nie jest zalecane.

Przekazywanie dalej adresu IP w obrębie platformy Azure dla interfejsu sieciowego maszyny wirtualnej zostało włączone w sekcji Włączanie przekazywania dalej adresu IP. W ramach maszyny wirtualnej system operacyjny lub aplikacja działająca na maszynie wirtualnej musi także móc przekazywać dalej ruch sieciowy. Włącz przekazywanie adresów IP w systemie operacyjnym myVmNva.

W wierszu polecenia na maszynie wirtualnej myVmPrivate pulpit zdalny do maszyny wirtualnej myVmNva:

mstsc /v:myvmnva

Aby włączyć przekazywanie dalej adresu IP w ramach systemu operacyjnego, wprowadź następujące polecenie w programie PowerShell na maszynie wirtualnej myVmNva:

Set-ItemProperty -Path HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters -Name IpEnableRouter -Value 1

Uruchom ponownie maszynę wirtualną myVmNva, co spowoduje także odłączenie sesji pulpitu zdalnego.

Mając nadal połączenie z maszyną wirtualną myVmPrivate, utwórz sesję pulpitu zdalnego z maszyną wirtualną myVmPublic po ponownym uruchomieniu maszyny wirtualnej myVmNva:

mstsc /v:myVmPublic

Wyłącz blokowanie protokołu ICMP przez zaporę systemu Windows, wprowadzając następujące polecenie w programie PowerShell na maszynie wirtualnej myVmPublic:

New-NetFirewallRule –DisplayName "Allow ICMPv4-In" –Protocol ICMPv4

Aby przetestować routing ruchu sieciowego do maszyny wirtualnej myVmPrivate z maszyny wirtualnej myVmPublic, wprowadź następujące polecenie w programie PowerShell na maszynie wirtualnej myVmPublic:

tracert myVmPrivate

Odpowiedź jest podobna do poniższego przykładu:

Tracing route to myVmPrivate.vpgub4nqnocezhjgurw44dnxrc.bx.internal.cloudapp.net [10.0.1.4]
over a maximum of 30 hops:

1    <1 ms     *        1 ms  10.0.2.4
2     1 ms     1 ms     1 ms  10.0.1.4

Trace complete.

Teraz możesz zobaczyć, że pierwszym przeskokiem jest 10.0.2.4, czyli prywatny adres IP urządzenia NVA. Drugim przeskokiem jest 10.0.1.4, prywatny adres IP maszyny wirtualnej myVmPrivate. Trasa dodana do tabeli tras myRouteTablePublic i powiązana z podsiecią Public spowodowała, że platforma Azure skierowała ruch przez urządzenie NVA, a nie bezpośrednio do podsieci Private.

Zamknij sesję pulpitu zdalnego dla maszyny wirtualnej myVmPublic. Połączenie z maszyną wirtualną myVmPrivate pozostanie nadal aktywne.

Aby przetestować routing ruchu sieciowego do maszyny wirtualnej myVmPublic z maszyny wirtualnej myVmPrivate, wprowadź następujące polecenie w wierszu polecenia na maszynie wirtualnej myVmPrivate:

tracert myVmPublic

Odpowiedź jest podobna do poniższego przykładu:

Tracing route to myVmPublic.vpgub4nqnocezhjgurw44dnxrc.bx.internal.cloudapp.net [10.0.0.4]
over a maximum of 30 hops:

1     1 ms     1 ms     1 ms  10.0.0.4

Trace complete.

Widać, że ruch jest kierowany bezpośrednio z maszyny wirtualnej myVmPrivate do maszyny wirtualnej myVmPublic. Domyślnie platforma Azure kieruje ruch bezpośrednio między podsieciami.

Zamknij sesję pulpitu zdalnego dla maszyny wirtualnej myVmPrivate.

Czyszczenie zasobów

Gdy grupa zasobów i wszystkie zawarte w niej zasoby nie będą już potrzebne, użyj polecenia Remove-AzResourcegroup .

Remove-AzResourceGroup -Name myResourceGroup -Force

Następne kroki

W tym artykule utworzono tabelę tras i skojarzyliśmy ją z podsiecią. Utworzono proste wirtualne urządzenie sieciowe, które kieruje ruch z podsieci publicznej do podsieci prywatnej. Wdróż różne wstępnie skonfigurowane wirtualne urządzenia sieciowe, które wykonują funkcje sieciowe, takie jak zapora i optymalizacja sieci WAN z witryny Azure Marketplace. Aby dowiedzieć się więcej na temat routingu, zobacz Routing overview (Omówienie routingu) i Manage a route table (Zarządzanie tabelą tras).

Chociaż możesz wdrożyć wiele zasobów platformy Azure w ramach sieci wirtualnej, zasobów dla niektórych usług PaaS platformy Azure nie można wdrożyć w sieci wirtualnej. Nadal możesz ograniczyć dostęp do zasobów niektórych usług PaaS platformy Azure tylko do ruchu z podsieci sieci wirtualnej. Aby dowiedzieć się, jak to zrobić, zobacz Ograniczanie dostępu sieciowego do zasobów PaaS.