Diagnozowanie problemu z filtrowaniem ruchu sieciowego maszyny wirtualnej

W tym artykule dowiesz się, jak zdiagnozować problem z filtrem ruchu sieciowego, wyświetlając reguły zabezpieczeń sieciowej grupy zabezpieczeń obowiązujące dla maszyny wirtualnej.

Sieciowe grupy zabezpieczeń umożliwiają sterowanie typami ruchu przepływanego przez maszynę wirtualną i wychodzącą z tej maszyny wirtualnej. Sieciową grupę zabezpieczeń można skojarzyć z podsiecią w sieci wirtualnej platformy Azure, interfejsie sieciowym dołączonym do maszyny wirtualnej lub obu tych grup. Obowiązujące reguły zabezpieczeń stosowane do interfejsu sieciowego to agregacja reguł, które istnieją w sieciowej grupie zabezpieczeń skojarzonej z interfejsem sieciowym, a podsieć, w których znajduje się interfejs sieciowy. Reguły w różnych sieciowych grupach zabezpieczeń mogą czasami powodować konflikt ze sobą i wpływać na łączność sieciową maszyny wirtualnej. Wszystkie obowiązujące reguły zabezpieczeń można wyświetlić w sieciowych grupach zabezpieczeń, które są stosowane w interfejsach sieciowych maszyny wirtualnej. Jeśli nie znasz pojęć związanych z siecią wirtualną, interfejsem sieciowym lub sieciową grupą zabezpieczeń, zobacz Omówienie sieci wirtualnej, Interfejs sieciowy i Sieciowe grupy zabezpieczeń .

Scenariusz

Próbujesz nawiązać połączenie z maszyną wirtualną za pośrednictwem portu 80 z Internetu, ale połączenie kończy się niepowodzeniem. Aby określić, dlaczego nie możesz uzyskać dostępu do portu 80 z Internetu, możesz wyświetlić obowiązujące reguły zabezpieczeń interfejsu sieciowego przy użyciu witryny Azure Portal, programu PowerShell lub interfejsu wiersza polecenia platformy Azure.

W poniższych krokach założono, że masz istniejącą maszynę wirtualną, aby wyświetlić obowiązujące reguły zabezpieczeń. Jeśli nie masz istniejącej maszyny wirtualnej, najpierw wdróż maszynę wirtualną z systemem Linux lub Windows , aby wykonać zadania w tym artykule. Przykłady w tym artykule dotyczą maszyny wirtualnej o nazwie myVM z interfejsem sieciowym o nazwie myVMVMNic. Maszyna wirtualna i interfejs sieciowy znajdują się w grupie zasobów o nazwie myResourceGroup i znajdują się w regionie Wschodnie stany USA . Zmień wartości w krokach zgodnie z potrzebami dla maszyny wirtualnej, dla której diagnozujesz problem.

Diagnozowanie przy użyciu Azure Portal

  1. Zaloguj się do witryny Azure Portal przy użyciu konta platformy Azure, które ma niezbędne uprawnienia.

  2. W górnej części Azure Portal wprowadź nazwę maszyny wirtualnej w polu wyszukiwania. Gdy nazwa maszyny wirtualnej pojawi się w wynikach wyszukiwania, wybierz ją.

  3. W obszarze USTAWIENIA wybierz pozycję Sieć, jak pokazano na poniższej ilustracji:

    Zrzut ekranu przedstawiający Azure Portal z ustawieniami sieci dla mojej karty sieciowej V M V M.

    Reguły widoczne na poprzedniej ilustracji dotyczą interfejsu sieciowego o nazwie myVMVMNic. Zobaczysz, że istnieją reguły portów przychodzących dla interfejsu sieciowego z dwóch różnych sieciowych grup zabezpieczeń:

    • mySubnetNSG: skojarzone z podsiecią, w którą znajduje się interfejs sieciowy.
    • myVMNSG: skojarzone z interfejsem sieciowym na maszynie wirtualnej o nazwie myVMVMNic.

    Reguła o nazwie DenyAllInBound to, co uniemożliwia komunikację przychodzącą z maszyną wirtualną przez port 80 z Internetu, zgodnie z opisem w scenariuszu. Reguła zawiera listę 0.0.0.0/0 dla elementu SOURCE, który zawiera Internet. Żadna inna reguła o wyższym priorytcie (niższym numerze) zezwala na ruch przychodzący na porcie 80. Aby zezwolić na ruch przychodzący na porcie 80 do maszyny wirtualnej z Internetu, zobacz Rozwiązywanie problemu. Aby dowiedzieć się więcej na temat reguł zabezpieczeń i sposobu ich stosowania na platformie Azure, zobacz Sieciowe grupy zabezpieczeń.

    W dolnej części obrazu zobaczysz również REGUŁY PORTÓW WYCHODZĄCYCH. W obszarze są to reguły portów wychodzących dla interfejsu sieciowego. Chociaż obraz przedstawia tylko cztery reguły ruchu przychodzącego dla każdej sieciowej grupy zabezpieczeń, sieciowe grupy zabezpieczeń mogą mieć wiele więcej niż cztery reguły. Na ilustracji zobaczysz pozycję VirtualNetwork w obszarze ŹRÓDŁO i MIEJSCE DOCELOWE i AzureLoadBalancer w obszarze ŹRÓDŁO. VirtualNetwork i AzureLoadBalancer to tagi usług. Tagi usługi reprezentują grupę prefiksów adresów IP, aby zminimalizować złożoność tworzenia reguł zabezpieczeń.

  4. Upewnij się, że maszyna wirtualna jest w stanie uruchomienia, a następnie wybierz pozycję Obowiązujące reguły zabezpieczeń, jak pokazano na poprzedniej ilustracji, aby wyświetlić obowiązujące reguły zabezpieczeń, pokazane na poniższej ilustracji:

    Zrzut ekranu przedstawiający okienko Obowiązujące reguły zabezpieczeń z wybraną pozycją Pobierz i wybraną regułą ZezwalajAzureLoadBalancerInbound Inbound.

    Wymienione reguły są takie same jak w kroku 3, chociaż istnieją różne karty sieciowej grupy zabezpieczeń skojarzonej z interfejsem sieciowym i podsiecią. Jak widać na ilustracji, wyświetlane są tylko pierwsze 50 reguł. Aby pobrać plik .csv zawierający wszystkie reguły, wybierz pozycję Pobierz.

    Aby zobaczyć, które prefiksy reprezentują każdy tag usługi, wybierz regułę, taką jak reguła o nazwie AllowAzureLoadBalancerInbound. Na poniższej ilustracji przedstawiono prefiksy tagu usługi AzureLoadBalancer :

    Zrzut ekranu przedstawia prefiksy adresów dla wprowadzonego elementu AllowAzureLoadBalancerInbound.

    Chociaż tag usługi AzureLoadBalancer reprezentuje tylko jeden prefiks, inne tagi usługi reprezentują kilka prefiksów.

  5. W poprzednich krokach pokazano reguły zabezpieczeń interfejsu sieciowego o nazwie myVMVMNic, ale w niektórych z poprzednich obrazów przedstawiono również interfejs sieciowy o nazwie myVMVMVMNic2 . Maszyna wirtualna w tym przykładzie ma dołączone dwa interfejsy sieciowe. Obowiązujące reguły zabezpieczeń mogą być różne dla każdego interfejsu sieciowego.

    Aby wyświetlić reguły interfejsu sieciowego myVMVMVMNic2 , wybierz je. Jak pokazano na poniższej ilustracji, interfejs sieciowy ma te same reguły skojarzone z jej podsiecią co interfejs sieciowy myVMVMNic , ponieważ oba interfejsy sieciowe znajdują się w tej samej podsieci. Po skojarzeniu sieciowej grupy zabezpieczeń z podsiecią jej reguły są stosowane do wszystkich interfejsów sieciowych w podsieci.

    Zrzut ekranu przedstawiający Azure Portal z ustawieniami sieci dla mojej karty sieciowej V M V M 2.

    W przeciwieństwie do interfejsu sieciowego myVMVMNic interfejs sieciowy myVMVMNic2 nie ma skojarzonej sieciowej grupy zabezpieczeń. Każdy interfejs sieciowy i podsieć mogą mieć skojarzona z nią zero lub jedną sieciową grupę zabezpieczeń. Sieciowa grupa zabezpieczeń skojarzona z każdym interfejsem sieciowym lub podsiecią może być taka sama lub inna. Tę samą sieciową grupę zabezpieczeń można skojarzyć z dowolną liczbą interfejsów sieciowych i podsieci.

Mimo że obowiązujące reguły zabezpieczeń były wyświetlane za pośrednictwem maszyny wirtualnej, można również wyświetlić obowiązujące reguły zabezpieczeń za pośrednictwem pojedynczej osoby:

Diagnozowanie przy użyciu programu PowerShell

Uwaga

Zalecamy korzystanie z modułu Azure Az programu PowerShell do interakcji z platformą Azure. Zobacz Instalowanie programu Azure PowerShell, aby rozpocząć. Aby dowiedzieć się, jak przeprowadzić migrację do modułu Az PowerShell, zobacz Migracja programu Azure PowerShell z modułu AzureRM do modułu Az.

Możesz uruchomić polecenia, które są następujące w Cloud Shell platformy Azure lub za pomocą programu PowerShell z komputera. Usługa Azure Cloud Shell to bezpłatna interaktywna powłoka. Udostępnia ona wstępnie zainstalowane i najczęściej używane narzędzia platformy Azure, które są skonfigurowane do użycia na koncie. Jeśli uruchamiasz program PowerShell z komputera, potrzebujesz modułu Azure PowerShell w wersji 1.0.0 lub nowszej. Uruchom Get-Module -ListAvailable Az polecenie na komputerze, aby znaleźć zainstalowaną wersję. Jeśli konieczne będzie uaktualnienie, zobacz Instalowanie modułu Azure PowerShell. Jeśli korzystasz z programu PowerShell lokalnie, musisz również uruchomić polecenie Connect-AzAccount , aby zalogować się do platformy Azure przy użyciu konta z wymaganymi uprawnieniami].

Uzyskaj obowiązujące reguły zabezpieczeń dla interfejsu sieciowego za pomocą polecenia Get-AzEffectiveNetworkSecurityGroup. Poniższy przykład pobiera obowiązujące reguły zabezpieczeń dla interfejsu sieciowego o nazwie myVMVMNic, czyli w grupie zasobów o nazwie myResourceGroup:

Get-AzEffectiveNetworkSecurityGroup `
  -NetworkInterfaceName myVMVMNic `
  -ResourceGroupName myResourceGroup

Dane wyjściowe są zwracane w formacie json. Aby zrozumieć dane wyjściowe, zobacz interpretowanie danych wyjściowych polecenia. Dane wyjściowe są zwracane tylko wtedy, gdy sieciowa grupa zabezpieczeń jest skojarzona z interfejsem sieciowym, podsieć, w których znajduje się interfejs sieciowy, lub oba te elementy. Maszyna wirtualna musi być w stanie uruchomienia. Maszyna wirtualna może mieć wiele interfejsów sieciowych z zastosowaniem różnych sieciowych grup zabezpieczeń. Podczas rozwiązywania problemów uruchom polecenie dla każdego interfejsu sieciowego.

Jeśli nadal masz problem z łącznością, zapoznaj się z dodatkową diagnostyką i zagadnieniami.

Jeśli nie znasz nazwy interfejsu sieciowego, ale znasz nazwę maszyny wirtualnej, do której jest dołączony interfejs sieciowy, następujące polecenia zwracają identyfikatory wszystkich interfejsów sieciowych dołączonych do maszyny wirtualnej:

$VM = Get-AzVM -Name myVM -ResourceGroupName myResourceGroup
$VM.NetworkProfile

Otrzymasz dane wyjściowe podobne do następującego przykładu:

NetworkInterfaces
-----------------
{/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myVMVMNic

W poprzednich danych wyjściowych nazwa interfejsu sieciowego to myVMVMNic.

Diagnozowanie przy użyciu interfejsu wiersza polecenia platformy Azure

Jeśli używasz poleceń interfejsu wiersza polecenia platformy Azure do wykonywania zadań w tym artykule, uruchom polecenia w usłudze Azure Cloud Shell lub uruchamiając interfejs wiersza polecenia platformy Azure z komputera. Ten artykuł wymaga interfejsu wiersza polecenia platformy Azure w wersji 2.0.32 lub nowszej. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest zainstalowana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure. Jeśli korzystasz z interfejsu wiersza polecenia platformy Azure lokalnie, musisz również uruchomić az login platformę Azure i zalogować się do platformy Azure przy użyciu konta z wymaganymi uprawnieniami.

Uzyskaj obowiązujące reguły zabezpieczeń dla interfejsu sieciowego za pomocą polecenia az network nic list-effective-nsg. Poniższy przykład pobiera obowiązujące reguły zabezpieczeń dla interfejsu sieciowego o nazwie myVMVMNic , który znajduje się w grupie zasobów o nazwie myResourceGroup:

az network nic list-effective-nsg \
  --name myVMVMNic \
  --resource-group myResourceGroup

Dane wyjściowe są zwracane w formacie json. Aby zrozumieć dane wyjściowe, zobacz interpretowanie danych wyjściowych polecenia. Dane wyjściowe są zwracane tylko wtedy, gdy sieciowa grupa zabezpieczeń jest skojarzona z interfejsem sieciowym, podsieć, w których znajduje się interfejs sieciowy, lub oba te elementy. Maszyna wirtualna musi być w stanie uruchomienia. Maszyna wirtualna może mieć wiele interfejsów sieciowych z zastosowaniem różnych sieciowych grup zabezpieczeń. Podczas rozwiązywania problemów uruchom polecenie dla każdego interfejsu sieciowego.

Jeśli nadal masz problem z łącznością, zapoznaj się z dodatkową diagnozą i zagadnieniami.

Jeśli nie znasz nazwy interfejsu sieciowego, ale znasz nazwę maszyny wirtualnej, do której jest dołączony interfejs sieciowy, następujące polecenia zwracają identyfikatory wszystkich interfejsów sieciowych dołączonych do maszyny wirtualnej:

az vm show \
  --name myVM \
  --resource-group myResourceGroup

W zwróconych danych wyjściowych zobaczysz informacje podobne do następującego przykładu:

"networkProfile": {
    "additionalProperties": {},
    "networkInterfaces": [
      {
        "additionalProperties": {},
        "id": "/subscriptions/<ID>/resourceGroups/myResourceGroup/providers/Microsoft.Network/networkInterfaces/myVMVMNic",
        "primary": true,
        "resourceGroup": "myResourceGroup"
      },

W poprzednich danych wyjściowych nazwa interfejsu sieciowego to interfejs myVMVMNic.

Interpretowanie danych wyjściowych polecenia

Niezależnie od tego, czy użyto programu PowerShell, czy interfejsu wiersza polecenia platformy Azure do zdiagnozowania problemu, otrzymasz dane wyjściowe zawierające następujące informacje:

  • NetworkSecurityGroup: identyfikator sieciowej grupy zabezpieczeń.
  • Skojarzenie: określa, czy sieciowa grupa zabezpieczeń jest skojarzona z sieciąInterface , czy z podsiecią. Jeśli sieciowa grupa zabezpieczeń jest skojarzona z obydwoma grupami, dane wyjściowe są zwracane z wartościami NetworkSecurityGroup, Association i EffectiveSecurityRules dla każdej sieciowej grupy zabezpieczeń. Jeśli sieciowa grupa zabezpieczeń jest skojarzona lub nie jest skojarzona bezpośrednio przed uruchomieniem polecenia w celu wyświetlenia obowiązujących reguł zabezpieczeń, może być konieczne odczekanie kilku sekund, aby zmiana została odzwierciedlona w danych wyjściowych polecenia.
  • EffectiveSecurityRules: Objaśnienie każdej właściwości zostało szczegółowo opisane w temacie Tworzenie reguły zabezpieczeń. Nazwy reguł poprzedzone wartością defaultSecurityRules/ są domyślnymi regułami zabezpieczeń, które istnieją w każdej sieciowej grupie zabezpieczeń. Nazwy reguł poprzedzone regułami zabezpieczeńRules/ są regułami, które zostały utworzone. Reguły określające tag usługi, taki jak Internet, VirtualNetwork i AzureLoadBalancer dla właściwości destinationAddressPrefix lub sourceAddressPrefix , mają również wartości właściwości expandedDestinationAddressPrefix . Właściwość expandedDestinationAddressPrefix zawiera listę wszystkich prefiksów adresów reprezentowanych przez tag usługi.

Jeśli w danych wyjściowych są wyświetlane zduplikowane reguły, jest to spowodowane tym, że sieciowa grupa zabezpieczeń jest skojarzona zarówno z interfejsem sieciowym, jak i z podsiecią. Obie sieciowe grupy zabezpieczeń mają te same reguły domyślne i mogą mieć dodatkowe zduplikowane reguły, jeśli zostały utworzone własne reguły, które są takie same w obu sieciowych grupach zabezpieczeń.

Reguła o nazwie defaultSecurityRules/DenyAllInBound jest tym, co uniemożliwia komunikację przychodzącą do maszyny wirtualnej przez port 80 z Internetu, zgodnie z opisem w scenariuszu. Żadna inna reguła o wyższym priorytcie (niższym numerze) zezwala na ruch przychodzący z Internetu przez port 80.

Rozwiązywanie problemu

Niezależnie od tego, czy używasz witryny Azure Portal, programu PowerShell, czy interfejsu wiersza polecenia platformy Azure do diagnozowania problemu przedstawionego w tym artykule, rozwiązaniem jest utworzenie reguły zabezpieczeń sieci z następującymi właściwościami:

Właściwość Wartość
Źródło Dowolne
Zakresy portów źródłowych Dowolne
Element docelowy Adres IP maszyny wirtualnej, zakres adresów IP lub wszystkie adresy w podsieci.
Zakresy portów docelowych 80
Protokół TCP
Akcja Zezwalaj
Priorytet 100
Nazwa Allow-HTTP-All

Po utworzeniu reguły port 80 jest dozwolony dla ruchu przychodzącego z Internetu, ponieważ priorytet reguły jest wyższy niż domyślna reguła zabezpieczeń o nazwie DenyAllInBound, która blokuje ruch. Dowiedz się, jak utworzyć regułę zabezpieczeń. Jeśli różne sieciowe grupy zabezpieczeń są skojarzone zarówno z interfejsem sieciowym, jak i z podsiecią, należy utworzyć tę samą regułę w obu sieciowych grupach zabezpieczeń.

Gdy platforma Azure przetwarza ruch przychodzący, przetwarza reguły w sieciowej grupie zabezpieczeń skojarzonej z podsiecią (jeśli istnieje skojarzona sieciowa grupa zabezpieczeń), a następnie przetwarza reguły w sieciowej grupie zabezpieczeń skojarzonej z interfejsem sieciowym. Jeśli istnieje sieciowa grupa zabezpieczeń skojarzona z interfejsem sieciowym i podsiecią, port musi być otwarty w obu sieciowych grupach zabezpieczeń, aby ruch docierał do maszyny wirtualnej. Aby ułatwić administrowanie i problemy z komunikacją, zalecamy skojarzenie sieciowej grupy zabezpieczeń z podsiecią, a nie z poszczególnymi interfejsami sieciowymi. Jeśli maszyny wirtualne w podsieci wymagają różnych reguł zabezpieczeń, można ustawić elementy członkowskie interfejsów sieciowych grupy zabezpieczeń aplikacji (ASG) i określić grupę ASG jako źródło i miejsce docelowe reguły zabezpieczeń. Dowiedz się więcej o grupach zabezpieczeń aplikacji.

Jeśli nadal występują problemy z komunikacją, zobacz Zagadnienia i Dodatkowa diagnostyka.

Zagadnienia do rozważenia

Podczas rozwiązywania problemów z łącznością należy wziąć pod uwagę następujące kwestie:

  • Domyślne reguły zabezpieczeń blokują dostęp przychodzący z Internetu i zezwalają tylko na ruch przychodzący z sieci wirtualnej. Aby zezwolić na ruch przychodzący z Internetu, dodaj reguły zabezpieczeń o wyższym priorytcie niż reguły domyślne. Dowiedz się więcej o domyślnych regułach zabezpieczeń lub sposobie dodawania reguły zabezpieczeń.
  • Jeśli masz równorzędne sieci wirtualne, domyślnie tag usługi VIRTUAL_NETWORK automatycznie rozwija się w celu uwzględnienia prefiksów dla równorzędnych sieci wirtualnych. Aby rozwiązać problemy związane z komunikacją równorzędną sieci wirtualnych, możesz wyświetlić prefiksy na liście ExpandedAddressPrefix . Dowiedz się więcej na temat komunikacji równorzędnej sieci wirtualnych i tagów usługi.
  • Obowiązujące reguły zabezpieczeń są wyświetlane tylko dla interfejsu sieciowego, jeśli istnieje sieciowa grupa zabezpieczeń skojarzona z interfejsem sieciowym maszyny wirtualnej i, lub, podsieć, a jeśli maszyna wirtualna jest w stanie uruchomienia.
  • Jeśli nie ma sieciowych grup zabezpieczeń skojarzonych z interfejsem sieciowym lub podsiecią i masz publiczny adres IP przypisany do maszyny wirtualnej, wszystkie porty są otwarte dla dostępu przychodzącego z i wychodzącego dostępu do dowolnego miejsca. Jeśli maszyna wirtualna ma publiczny adres IP, zalecamy zastosowanie sieciowej grupy zabezpieczeń do podsieci interfejsu sieciowego.

Dodatkowa diagnostyka

  • Aby uruchomić szybki test w celu określenia, czy ruch do lub z maszyny wirtualnej jest dozwolony, użyj możliwości weryfikowania przepływu adresów IP usługi Azure Network Watcher. Weryfikacja przepływu adresów IP informuje, czy ruch jest dozwolony, czy blokowany. W przypadku odmowy weryfikacja przepływu adresów IP informuje, która reguła zabezpieczeń blokuje ruch.
  • Jeśli nie ma reguł zabezpieczeń powodujących niepowodzenie łączności sieciowej maszyny wirtualnej, problem może być spowodowany:
    • Oprogramowanie zapory działające w systemie operacyjnym maszyny wirtualnej
    • Trasy skonfigurowane dla urządzeń wirtualnych lub ruchu lokalnego. Ruch internetowy może być przekierowywany do sieci lokalnej za pośrednictwem wymuszonego tunelowania. W przypadku wymuszenia tunelowania ruchu internetowego do urządzenia wirtualnego lub lokalnego może nie być możliwe nawiązanie połączenia z maszyną wirtualną z Internetu. Aby dowiedzieć się, jak diagnozować problemy z trasą, które mogą utrudniać przepływ ruchu z maszyny wirtualnej, zobacz Diagnozowanie problemu z routingiem ruchu sieciowego maszyny wirtualnej.

Następne kroki