Diagnozowanie problemu z filtrowaniem ruchu sieciowego maszyny wirtualnej
Z tego artykułu 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ą kontrolowanie typów ruchu, który przepływa do i z 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órą 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ęć dotyczących sieci wirtualnej, interfejsu sieciowego lub sieciowej grupy zabezpieczeń, zobacz Omówienie sieci wirtualnej, Interfejs sieciowy i Sieciowe grupy zabezpieczeń — omówienie.
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 z tego artykułu. 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 odpowiednio dla maszyny wirtualnej, dla której diagnozujesz problem.
Diagnozowanie przy użyciu witryny Azure Portal
Zaloguj się do witryny Azure Portal przy użyciu konta platformy Azure, które ma niezbędne uprawnienia.
W górnej części witryny Azure Portal wprowadź nazwę maszyny wirtualnej w polu wyszukiwania. Gdy nazwa maszyny wirtualnej pojawi się w wynikach wyszukiwania, wybierz ją.
W obszarze USTAWIENIA wybierz pozycję Sieć, jak pokazano na poniższej ilustracji:
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. Poniżej znajdują się 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ć o 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ługi. Tagi usługi reprezentują grupę prefiksów adresów IP, aby zminimalizować złożoność tworzenia reguł zabezpieczeń.
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:
Wymienione reguły są takie same jak w kroku 3, chociaż istnieją różne karty sieciowej grupy zabezpieczeń skojarzone z interfejsem sieciowym i podsiecią. Jak widać na ilustracji, wyświetlane są tylko 50 pierwszych reguł. Aby pobrać plik .csv zawierający wszystkie reguły, wybierz pozycję Pobierz.
Aby zobaczyć, które prefiksy reprezentuje każdy tag usługi, wybierz regułę, taką jak reguła o nazwie AllowAzureLoadBalancerInbound. Na poniższej ilustracji przedstawiono prefiksy tagu usługi AzureLoadBalancer :
Chociaż tag usługi AzureLoadBalancer reprezentuje tylko jeden prefiks, inne tagi usługi reprezentują kilka prefiksów.
W poprzednich krokach pokazano reguły zabezpieczeń interfejsu sieciowego o nazwie myVMVMNic, ale w niektórych z poprzednich obrazów był również widoczny interfejs sieciowy o nazwie myVMVMNic2. 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 go. Jak pokazano na poniższej ilustracji, interfejs sieciowy ma te same reguły skojarzone z 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.
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 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ą sieciowa grupa zabezpieczeń można skojarzyć z dowolną liczbą interfejsów sieciowych i podsieci, które wybierzesz.
Chociaż 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:
- Interfejs sieciowy: dowiedz się, jak wyświetlić interfejs sieciowy.
- Sieciowa grupa zabezpieczeń: dowiedz się, jak wyświetlić sieciową grupę zabezpieczeń.
Diagnozowanie przy użyciu programu PowerShell
Uwaga
Do interakcji z platformą Azure zalecamy używanie modułu Azure Az w programie PowerShell. Aby rozpocząć, zobacz Instalowanie programu Azure PowerShell. 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ć następujące polecenia w usłudze Azure Cloud Shell lub uruchomić program 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. W przypadku uruchamiania programu PowerShell z komputera potrzebny jest moduł 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, który znajduje się 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 używasz interfejsu wiersza polecenia platformy Azure lokalnie, musisz również uruchomić az login
platformę Azure i zalogować się do platformy Azure przy użyciu konta, które ma niezbędne uprawnienia.
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ą 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:
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, otrzymujesz 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 podsiecią. Jeśli sieciowa grupa zabezpieczeń jest skojarzona z obydwoma grupami zabezpieczeń, dane wyjściowe są zwracane z regułami NetworkSecurityGroup, Association i EffectiveSecurityRules dla każdej sieciowej grupy zabezpieczeń. Jeśli sieciowa grupa zabezpieczeń jest skojarzona lub odłączona 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: Wyjaś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 utworzono własne reguły, które są takie same w obu sieciowych grupach zabezpieczeń.
Reguła o nazwie defaultSecurityRules/DenyAllInBound to, co uniemożliwia komunikację przychodzącą z maszyną wirtualną 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ści | Wartość |
---|---|
Lokalizacja źródłowa | 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 |
Nazwisko | Zezwalaj na 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 dotarł 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żesz ustawić członków 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.
Kwestie wymagające 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 na temat domyślnych reguł zabezpieczeń lub sposobu dodawania reguły zabezpieczeń.
- Jeśli sieci wirtualne są domyślnie równorzędne, tag usługi VIRTUAL_NETWORK automatycznie rozwija się w celu uwzględnienia prefiksów dla równorzędnych sieci wirtualnych. Aby rozwiązać wszelkie 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 lub 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żna przekierować 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 zdiagnozować 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
- Dowiedz się więcej o wszystkich zadaniach, właściwościach i ustawieniach sieciowej grupy zabezpieczeń i reguł zabezpieczeń.
- Dowiedz się więcej o domyślnych regułach zabezpieczeń, tagach usługi oraz o tym, jak platforma Azure przetwarza reguły zabezpieczeń dla ruchu przychodzącego i wychodzącego dla maszyny wirtualnej.