Source Network Address Translation (SNAT) gebruiken voor uitgaande verbindingen
Voor bepaalde scenario's is een uitgaande verbinding met internet vereist voor virtuele machines of reken-exemplaren. De front-end-VIP's van een openbare Azure load balancer kunnen worden gebruikt om uitgaande connectiviteit met internet te bieden voor back-end-exemplaren. Deze configuratie maakt gebruik van SNAT (Source Network Address Translation) om het privé-IP-adres van de virtuele machine om te zetten in Load Balancer ip-adres van de virtuele machine. SNAT wijs het IP-adres van de back-end toe aan het openbare IP-adres van uw load balancer. SNAT voorkomt dat externe bronnen een direct adres naar de back-end-exemplaren hebben.
De uitgaande connectiviteitsmethoden van Azure
Uitgaande connectiviteit met internet kan op de volgende manieren worden ingeschakeld in Azure:
| # | Methode | Type poorttoewijzing | Productiekwaliteit? | Waardering |
|---|---|---|---|---|
| 1 | Het gebruik van de front-end-IP-adressen van een Load Balancer voor uitgaand verkeer via uitgaande regels | Statisch, expliciet | Ja, maar niet op schaal | OK |
| 2 | Een NAT-gateway koppelen aan het subnet | Statisch, expliciet | Yes | Beste |
| 3 | Een openbaar IP-adres toewijzen aan de virtuele machine | Statisch, expliciet | Yes | OK |
| 4 | Standaard uitgaande toegang gebruiken | Impliciet | No | Ergste |
1. Het front-end-IP-adres van een load balancer voor uitgaand verkeer via uitgaande regels
Met uitgaande regels kunt u SNAT (bronnetwerkadresvertaling) expliciet definiëren voor een standaard openbare Load Balancer. Met deze configuratie kunt u het openbare IP-adres of IP-adressen van uw load balancer voor uitgaande connectiviteit van de back-end-exemplaren.
Met deze configuratie kunt u het volgende doen:
- IP-adressering
- Uw allowlists vereenvoudigen
- Vermindert het aantal openbare IP-resources voor implementatie
Met uitgaande regels hebt u volledige declaratieve controle over uitgaande internetverbinding. Met uitgaande regels kunt u deze mogelijkheid schalen en afstemmen op uw specifieke behoeften via handmatige poorttoewijzing. Het handmatig toewijzen van de SNAT-poort op basis van de grootte van de back-endpool en het aantal frontendIPConfigurations kan helpen SNAT-uitputting te voorkomen.
U kunt handmatig SNAT-poorten toewijzen op 'poorten per exemplaar' of 'maximum aantal back-end-exemplaren'. Als u een Virtual Machines in de back-Virtual Machines, is het raadzaam om poorten toe te wijzen op basis van 'poorten per exemplaar' om het maximale SNAT-poortgebruik te krijgen.
Poorten per exemplaar moeten worden berekend zoals hieronder:
Aantal front-end-IP's * 64k/aantal back-end-exemplaren
Als u een Virtual Machine Scale Sets back-Virtual Machine Scale Sets, is het raadzaam om poorten toe te wijzen op 'maximum aantal back-end-exemplaren'. Als er meer VM's aan de back-end worden toegevoegd dan de resterende toegestane SNAT-poorten, is het mogelijk dat omhoog schalen van de virtuele-machineschaalset wordt geblokkeerd of dat de nieuwe VM's onvoldoende SNAT-poorten ontvangen.
Zie Regels voor uitgaand verkeer voor meer informatie over uitgaande regels.
2. Een NAT-gateway koppelen aan het subnet
Virtual Network NAT vereenvoudigt alleen uitgaande internetverbinding voor virtuele netwerken. Indien geconfigureerd op een subnet, maken alle uitgaande verbindingen gebruik van uw opgegeven statische openbare IP-adressen. Uitgaande connectiviteit is mogelijk zonder load balancer of openbare IP-adressen die rechtstreeks zijn gekoppeld aan virtuele machines. NAT is volledig beheerd en in hoge mate tolerant.
Het gebruik van een NAT-gateway is de beste methode voor uitgaande connectiviteit. Een NAT-gateway is uiterst extensible, betrouwbaar en heeft niet dezelfde zorgen over SNAT-poortuitputting.
Zie Wat is Azure Virtual Network NAT voor meer informatie over Azure Virtual Network NAT.
3. Een openbaar IP-adres toewijzen aan de virtuele machine
| Verenigingen | Methode | IP-protocollen |
|---|---|---|
| Openbaar IP-adres op de NIC van de VM | SNAT (Source Network Address Translation) wordt niet gebruikt. | TCP (Transmission Control Protocol) UDP (User Datagram Protocol) ICMP (Internet Control Message Protocol) ESP (Inkapsulating Security Payload) |
Verkeer keert terug naar de aanvragende client vanaf het openbare IP-adres van de virtuele machine (IP op exemplaarniveau).
Azure gebruikt het openbare IP-adres dat is toegewezen aan de IP-configuratie van de NIC van het exemplaar voor alle uitgaande stromen. Het exemplaar heeft alle kortstondige poorten beschikbaar. Het maakt niet uit of de VM al dan niet met load balanced is. Dit scenario heeft voorrang op de andere scenario's.
Een openbaar IP-adres dat is toegewezen aan een VM is een 1:1-relatie (in plaats van 1: veel) en geïmplementeerd als een staatloze 1:1 NAT.
4. Standaard uitgaande toegang
Notitie
Deze methode wordt NIET aanbevolen voor productieworkloads, omdat hierdoor het risico op uitputting van poorten wordt toegevoegd. Gebruik deze methode niet voor productieworkloads om mogelijke verbindingsfouten te voorkomen.
Elke Azure-resource die niet is gekoppeld aan een openbaar IP-adres, geen Load Balancer met uitgaande regels ervoor, maakt geen deel uit van de flexibele orchestrationmodus van virtuele-machineschaalsets of er is geen NAT-gatewayresource aan het subnet gekoppeld, krijgt een minimaal aantal poorten voor uitgaand verkeer toegewezen. Deze toegang staat bekend als Standaard uitgaande toegang en is de slechtste methode om uitgaande connectiviteit voor uw toepassingen te bieden.
Enkele andere voorbeelden van standaard uitgaande toegang zijn:
- bij het gebruik van Basic Load Balancer
- een virtuele machine in Azure (zonder de hierboven genoemde verbanden). In dit geval wordt uitgaande connectiviteit geleverd door het standaard-IP-adres voor uitgaande toegang. Dit IP-adres is een dynamisch IP-adres dat door Azure is toegewezen en dat u niet kunt controleren. Standaard-SNAT wordt niet aanbevolen voor productieworkloads en kan leiden tot connectiviteitsfouten.
- VM in de back-endpool van een Load Balancer zonder uitgaande regels. Als gevolg hiervan gebruikt u het front-end-IP-adres van een load balancer voor uitgaand en inkomende verbindingen en bent u gevoeliger voor connectiviteitsfouten door uitputting van de SNAT-poort.
Wat zijn SNAT-poorten?
Poorten worden gebruikt voor het genereren van unieke id's die worden gebruikt voor het onderhouden van afzonderlijke stromen. Internet gebruikt een vijf-tuple om dit onderscheid te maken.
Als een poort wordt gebruikt voor binnenkomende verbindingen, heeft deze een listener voor binnenkomende verbindingsaanvragen op die poort. Deze poort kan niet worden gebruikt voor uitgaande verbindingen. Als u een uitgaande verbinding tot stand wilt brengen, wordt een kortstondige poort gebruikt om de bestemming een poort te bieden waarmee een afzonderlijke verkeersstroom kan worden gecommuniceerd en onderhouden. Wanneer deze kortstondige poorten worden gebruikt voor SNAT, worden ze SNAT-poorten genoemd.
Elk IP-adres heeft per definitie 65.535 poorten. Elke poort kan worden gebruikt voor binnenkomende of uitgaande verbindingen voor TCP (Transmission Control Protocol) en UDP (User Datagram Protocol). Wanneer een openbaar IP-adres wordt toegevoegd als een front-end-IP-adres aan een load balancer, komen 64.000 poorten in aanmerking voor SNAT. Hoewel alle openbare IP's die worden toegevoegd als front-end-IP's kunnen worden toegewezen, worden front-end-VIP's één voor één verbruikt. Als aan twee back-end-exemplaren bijvoorbeeld elk 64.000 poorten worden toegewezen, met toegang tot twee front-end-IP-adressen, verbruiken beide back-end-exemplaren poorten van het eerste front-end-IP-adres totdat alle 64.000 poorten zijn uitgeput.
Een poort die wordt gebruikt voor een load balancing- of binnenkomende NAT-regel verbruikt acht poorten van de 64.000 poorten. Dit gebruik vermindert het aantal poorten dat in aanmerking komt voor SNAT. Als een load balancing- of inkomende NAT-regel zich in hetzelfde bereik van acht als een andere ligt, worden er geen extra poorten gebruikt.
Hoe werkt standaard-SNAT?
Wanneer een VM een uitgaande stroom maakt, vertaalt Azure het bron-IP-adres naar een kortstondig IP-adres. Deze vertaling wordt uitgevoerd via SNAT.
Als u SNAT gebruikt zonder uitgaande regels via een openbare Load Balancer, worden SNAT-poorten vooraf toegewezen, zoals beschreven in de standaardtoewijzingstabel voor SNAT-poorten hieronder.
Standaardtabel voor poorttoewijzing
In de volgende tabel ziet u de vooraf toegewezen SNAT-poort voor de grootte van back-endpools:
| Poolgrootte (VM-exemplaren) | Standaard-SNAT-poorten per IP-configuratie |
|---|---|
| 1-50 | 1.024 |
| 51-100 | 512 |
| 101-200 | 256 |
| 201-400 | 128 |
| 401-800 | 64 |
| 801-1,000 | 32 |
Poorten uitputten
Elke verbinding met hetzelfde doel-IP-adres en dezelfde doelpoort gebruikt een SNAT-poort. Deze verbinding onderhoudt een afzonderlijke verkeersstroom van het back-end-exemplaar of de client naar een server. Dit proces geeft de server een afzonderlijke poort waarop het verkeer moet worden aangepakt. Zonder dit proces weet de clientmachine niet van welke stroom een pakket deel uitmaakt.
Imagine meerdere browsers naar https://www.microsoft.com gaan, dat wil zeggen:
- Doel-IP = 23.53.254.142
- Doelpoort = 443
- Protocol = TCP
Zonder verschillende doelpoorten voor het retourverkeer (de SNAT-poort die wordt gebruikt om de verbinding tot stand te brengen), kan de client het ene queryresultaat niet van de andere scheiden.
Uitgaande verbindingen kunnen bursts hebben. Er kunnen onvoldoende poorten worden toegewezen aan een back-end-exemplaar. Gebruik de functionaliteit voor hergebruik van verbindingen in uw toepassing. Zonder hergebruik van verbindingen wordt het risico van uitputting van de SNAT-poort verhoogd. Zie Troubleshooting intermittent outbound connection errors in Azure App Service Azure App Service (Problemen met onregelmatige uitgaande verbindingsfouten in Azure App Service) voor meer informatie over het groeperen van verbindingen met Azure App Service
Nieuwe uitgaande verbindingen naar een doel-IP-adres mislukken wanneer poortuitputting optreedt. Verbindingen slagen wanneer een poort beschikbaar komt. Deze uitputting treedt op wanneer de 64.000 poorten van een IP-adres thin zijn verspreid over veel back-end-exemplaren. Zie de gids voor probleemoplossing voor hulp bij het beperken van SNAT-poortuitputting.
Voor TCP-verbindingen gebruikt de load balancer één SNAT-poort voor elk doel-IP en elke poort. Deze multiuse maakt meerdere verbindingen met hetzelfde doel-IP met dezelfde SNAT-poort mogelijk. Deze multi-use is beperkt als de verbinding niet naar andere doelpoorten gaat.
Voor UDP-verbindingen maakt de load balancer gebruik van een nat-algoritme met poortbeperking, dat één SNAT-poort per doel-IP gebruikt, ongeacht de doelpoort.
Een poort wordt opnieuw gebruikt voor een onbeperkt aantal verbindingen. De poort wordt alleen opnieuw gebruikt als het doel-IP of de doelpoort anders is.
Beperkingen
- Wanneer een verbinding niet actief is en er geen nieuwe pakketten worden verzonden, worden de poorten na 4 tot 120 minuten vrijgegeven.
- Deze drempelwaarde kan worden geconfigureerd via uitgaande regels.
- Elk IP-adres biedt 64.000 poorten die kunnen worden gebruikt voor SNAT.
- Elke poort kan worden gebruikt voor zowel TCP- als UDP-verbindingen met een doel-IP-adres
- Er is een UDP SNAT-poort nodig, ongeacht of de doelpoort uniek is of niet. Voor elke UDP-verbinding met een doel-IP wordt één UDP SNAT-poort gebruikt.
- Een TCP SNAT-poort kan worden gebruikt voor meerdere verbindingen met hetzelfde doel-IP-adres, mits de doelpoorten anders zijn.
- SNAT-uitputting treedt op wanneer een back-end-exemplaar geen SNAT-poorten meer heeft. Een load balancer kan nog steeds ongebruikte SNAT-poorten hebben. Als de gebruikte SNAT-poorten van een back-exemplaar de opgegeven SNAT-poorten overschrijden, kan het geen nieuwe uitgaande verbindingen tot stand brengen.
- Gefragmenteerde pakketten worden uitgevallen, tenzij uitgaand via een openbaar IP-adres op exemplaarniveau op de NIC van de VM is.
- Secundaire IP-configuraties van een netwerkinterface bieden geen uitgaande communicatie (tenzij er een openbaar IP-adres aan is gekoppeld) via Load Balancer.
Volgende stappen
- Uitgaande verbindingsfouten vanwege SNAT-uitputting oplossen
- Controleer de metrische gegevens van SNAT en lees hoe u ze op de juiste manier kunt filteren, splitsen en weergeven.