AWS Client VPN συνδεδεμένο αλλά χωρίς πρόσβαση στο διαδίκτυο: έλεγχος διαδρομών
Συνδεδεμένο AWS Client VPN χωρίς πρόσβαση στο διαδίκτυο; Ελέγξτε τις διαδρομές του πελάτη, την εξουσιοδότηση του endpoint, την έξοδο της υποδικτύου και το DNS με αυτή τη σειρά.
Είστε συνδεδεμένοι στο endpoint του AWS Client VPN, το ιδιωτικό υποδίκτυο απαντά, και κάθε δημόσια σελίδα λήγει σε timeout. Αυτός ο συνδυασμός περιορίζει το πρόβλημα σε ένα από τρία αντικείμενα στην πλευρά που διαχειρίζεστε: τη διαδρομή που εγκαθιστά ο πελάτης, τη διαδρομή του endpoint μαζί με τον κανόνα εξουσιοδότησής της, ή το επόμενο άλμα του συσχετισμένου υποδικτύου. Τις ελέγχω με αυτή τη σειρά, γιατί κάθε αποτυχία φαίνεται διαφορετική από την πλευρά του πελάτη. Αυτός ο οδηγός καλύπτει το διαχειριζόμενο endpoint που σχετίζεται με VPC, όχι διακομιστή OpenVPN σε instance EC2 και όχι σύνδεση Cloud WAN ή Transit Gateway.
Ξεκινήστε από το τι δρομολογεί πραγματικά ο πελάτης
Μια κατάσταση συνδεδεμένη αποδεικνύει τη συνεδρία TLS και την εκχώρηση CIDR στον πελάτη, τίποτε άλλο. Ρωτήστε το λειτουργικό σύστημα πού θα πήγαινε μια δημόσια διεύθυνση όσο το τούνελ είναι ενεργό. Στο Linux, ip route get 1.1.1.1 θα πρέπει να ονομάζει τη διεπαφή του τούνελ· στο macOS, netstat -rn -f inet | head -5 δείχνει την προεπιλεγμένη καταχώρηση· στα Windows, Find-NetRoute -RemoteIPAddress 1.1.1.1 εκτυπώνει τη διεπαφή που επιλέχθηκε και το επόμενο άλμα.
Διαβάστε μετά τη σημαία split-tunnel, γιατί καθορίζει αν οι δημοσιευμένες διαδρομές του endpoint είναι οι μόνες προορισμοί που στέλνει ο πελάτης στο τούνελ:
aws ec2 describe-client-vpn-endpoints \
--client-vpn-endpoint-ids cvpn-endpoint-0123456789abcdef0 \
--query 'ClientVpnEndpoints[0].SplitTunnel'Όταν το SplitTunnel είναι true, ένας δημόσιος προορισμός χρησιμοποιεί το τούνελ μόνο όταν το endpoint δημοσιεύει διαδρομή που τον καλύπτει, οπότε μια απούσα 0.0.0.0/0 αφήνει αυτή την κίνηση στη τοπική διεπαφή. Όταν είναι false, ο πελάτης συλλαμβάνει την κίνηση, αλλά το endpoint πρέπει ακόμη να τη δρομολογήσει και να την εξουσιοδοτήσει· αλλιώς τα πακέτα μπαίνουν στο τούνελ και σταματούν εκεί. Επανασυνδέστε τον πελάτη αφού αλλάξετε οποιαδήποτε από τις δύο ρυθμίσεις, γιατί οι διαδρομές και οι διακομιστές DNS παραδίδονται κατά τη σύνδεση και ένας ενεργός πελάτης μπορεί να κρατήσει το παλιό σύνολο.
Διαβάστε τη διαδρομή του endpoint και τον κανόνα εξουσιοδότησης ξεχωριστά
Είναι δύο αντικείμενα, και η δημιουργία του ενός δεν δημιουργεί το άλλο. Καταγράψτε τις διαδρομές του endpoint και αναζητήστε μια προεπιλεγμένη της οποίας ο στόχος είναι συσχετισμένο υποδίκτυο:
aws ec2 describe-client-vpn-routes \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0Κάθε διαδρομή έχει ακριβώς ένα υποδίκτυο-στόχο, άρα τρεις συσχετίσεις χρειάζονται αντίστοιχη προεπιλεγμένη διαδρομή η καθεμία. Η AWS τεκμηριώνει αυτή την απαίτηση κάλυψης, και το πρακτικό σύμπτωμα ενός κενού είναι χρήστης που εργάζεται από ένα υποδίκτυο και κολλάει από άλλο, κάτι που διαβάζεται ως διακοπτόμενη βλάβη αντί για απούσα διαδρομή. Η επίσημη τεκμηρίωση σεναρίου του Client VPN περιγράφει τη διάταξη δημόσιου υποδικτύου στην οποία ανήκουν αυτές οι διαδρομές.
Η εξουσιοδότηση είναι το δεύτερο αντικείμενο. Όταν κανένας κανόνας δεν καλύπτει τον δημόσιο προορισμό, το τούνελ μεταφέρει το πακέτο και η υπηρεσία το απορρίπτει, οπότε οι ιδιωτικοί πόροι συνεχίζουν να λειτουργούν ενώ το διαδίκτυο όχι:
aws ec2 describe-client-vpn-authorization-rules \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0Ένας κανόνας για το CIDR του VPC δεν λέει τίποτε για το 0.0.0.0/0. Η προσθήκη των κομματιών που λείπουν για πλήρες τούνελ σημαίνει μία διαδρομή ανά συσχετισμένο υποδίκτυο συν έναν κανόνα εξουσιοδότησης που μπορείτε να ελέγξετε αργότερα:
aws ec2 create-client-vpn-route \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
--destination-cidr-block 0.0.0.0/0 \
--target-vpc-subnet-id subnet-0a1b2c3d4e5f67890
aws ec2 create-client-vpn-authorization-rule \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
--destination-cidr-block 0.0.0.0/0 \
--access-all \
--description "internet egress for full tunnel"--access-all παραχωρεί τον προορισμό σε κάθε πελάτη του endpoint, γι’ αυτό κρατήστε το μόνο όσο το τούνελ πρέπει να είναι πλήρες· ένας κανόνας δεσμευμένος σε ομάδα καταλόγου είναι προτιμότερος όταν έχετε ομάδες για δέσμευση.
Ακολουθήστε το πακέτο έξω από το συσχετισμένο υποδίκτυο
Η διαδρομή του endpoint αποφασίζει ότι η AWS παραδίδει το πακέτο σε εκείνο το υποδίκτυο. Δεν αποφασίζει το επόμενο άλμα πέρα από αυτό, που ζει στον δικό του πίνακα διαδρομών VPC του υποδικτύου:
aws ec2 describe-route-tables \
--filters Name=association.subnet-id,Values=subnet-0a1b2c3d4e5f67890 \
--query 'RouteTables[].Routes[?DestinationCidrBlock==`0.0.0.0/0`]'Μια χρησιμοποιήσιμη προεπιλεγμένη διαδρομή δείχνει σε internet gateway για δημόσιο υποδίκτυο ή σε NAT gateway για ιδιωτικό, και κατάσταση blackhole σημαίνει ότι ο στόχος διαγράφηκε και η διαδρομή πεθαίνει τώρα σιωπηλά. Είναι διαφορετικοί πίνακες από τη λίστα διαδρομών του endpoint, και η επιδιόρθωση του ενός δεν επιδιορθώνει τον άλλο.
Σε αυτό το άλμα κάθονται δύο φίλτρα. Η ομάδα ασφαλείας που εφαρμόζεται στη συσχέτιση δικτύου-στόχο πρέπει να επιτρέπει εξερχόμενη κίνηση προς τον δημόσιο προορισμό, και οποιοδήποτε εφαρμοστέο ACL δικτύου πρέπει να επιτρέπει το αίτημα και την επιστρεφόμενη κίνηση σε εφήμερες θύρες. Μια περιοριστική ομάδα ασφαλείας συσχέτισης είναι συνηθισμένος λόγος που η ιδιωτική πρόσβαση λειτουργεί ενώ η δημόσια όχι.
Επιλέξτε το πρώτο στρώμα από το σύμπτωμα αντί να αλλάξετε και τα τρία μαζί:
| What you observe | Layer to check first |
|---|---|
| No tunnel interface for a public IP | Client route or split-tunnel flag |
| Tunnel interface chosen, request times out | Endpoint route and authorization rule |
| Endpoint route present, still times out | Subnet route table, association security group |
| Named host fails, numeric address works | DNS servers and their own authorization |
Διαχωρίστε την αποτυχία DNS από μια νεκρή διαδρομή
Η επίλυση ονομάτων αποτυγχάνει διαφορετικά από την προώθηση, και το πλήρες τούνελ κάνει τη διαφορά σημαντική γιατί ο resolver που ωθήθηκε φτάνει πλέον μέσα από το τούνελ. Αν το endpoint ορίζει διακομιστές DNS του VPC, οι διευθύνσεις τους χρειάζονται κάλυψη διαδρομής και εξουσιοδότηση όπως κάθε άλλος προορισμός. Ρωτήστε τον resolver απευθείας για να δείτε ποια αποτυχία έχετε: dig +short example.com @10.0.0.2, ή nslookup example.com 10.0.0.2 στα Windows.
Όταν ένα αριθμητικό URL απαντά και ένα ονομαστικό όχι, σταματήστε να επεξεργάζεστε την προεπιλεγμένη διαδρομή και δουλέψτε στο DNS. Ένα αίτημα σε διεύθυνση IP δεν αποδεικνύει τίποτε για έναν ονομαστικό εικονικό host και το πιστοποιητικό του, γι’ αυτό κρατήστε ένα ονομαστικό τεστ στον τελικό έλεγχο.
Ο χρονισμός βοηθά. Μια σύνδεση TCP που δεν παίρνει απάντηση μέσα σε λίγα δευτερόλεπτα δείχνει δρομολόγηση ή φίλτρο, ενώ ένα αίτημα που κρέμεται μέσα στην αναζήτηση ονόματος δείχνει τον resolver. Η αλλαγή της προεπιλεγμένης διαδρομής όσο ο resolver είναι απρόσιτος τείνει να μετατρέψει μια αποτυχία σε δύο.
Επαναφέρετε καθαρά και μετά επαληθεύστε τη διαδρομή εξόδου
Και τα δύο αντικείμενα ήταν προσθετικά, άρα η επαναφορά είναι διαγραφή και όχι επιδιόρθωση:
aws ec2 delete-client-vpn-route \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
--destination-cidr-block 0.0.0.0/0 \
--target-vpc-subnet-id subnet-0a1b2c3d4e5f67890
aws ec2 delete-client-vpn-authorization-rule \
--client-vpn-endpoint-id cvpn-endpoint-0123456789abcdef0 \
--destination-cidr-block 0.0.0.0/0 \
--access-allΕπανασυνδεθείτε και επιβεβαιώστε από ποια διαδρομή βγαίνει η κίνηση. Συγκρίνετε τη δημόσια διεύθυνση που παρατηρήσατε με την ελαστική διεύθυνση IP του NAT gateway ή με το internet gateway που σκοπεύατε να χρησιμοποιήσετε, και ελέγξτε ότι ένας ιδιωτικός πόρος απαντά ακόμη στην ίδια συνεδρία.
Τελειώστε με μια σύντομη λίστα και αντιμετωπίστε το τελευταίο στοιχείο ως μέρος της αλλαγής και όχι ως τεκμηρίωση:
- Μία
0.0.0.0/0διαδρομή endpoint για κάθε συσχετισμένο υποδίκτυο. - Ένας κανόνας εξουσιοδότησης που καλύπτει το
0.0.0.0/0για τους πελάτες που θέλετε να εξυπηρετήσετε. - Προεπιλεγμένη διαδρομή VPC που δεν είναι σε κατάσταση blackhole σε κάθε συσχετισμένο υποδίκτυο.
- Έξοδος της ομάδας ασφαλείας συσχέτισης, συν επιστρεφόμενη κίνηση ACL.
- Διευθύνσεις resolver δρομολογημένες και εξουσιοδοτημένες, επαληθευμένες με ονομαστικό αίτημα.
- Καταγεγραμμένη επαναφορά για τη διαδρομή και τον κανόνα.
Μια σημείωση εύρους: αυτή είναι διαδρομή IPv4. Ένας πελάτης dual-stack κρατά όποια συνδεσιμότητα IPv6 έχει ήδη, άρα μια προεπιλεγμένη διαδρομή IPv6 είναι ξεχωριστή απόφαση με δική της εξουσιοδότηση και όχι παρενέργεια αυτής.