Γιατί το Azure Point-to-Site VPN δεν αλλάζει τη δημόσια IP σας
Ένα τούνελ point-to-site μεταφέρει μόνο διαδρομές του εικονικού δικτύου, οπότε η δημόσια IP σας μένει τοπική έως ότου η εξαναγκασμένη σήραγγα και το SNAT του τείχους προστασίας μεταφέρουν την έξοδο στο Azure.
Συνδέω τον πελάτη Azure VPN σε φορητό υπολογιστή Windows, ανοίγω μια σελίδα ανάκλασης διεύθυνσης και βλέπω την ίδια δημόσια διεύθυνση που έδωσε το οικιακό μου ρούτερ. Στο μεταξύ το jump box στη 10.20.0.4 απαντά και ένα όνομα ιδιωτικού endpoint επιλύεται, άρα το τούνελ δεν είναι χαλασμένο. Μια πύλη point-to-site κάνει ακριβώς αυτό που λέει η προεπιλεγμένη διαμόρφωσή της: μεταφέρει τα ιδιωτικά προθέματα και αφήνει όλα τα άλλα στον τοπικό σύνδεσμο. Το να αποκτήσετε διεύθυνση εξόδου που ανήκει στο Azure είναι αλλαγή σχεδίασης δρομολόγησης, όχι επισκευή.
Τι διαφημίζει η πύλη από προεπιλογή
Η πύλη σπρώχνει διαδρομές για τον χώρο διευθύνσεων του εικονικού δικτύου, συν ομότιμα δίκτυα όπου επιτρέπεται η διέλευση πύλης και τοπικά προθέματα που μαθαίνονται μέσω σύνδεσης site-to-site ή BGP. Δεν υπάρχει 0.0.0.0/0 σε αυτό το σύνολο. Το λειτουργικό σας σύστημα κρατά την προεπιλεγμένη διαδρομή στο Wi-Fi ή στο Ethernet, οπότε ένα πακέτο προς δημόσιο API δεν μπαίνει ποτέ στο τούνελ.
Η διεύθυνση που λαμβάνει ένας πελάτης μέσα στο τούνελ είναι ιδιωτική μίσθωση από τη δεξαμενή point-to-site. Αναγνωρίζει τον πελάτη στους πόρους του VNet· δεν είναι διεύθυνση που μπορεί να δει το διαδίκτυο και δεν θα εμφανιστεί ποτέ ως πηγή εξερχόμενου αιτήματος προς API SaaS. Μια καταχώριση allowlist χτισμένη γύρω από αυτή τη μίσθωση δεν μπορεί να δουλέψει, όσο κι αν περιμένετε να εμφανιστεί στα αρχεία καταγραφής του προμηθευτή.
Split tunnel και εξαναγκασμένη σήραγγα δίπλα δίπλα
| Split tunnel, the default | Forced tunneling | |
|---|---|---|
| Internet traffic exits through | local ISP or office router | firewall or appliance inside Azure |
| Source address the API sees | your home or office IP | the firewall public IP |
| Inspection and logging in Azure | none | policy rules plus flow logs |
| Ongoing cost | gateway only | gateway, firewall hours, data processing |
| What usually breaks | nothing on the egress path | DNS, on-premises routes, overlapping local ranges |
Μόνο η δεύτερη γραμμή αλλάζει τη διεύθυνση που βλέπει μια απομακρυσμένη υπηρεσία. Όλα τα άλλα σε αυτόν τον πίνακα είναι κόστος και επιφάνεια λειτουργίας που δέχεστε όταν η έξοδος πρέπει να ελεγχθεί ή να μεταφραστεί μέσα στο Azure. Αν κάποιος σας ζητήσει να αλλάξει η δημόσια IP, ζητά ολόκληρη τη δεξιά στήλη, όχι μια μικρορύθμιση στον πελάτη.
Υπάρχει μια ενδιάμεση επιλογή που αξίζει να ονομαστεί πριν ξαναχτίσετε οτιδήποτε. Ένα VM διαμεσολαβητή ή πύλης μέσα στο VNet σας δίνει μια ελεγχόμενη διεύθυνση πηγής για τις εφαρμογές που μπορούν να στραφούν σε αυτό, χωρίς να μετακινήσετε την προεπιλεγμένη διαδρομή του πελάτη. Αυτό κρατά την κανονική περιήγηση τοπική και ικανοποιεί ακόμη έναν συνεργάτη που χρειάζεται μόνο μία κλήση API να φτάσει από το Azure. Αποτυγχάνει όταν η απαίτηση αφορά πραγματικά όλη την κίνηση, γιατί ό,τι αγνοεί τη ρύθμιση διαμεσολαβητή εξακολουθεί να βγαίνει τοπικά.
Κάντε το τούνελ να μεταφέρει την προεπιλεγμένη διαδρομή
Σε μια πύλη εικονικού δικτύου, ο υποστηριζόμενος τρόπος να κατευθύνετε όλη την κίνηση internet του πελάτη στο τούνελ είναι να προσθέσετε προσαρμοσμένες διαδρομές στη διαμόρφωση point-to-site. Δύο μισά καλύπτουν όλο τον χώρο IPv4 και καθένα είναι πιο συγκεκριμένο από την τοπική προεπιλεγμένη διαδρομή, οπότε ο πελάτης τα προτιμά χωρίς να διαγράψει τίποτα:
Set-AzVirtualNetworkGateway -VirtualNetworkGateway GWOBJ -CustomRoute 0.0.0.0/1,128.0.0.0/1
Αυτή η γραμμή είναι ενδεικτική και όχι έτοιμη για αντιγραφή: πάρτε πρώτα το αντικείμενο της πύλης με Get-AzVirtualNetworkGateway και βάλτε το στη θέση του GWOBJ, και επιβεβαιώστε ότι το SKU και το μοντέλο ανάπτυξης δέχονται προσαρμοσμένες διαδρομές πριν το εκτελέσετε. Τα ίδια προθέματα εμφανίζονται στην πύλη στη σελίδα διαμόρφωσης point-to-site, που είναι το ασφαλέστερο σημείο για να τα ορίσετε αν δεν κάνετε ήδη script την πύλη.
Η αλλαγή αυτών των προθεμάτων ακυρώνει το πακέτο πελάτη. Κατεβάστε ξανά το πακέτο πελάτη VPN και εγκαταστήστε το πάλι, γιατί οι διαδρομές ταξιδεύουν μέσα στο προφίλ. Ένας πελάτης που επανασυνδέεται με το παλιό του προφίλ κρατά το παλιό σύνολο διαδρομών, και μπορεί να χάσετε μια ώρα εντοπίζοντας σφάλμα σε μια αλλαγή που δεν έφτασε ποτέ σε αυτόν.
Σε ένα ασφαλές hub εικονικού WAN, το αντίστοιχο είναι μια προεπιλεγμένη διαδρομή στον πίνακα διαδρομών του hub που σχετίζεται με την πύλη point-to-site, με το Azure Firewall στο hub να παίρνει την κίνηση. Το τείχος προστασίας μεταφράζει τις συνδέσεις προς το διαδίκτυο στις δικές του δημόσιες διευθύνσεις IP, και από αυτή τη μετάφραση προέρχεται η νέα διεύθυνση εξόδου. Όταν ένα τείχος προστασίας έχει πολλές δημόσιες IP, οποιαδήποτε από αυτές μπορεί να εμφανιστεί ως πηγή, οπότε μια allowlist πρέπει να τις περιέχει όλες.
Και τα δύο σχέδια παραπάνω είναι IPv4. Τα δύο προθέματα /1 δεν κάνουν τίποτα για το IPv6, και η υποστήριξη IPv6 του point-to-site είναι αρκετά στενή ώστε να δοκιμάσετε τον συνδυασμό πριν υποσχεθείτε ισοτιμία.
Ελέγξτε τη διαδρομή και μετά την έξοδο
Αφού επανεγκαταστήσετε το πακέτο και επανασυνδεθείτε, επιβεβαιώστε ότι ο πελάτης εγκατέστησε πράγματι τα μισά. Στα Windows, το Get-NetRoute -DestinationPrefix 0.0.0.0/1 και το ίδιο ερώτημα για το 128.0.0.0/1 θα πρέπει να ονομάζουν τη διεπαφή του τούνελ, και το route print δείχνει και τα δύο δίπλα στην αρχική σας προεπιλεγμένη διαδρομή. Στο Linux, το ip route show πρέπει να απαριθμεί τα δύο προθέματα· αν όχι, το προφίλ δεν τα μετέφερε ποτέ.
Έπειτα ελέγξτε ξανά τη δημόσια διεύθυνση από τον πελάτη και διαβάστε το αρχείο καταγραφής του τείχους προστασίας για την ίδια σύνδεση. Η πηγή θα πρέπει να είναι η δημόσια IP του τείχους προστασίας με μεταφρασμένη θύρα. Ένας πελάτης που εξακολουθεί να βγαίνει τοπικά ενώ υπάρχουν και οι δύο διαδρομές σημαίνει ότι τα πακέτα έφτασαν στο Azure και έφυγαν από άλλη διαδρομή: μια διαδρομή ορισμένη από τον χρήστη στο υποδίκτυο της πύλης, ένα τείχος προστασίας που το ίδιο εξαναγκάζεται σε τούνελ προς το τοπικό δίκτυο, ή μια πολιτική που απορρίπτει τη ροή πριν από τη μετάφραση.
Δοκιμάστε ξανά έναν ιδιωτικό προορισμό στην ίδια συνεδρία. Ένας jump host που σταματά να απαντά μετά την αλλαγή είναι το συνηθισμένο σημάδι ότι τα νέα προθέματα εκτόπισαν κάτι, είτε μια στενότερη τοπική διαδρομή που διαφημιζόταν πριν είτε την επίλυση ονομάτων που τώρα πηγαίνει σε resolver χωρίς forwarder για τις ιδιωτικές σας ζώνες.
Πότε να αφήσετε το split tunnel ήσυχο
Αν ο στόχος είναι μόνο να φτάσετε σε ένα ιδιωτικό API, ένα ιδιωτικό endpoint ή μια εσωτερική σελίδα διαχείρισης, η προεπιλεγμένη συμπεριφορά είναι φθηνότερη και πιο ήσυχη. Η εξαναγκασμένη σήραγγα προσθέτει ώρες τείχους προστασίας και χρεώσεις επεξεργασίας δεδομένων, μακρύτερη διαδρομή και ένα ακόμη σημείο όπου κάθε ροή πελάτη μπορεί να αποτύχει. Συλλαμβάνει επίσης πολύ περισσότερη κίνηση από τον μοναδικό προορισμό που σας ενδιέφερε.
Καταφύγετε σε αυτή όταν η απαίτηση διατυπώνεται με όρους εξόδου: ένας συνεργάτης πρέπει να βλέπει σταθερή διεύθυνση Azure, η ασφάλεια θέλει οι συνδέσεις να καταγράφονται και να ελέγχονται, ή τα δεδομένα πρέπει να φεύγουν από ένα ελεγχόμενο σημείο. Ακόμη και τότε το σχέδιο δίνει σε κάθε χρήστη κοινή έξοδο, οπότε η λογοδοσία ανά χρήστη πρέπει να προέρχεται από την ταυτότητα στην εφαρμογή και όχι από τη διεύθυνση πηγής.
Πριν κλείσετε την αλλαγή, επιβεβαιώστε τέσσερα πράγματα: το εγκατεστημένο πακέτο πελάτη είναι το νέο, οι δύο διαδρομές /1 βρίσκονται στη διεπαφή του τούνελ, ένας ιδιωτικός προορισμός απαντά ακόμη, και το αρχείο καταγραφής της απομακρυσμένης υπηρεσίας δείχνει τη διεύθυνση του τείχους προστασίας.