Cloud VPN σε VM του GCP: χρησιμοποιήστε την εσωτερική IP, όχι την IP του NAT
Το τελικό σημείο της πύλης, η εσωτερική διεύθυνση της VM και η εξωτερική διεύθυνση NAT ένα-προς-ένα έχουν τρεις διαφορετικές δουλειές. Ελέγξτε ποια χρησιμοποιεί η διαδρομή σας.
Όταν ένα τοπικό δίκτυο φτάνει σε ένα VPC μέσω Cloud VPN, ο προορισμός για μια υπηρεσία του Compute Engine είναι συνήθως η εσωτερική διεύθυνση της VM. Η εξωτερική διεύθυνση IPv4 δεν είναι μια δεύτερη διεύθυνση που μπορείτε να βάλετε στην ίδια ιδιωτική διαδρομή. Η περισσότερη σύγχυση εδώ προκύπτει επειδή τρεις διευθύνσεις με τρεις δουλειές αντιμετωπίζονται ως εναλλάξιμες, οπότε ξεκινήστε ονομάζοντας ποια χρησιμοποιεί ένα συγκεκριμένο πακέτο.
Τρεις διευθύνσεις, τρεις δουλειές
Ονομάστε και τις τρεις πριν κάνετε αποσφαλμάτωση σε οποιαδήποτε από αυτές, γιατί η απάντηση αλλάζει το αντικείμενο που θα εξετάσετε στη συνέχεια.
| Address | Job |
|---|---|
| Cloud VPN endpoint | where the IPsec peers meet |
| Internal IP | the address your route and firewall must name |
| External IPv4 | the platform's inbound mapping, not a guest address |
Η πρώτη ανήκει στη σήραγγα. Η δεύτερη ανήκει στον σχεδιασμό της διαδρομής και του τείχους προστασίας σας. Η τρίτη ανήκει στην εισερχόμενη πρόσβαση από το διαδίκτυο και αντιστοιχίζεται, δεν προσαρτάται. Ένας σχεδιασμός που λειτουργεί για μία από αυτές δεν λέει τίποτα για τις άλλες δύο.
Γιατί η εξωτερική διεύθυνση δεν είναι δεύτερο interface
Ο οδηγός διευθυνσιοδότησης είναι η αυθεντία για το πώς διαφέρουν η εσωτερική και η εξωτερική προσβασιμότητα στο Compute Engine. Μια εξωτερική IPv4 του Compute Engine είναι μια αντιστοίχιση ένα-προς-ένα πάνω στη μοναδική εσωτερική NIC του στιγμιοτύπου, έτσι ο επισκέπτης δεν βλέπει ποτέ δεύτερο interface ή δεύτερη διεύθυνση σε αυτή τη NIC. Αυτό που αναφέρει η VM εσωτερικά παραμένει μία κύρια εσωτερική διεύθυνση.
Γι' αυτό ένας ιδιωτικός πελάτης που δρομολογεί μέσω της σήραγγας προς 10.24.1.7 και ένας πελάτης που στοχεύει την εξωτερική διεύθυνση της VM βρίσκονται σε διαφορετικές διαδρομές. Το άνοιγμα ενός κανόνα τείχους προστασίας για τη δημόσια διεύθυνση δεν αλλάζει τίποτα στη διαδρομή του VPC που πρέπει να μεταφέρει την κίνηση της σήραγγας, και η επεξεργασία μιας διαδρομής στον επισκέπτη δεν μετακινεί την αντιστοίχιση της πλατφόρμας. Επιλέξτε τη διεύθυνση που ονομάζει η διαδρομή σας και μετά ελέγξτε μόνο τα αντικείμενα που την κυβερνούν. Αυτή η πειθαρχία αφαιρεί το μεγαλύτερο μέρος της εικασίας από αυτή τη διαδρομή αντιμετώπισης προβλημάτων.
Περπατήστε τη διαδρομή με το gcloud
Ξεκινήστε από το στιγμιότυπο και διαβάστε και τις δύο διευθύνσεις από το ίδιο αντικείμενο, ώστε να ξέρετε για ποια μιλάει η τεκμηρίωσή σας:
gcloud compute instances describe app-1 --zone=europe-west1-b \
--format="value(networkInterfaces[0].networkIP,networkInterfaces[0].accessConfigs[0].natIP)"Στη συνέχεια επιβεβαιώστε τη δρομολόγηση και την άδεια από τις οποίες εξαρτάται πραγματικά η διαδρομή:
gcloud compute routes list --filter="destRange:10.24.1.0/24"
gcloud compute firewall-rules list --filter="sourceRanges:10.99.0.0/24"
gcloud compute vpn-tunnels describe TUNNEL_NAME --region=europe-west1Διαβάστε τις ανακοινωμένες και εκμαθημένες περιοχές της σήραγγας, τη διαδρομή VPC για το υποδίκτυο του φόρτου εργασίας και τον κανόνα τείχους προστασίας που επιτρέπει την τοπική πηγή. Αυτά τα τρία πρέπει να συμφωνούν πριν ένας ακροατής στον επισκέπτη είναι καν σχετικός.
Στη συνέχεια ελέγξτε τον επισκέπτη: ακούει η υπηρεσία στην εσωτερική διεύθυνση και επιστρέφει η διαδρομή επιστροφής της πίσω μέσω του VPC; Ένας ακροατής συνδεδεμένος μόνο σε δημόσια διεύθυνση θα αποτύχει σε αυτή τη δοκιμή ακόμη και όταν κάθε αντικείμενο στην πλευρά του cloud είναι σωστό.
Ένα δημόσιο πρόθεμα είναι άλλο ζήτημα
Τίποτα από τα παραπάνω δεν σημαίνει ότι κάθε διεύθυνση που μεταφέρεται μέσα σε ένα VPN πρέπει να είναι RFC1918. Ένα απομακρυσμένο δίκτυο μπορεί νόμιμα να αριθμηθεί από δημόσιο χώρο, εφόσον η πλατφόρμα υποστηρίζει τη δρομολόγηση και ο χειριστής έχει την εξουσία της διεύθυνσης. Αυτή είναι μια φυσιολογική σχεδιαστική επιλογή.
Δεν είναι το ίδιο με το να αντιμετωπίζετε μια συνηθισμένη εξωτερική διεύθυνση NAT σαν να ήταν άλλη μια εσωτερική διεύθυνση υποδικτύου. Η μία είναι πρόθεμα που δρομολογείτε· η άλλη είναι αντιστοίχιση που εφαρμόζει η πλατφόρμα στην εισερχόμενη πρόσβαση.
Η εξωτερική IPv6 και οι ειδικά σχεδιασμένες διατάξεις διευθύνσεων έχουν τη δική τους σημασιολογία. Αν το σχέδιό σας εξαρτάται από μία από αυτές, διαβάστε την τεκμηρίωση της πλατφόρμας για αυτή τη δυνατότητα αντί να γενικεύετε από την περίπτωση IPv4. Η αντιστοίχιση IPv4 είναι η συνήθης περίπτωση, όχι η μόνη, και οι εξαιρέσεις έχουν η καθεμία τους κανόνες της.
Οι επικαλυπτόμενες περιοχές είναι άλλο πρόβλημα
Οι επικαλυπτόμενες ιδιωτικές περιοχές είναι πραγματικός λόγος που οι άνθρωποι καταφεύγουν στη δημόσια διεύθυνση, και είναι το λάθος μοχλό. Η αλλαγή του προορισμού στη διεύθυνση NAT της VM δεν λύνει την επικάλυψη· αλλάζει για ποια διεύθυνση ισχυρίζεται το πακέτο ότι είναι, χωρίς να ορίζει πώς λειτουργεί η διαδρομή επιστροφής.
Λύστε την επικάλυψη σκόπιμα: επαναριθμήστε, χρησιμοποιήστε έναν υποστηριζόμενο σχεδιασμό μετάφρασης ή δρομολογήστε μέσα από δίκτυο όπου τα προθέματα δεν συγκρούονται. Κάθε ένα από αυτά είναι σχεδιασμός με υπεύθυνο. Η διεύθυνση NAT δεν είναι σχεδιασμός.
Τεκμηριώστε τα δύο πεδία χωριστά
Καταγράψτε τον ομότιμο της σήραγγας και τον προορισμό του φόρτου εργασίας ως δύο ξεχωριστά πεδία runbook, το καθένα με τη διαδρομή και τον κανόνα τείχους προστασίας που το στηρίζουν. Μια σήραγγα IPsec που ανεβαίνει σας λέει μόνο ότι οι πλευρές συμφωνούν· δεν λέει τίποτα για το σε ποια διεύθυνση είναι προσβάσιμος ο φόρτος εργασίας, ούτε για το αν η ιδιωτική διαδρομή του είναι πλήρης.
Επαληθεύστε με πραγματικό πελάτη στην άλλη πλευρά: επιλύστε το όνομα, επιβεβαιώστε ότι επιστρέφει την εσωτερική διεύθυνση, συνδεθείτε και ελέγξτε την κίνηση επιστροφής. Η τεκμηρίωση διευθύνσεων IP του Compute Engine είναι η αναφορά για τη διάκριση εσωτερικού-εξωτερικού που χρησιμοποιείται παραπάνω.