Ćwiczenie — kierowanie ruchu przez urządzenie WUS
Po utworzeniu wirtualnego urządzenia sieciowego (WUS) i maszyn wirtualnych będziesz kierować ruch przez urządzenie WUS.
Tworzenie publicznych i prywatnych maszyn wirtualnych
Następne kroki umożliwiają wdrożenie maszyny wirtualnej w podsieciach publicznych i prywatnych.
Otwórz edytor usługi Cloud Shell i utwórz plik o nazwie cloud-init.txt.
code cloud-init.txt
Dodaj do pliku następujące informacje o konfiguracji. W przypadku tej konfiguracji
inetutils-traceroute
pakiet jest instalowany podczas tworzenia nowej maszyny wirtualnej. Ten pakiet zawiera narzędzietraceroute
, którego użyjesz w dalszej części tego ćwiczenia.#cloud-config package_upgrade: true packages: - inetutils-traceroute
Naciśnij Ctrl+S , aby zapisać plik, a następnie naciśnij Ctrl+Q , aby zamknąć edytor.
W usłudze Cloud Shell uruchom następujące polecenie, aby utworzyć publiczną maszynę wirtualną. Zastąp frazę
<password>
odpowiednim hasłem dla konta azureuser.az vm create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name public \ --vnet-name vnet \ --subnet publicsubnet \ --image Ubuntu2204 \ --admin-username azureuser \ --no-wait \ --custom-data cloud-init.txt \ --admin-password <password>
Uruchom następujące polecenie, aby utworzyć prywatną maszynę wirtualną. Zastąp frazę
<password>
odpowiednim hasłem.az vm create \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name private \ --vnet-name vnet \ --subnet privatesubnet \ --image Ubuntu2204 \ --admin-username azureuser \ --no-wait \ --custom-data cloud-init.txt \ --admin-password <password>
Uruchom następujące polecenie systemu Linux
watch
, aby sprawdzić, czy maszyny wirtualne są uruchomione. Poleceniewatch
okresowo uruchamiaaz vm list
polecenie, aby można było monitorować postęp maszyn wirtualnych.watch -d -n 5 "az vm list \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --show-details \ --query '[*].{Name:name, ProvisioningState:provisioningState, PowerState:powerState}' \ --output table"
Wartość „Succeeded” elementu ProvisioningState i wartość „VM running” elementu PowerState oznaczają pomyślne wdrożenie. Po uruchomieniu wszystkich trzech maszyn wirtualnych możesz przejść do następnego etapu. Naciśnij Ctrl-C , aby zatrzymać polecenie i kontynuować ćwiczenie.
Uruchom następujące polecenie, aby zapisać publiczny adres IP publicznej maszyny wirtualnej w zmiennej o nazwie
PUBLICIP
:PUBLICIP="$(az vm list-ip-addresses \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name public \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)" echo $PUBLICIP
Uruchom następujące polecenie, aby zapisać publiczny adres IP prywatnej maszyny wirtualnej w zmiennej o nazwie
PRIVATEIP
:PRIVATEIP="$(az vm list-ip-addresses \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --name private \ --query "[].virtualMachine.network.publicIpAddresses[*].ipAddress" \ --output tsv)" echo $PRIVATEIP
Testowanie routingu ruchu za pomocą wirtualnego urządzenia sieciowego
W ostatnich krokach użyjemy narzędzia traceroute
systemu Linux, aby pokazać, w jaki sposób jest kierowany ruch. Użyjesz ssh
polecenia , aby uruchomić traceroute
na każdej maszynie wirtualnej. Pierwszy test przedstawia trasę pobraną przez pakiety ICMP wysyłane z publicznej maszyny wirtualnej do prywatnej maszyny wirtualnej. Drugi test przedstawia trasę pobraną przez pakiety ICMP wysyłane z prywatnej maszyny wirtualnej do publicznej maszyny wirtualnej.
Uruchom następujące polecenie, aby śledzić trasę z publicznej do prywatnej maszyny wirtualnej. Po wyświetleniu monitu wprowadź podane wcześniej hasło dla konta azureuser.
ssh -t -o StrictHostKeyChecking=no azureuser@$PUBLICIP 'traceroute private --type=icmp; exit'
Jeśli zostanie wyświetlony komunikat o błędzie z informacją
bash: traceroute: command not found
, zaczekaj chwilę i spróbuj ponownie wykonać polecenie. Automatyczna instalacja programu może potrwać minutę lub dwie po wdrożeniutraceroute
maszyny wirtualnej. Po pomyślnym wykonaniu polecenia dane wyjściowe powinny wyglądać podobnie do poniższego przykładu:traceroute to private.kzffavtrkpeulburui2lgywxwg.gx.internal.cloudapp.net (10.0.1.4), 64 hops max 1 10.0.2.4 0.710ms 0.410ms 0.536ms 2 10.0.1.4 0.966ms 0.981ms 1.268ms Connection to 52.165.151.216 closed.
Zwróć uwagę, że pierwszy przeskok następuje do adresu 10.0.2.4. Ten adres jest prywatnym adresem IP urządzenia WUS. Drugi przeskok następuje do adresu 10.0.1.4 prywatnej maszyny wirtualnej. W pierwszym ćwiczeniu dodano tę trasę do tabeli tras i połączono tabelę z podsiecią publicsubnet. Teraz cały ruch z publicznego do prywatnego jest kierowany przez urządzenie WUS.
Uruchom następujące polecenie, aby śledzić trasę z prywatnej do publicznej maszyny wirtualnej. Po wyświetleniu monitu wprowadź hasło dla konta azureuser.
ssh -t -o StrictHostKeyChecking=no azureuser@$PRIVATEIP 'traceroute public --type=icmp; exit'
Powinno być widać, że ruch przechodzi bezpośrednio do publicznej maszyny wirtualnej (10.0.0.4), a nie przez urządzenie WUS, jak pokazano poniżej w danych wyjściowych polecenia.
traceroute to public.kzffavtrkpeulburui2lgywxwg.gx.internal.cloudapp.net (10.0.0.4), 64 hops max 1 10.0.0.4 1.095ms 1.610ms 0.812ms Connection to 52.173.21.188 closed.
Prywatna maszyna wirtualna używa tras domyślnych, a ruch jest kierowany bezpośrednio między podsieciami.
Właśnie skonfigurowaliśmy routing między podsieciami, aby skierować ruch z publicznej sieci Internet do podsieci dmzsubnet, zanim dotrze on do podsieci prywatnej. W podsieci dmzsubnet dodano maszynę wirtualną działającą jako urządzenie WUS. To urządzenie można skonfigurować do wykrywania potencjalnie złośliwych żądań, aby móc zablokować je, zanim trafią do miejsc docelowych.