Använda källnätverksadressöversättning (SNAT) för utgående anslutningar
Vissa scenarier kräver att virtuella datorer eller beräkningsinstanser har utgående anslutning till Internet. Frontend-IP-adresser för en offentlig Azure-lastbalanserare kan användas för att tillhandahålla utgående anslutning till Internet för backend-instanser. Den här konfigurationen använder källnätverksadressöversättning (SNAT) för att översätta den virtuella datorns privata IP-adress till Load Balancer offentliga IP-adress. SNAT mappar IP-adressen för backend till lastbalanseras offentliga IP-adress. SNAT förhindrar att externa källor har en direkt adress till backend-instanserna.
Azures utgående anslutningsmetoder
Utgående anslutning till Internet kan aktiveras på följande sätt i Azure:
| # | Metod | Typ av portallokering | Produktionsklass? | Omdöme |
|---|---|---|---|---|
| 1 | Använda IP-adresserna på Load Balancer utgående via regler för utgående trafik | Statiskt, explicit | Ja, men inte i stor skala | OK |
| 2 | Koppla en NAT-gateway till undernätet | Statiskt, explicit | Yes | Bästa |
| 3 | Tilldela en offentlig IP-adress till den virtuella datorn | Statiskt, explicit | Yes | OK |
| 4 | Använda utgående standardåtkomst | Implicit | No | Värsta |
1. Använda IP-adressen för en lastbalanserare på frontend-sidan för utgående trafik via regler för utgående trafik
Med regler för utgående trafik kan du uttryckligen definiera SNAT (källnätverksadressöversättning) för en offentlig standard-Load Balancer. Med den här konfigurationen kan du använda den offentliga IP-adressen eller IP-adressen för lastbalanseraren för utgående anslutning av serverinstanserna.
Den här konfigurationen aktiverar:
- IP-maskering
- Förenkla dina lista över tillåtna
- Minskar antalet offentliga IP-resurser för distribution
Med regler för utgående trafik har du fullständig deklarativ kontroll över utgående Internetanslutning. Med regler för utgående trafik kan du skala och justera den här möjligheten efter dina specifika behov via manuell portallokering. Genom att manuellt allokera SNAT-porten baserat på storleken på backend-poolen och antalet frontendIPConfigurations kan du undvika SNAT-utmattning.
Du kan allokera SNAT-portar manuellt antingen med "portar per instans" eller "maximalt antal instanser i backend". Om du Virtual Machines i backend-instansen rekommenderar vi att du allokerar portar efter "portar per instans" för att få maximal användning av SNAT-porten.
Portar per instans ska beräknas enligt nedan:
Antal IP-adresser för frontend * 64 000/antal instanser i backend
Om du Virtual Machine Scale Sets i backend-instansen rekommenderar vi att du allokerar portar med "maximalt antal instanser i backend". Om fler virtuella datorer läggs till i serverdatorn än återstående tillåtna SNAT-portar är det möjligt att skalning av VM-skalningsuppsättningen blockeras eller att de nya virtuella datorerna inte får tillräckligt med SNAT-portar.
Mer information om regler för utgående trafik finns i Regler för utgående trafik.
2. Koppla en NAT-gateway till undernätet
Virtual Network NAT förenklar utgående Internetanslutning för virtuella nätverk. När den konfigureras i ett undernät använder alla utgående anslutningar dina angivna statiska offentliga IP-adresser. Utgående anslutning är möjlig utan lastbalanserare eller offentliga IP-adresser som är direkt kopplade till virtuella datorer. NAT är fullständigt hanterad och mycket motståndskraftig.
Att använda en NAT-gateway är den bästa metoden för utgående anslutning. En NAT-gateway är mycket utökningsbar, tillförlitlig och har inte samma problem med SNAT-portutmattning.
Mer information om Azure Virtual Network NAT finns i Vad är Azure Virtual Network NAT.
3. Tilldela en offentlig IP-adress till den virtuella datorn
| Sammanslutningar | Metod | IP-protokoll |
|---|---|---|
| Offentlig IP på den virtuella datorns nätverkskort | SNAT (källnätverksadressöversättning) används inte. | TCP (Transmission Control Protocol) UDP (User Datagram Protocol) ICMP (Internet Control Message Protocol) ESP (inkapsling av säkerhetsnyttolast) |
Trafiken återgår till den begärande klienten från den virtuella datorns offentliga IP-adress (IP på instansnivå).
Azure använder den offentliga IP-adress som tilldelats IP-konfigurationen för instansens nätverkskort för alla utgående flöden. Instansen har alla tillfälliga portar tillgängliga. Det spelar ingen roll om den virtuella datorn är belastningsutjämnad eller inte. Det här scenariot har företräde framför de andra.
En offentlig IP-adress som tilldelats en virtuell dator är en 1:1-relation (i stället för 1: många) och implementeras som en tillståndslös NAT 1:1 NAT.
4. Utgående standardåtkomst
Anteckning
Den här metoden rekommenderas INTE för produktionsarbetsbelastningar eftersom den ökar risken för att portar tar slut. Undvik potentiella anslutningsfel genom att inte använda den här metoden för produktionsarbetsbelastningar.
Alla Azure-resurser som inte har någon offentlig IP-adress kopplad till sig, som inte har en Load Balancer med regler för utgående trafik framför sig, som inte är en del av ett flexibelt orkestreringsläge för vm-skalningsuppsättningar eller som inte har en NAT-gatewayresurs kopplad till dess undernät allokeras ett minimalt antal portar för utgående trafik. Den här åtkomsten kallas för utgående standardåtkomst och är den sämsta metoden för att tillhandahålla utgående anslutning för dina program.
Några andra exempel på utgående standardåtkomst är:
- när du använder Basic-Load Balancer
- en virtuell dator i Azure (utan de associationer som nämns ovan). I det här fallet tillhandahålls utgående anslutningar av standard-IP för utgående åtkomst. Den här IP-adressen är en dynamisk IP-adress som tilldelas av Azure och som du inte kan styra. Standard-SNAT rekommenderas inte för produktionsarbetsbelastningar och kan orsaka anslutningsfel.
- Virtuell dator i backend-poolen för en Load Balancer utan regler för utgående trafik. Därför använder du ip-adressen för en lastbalanserare på frontend-sidan för utgående och inkommande och är mer känslig för anslutningsfel från SNAT-portbelastning.
Vad är SNAT-portar?
Portar används för att generera unika identifierare som används för att underhålla distinkta flöden. Internet använder en femtuppeln för att ge den här skillnaden.
Om en port används för inkommande anslutningar har den en lyssnare för inkommande anslutningsbegäranden på den porten. Den porten kan inte användas för utgående anslutningar. För att upprätta en utgående anslutning används en ohemlig port för att förse målet med en port för att kommunicera och underhålla ett distinkt trafikflöde. När dessa tillfälliga portar används för SNAT kallas de SNAT-portar.
Per definition har varje IP-adress 65 535 portar. Varje port kan antingen användas för inkommande eller utgående anslutningar för TCP (Transmission Control Protocol) och UDP (User Datagram Protocol). När en offentlig IP-adress läggs till som en IP-adress på en frontend till en lastbalanserare är 64 000 portar berättigade till SNAT. Även om alla offentliga IP-adresser som läggs till som IP-adresser för frontend kan allokeras, används ip-adresser för frontend en i taget. Om till exempel två backend-instanser tilldelas 64 000 portar vardera, med åtkomst till 2 IP-adresser för frontend, använder båda backend-instanserna portar från den första IP-adressen tills alla 64 000 portar har förbrukats.
En port som används för en belastningsutjämning eller en inkommande NAT-regel förbrukar åtta portar från de 64 000 portarna. Den här användningen minskar antalet portar som är berättigade till SNAT. Om en belastningsutjämning eller inkommande NAT-regel är i samma intervall på åtta som en annan använder den inte extra portar.
Hur fungerar standard-SNAT?
När en virtuell dator skapar ett utgående flöde översätter Azure källans IP-adress till en ohemlig IP-adress. Den här översättningen görs via SNAT.
Om du använder SNAT utan regler för utgående trafik via en offentlig Load Balancer allokeras SNAT-portar i förväg enligt beskrivningen i standardtabellen för allokering av SNAT-portar nedan.
Standardportallokeringstabell
I följande tabell visas SNAT-portförplatser för poolstorlekar i backend:en:
| Poolstorlek (VM-instanser) | SNAT-standardportar per IP-konfiguration |
|---|---|
| 1-50 | 1,024 |
| 51-100 | 512 |
| 101-200 | 256 |
| 201-400 | 128 |
| 401-800 | 64 |
| 801-1,000 | 32 |
Uttömningsportar
Varje anslutning till samma mål-IP och målport använder en SNAT-port. Den här anslutningen upprätthåller ett distinkt trafikflöde från serverinstansen eller klienten till en server. Den här processen ger servern en distinkt port som trafiken ska adressera. Utan den här processen är klientdatorn inte medveten om vilket flöde ett paket ingår i.
Imagine har flera webbläsare som går https://www.microsoft.com till , vilket är:
- Mål-IP = 23.53.254.142
- Målport = 443
- Protokoll = TCP
Utan olika målportar för returtrafiken (SNAT-porten som används för att upprätta anslutningen) kan klienten inte separera ett frågeresultat från ett annat.
Utgående anslutningar kan burst-användas. En backend-instans kan tilldelas otillräckliga portar. Använd funktionerna för återanvändning av anslutningar i ditt program. Om anslutningen inte återanvänds ökar risken för SNAT-portutmattning. Mer information om anslutningspooler med Azure App Service finns i Felsöka tillfälliga utgående anslutningsfel i Azure App Service
Nya utgående anslutningar till en mål-IP-adress misslyckas när portutökningen inträffar. Anslutningar lyckas när en port blir tillgänglig. Den här uttömningen uppstår när de 64 000 portarna från en IP-adress sprids tunt över många backend-instanser. Vägledning om hur du åtgärdar SNAT-portutmattning finns i felsökningsguiden.
För TCP-anslutningar använder lastbalanseraren en enda SNAT-port för varje mål-IP och port. Den här multianvändningen möjliggör flera anslutningar till samma mål-IP med samma SNAT-port. Den här multianvändningen är begränsad om anslutningen inte är till olika målportar.
För UDP-anslutningar använder lastbalanseraren en portbegränsad NAT-algoritm med en SNAT-port per mål-IP oavsett målport.
En port återanvänds för ett obegränsat antal anslutningar. Porten återanvänds endast om mål-IP-adressen eller porten skiljer sig åt.
Villkor
- När en anslutning är inaktiv utan att några nya paket skickas släpps portarna efter 4–120 minuter.
- Det här tröskelvärdet kan konfigureras via regler för utgående trafik.
- Varje IP-adress innehåller 64 000 portar som kan användas för SNAT.
- Varje port kan användas för både TCP- och UDP-anslutningar till en ip-måladress
- En UDP SNAT-port krävs oavsett om målporten är unik eller inte. För varje UDP-anslutning till en mål-IP används en UDP SNAT-port.
- En TCP SNAT-port kan användas för flera anslutningar till samma mål-IP förutsatt att målportarna skiljer sig åt.
- SNAT-utmattning inträffar när en backend-instans får slut på angivna SNAT-portar. En lastbalanserare kan fortfarande ha oanvända SNAT-portar. Om en backend-instanss använda SNAT-portar överskrider de angivna SNAT-portarna kan den inte upprätta nya utgående anslutningar.
- Fragmenterade paket tas bort om inte utgående är via en offentlig IP-adress på instansnivå på den virtuella datorns nätverkskort.
- Sekundära IP-konfigurationer för ett nätverksgränssnitt gör inte utgående kommunikation (såvida inte en offentlig IP-adress är associerad med den) via Load Balancer.
Nästa steg
- Felsöka fel med utgående anslutningar på grund av SNAT-uttömning
- Granska SNAT-mått och bekanta dig med rätt sätt att filtrera, dela och visa dem.