Τρεις διευθύνσεις πελάτη εμφανίζονται σε μια εγκατάσταση NGINX και OpenVPN στον ίδιο κεντρικό υπολογιστή, μία για κάθε διαδρομή που μπορεί να ακολουθήσει ένα αίτημα. Ένα πρόγραμμα περιήγησης που φτάνει στη διεύθυνση της σήραγγας, ένα που φτάνει στη δημόσια διεύθυνση και ένα πρόγραμμα που βγαίνει από τη διαδρομή διαδικτύου της πύλης φαίνονται όλα διαφορετικά στον υποδοχέα που ακούει. Αποφασίστε ποια διαδρομή κοιτάτε πριν ερμηνεύσετε τη γραμμή καταγραφής. Η απόφαση εξαρτάται από τον προορισμό που χρησιμοποίησε ο πελάτης, από την εξαίρεση που κρατά για το εξωτερικό τελικό σημείο VPN και από το αν κάτι μεταφράζει το πακέτο στη διαδρομή.

Αποφασίστε με βάση τον προορισμό, όχι ποιος είναι ο χρήστης

Ξεκινήστε από τη διεύθυνση στην οποία στάλθηκε το αίτημα, γιατί αυτή η διεύθυνση επιλέγει τη διαδρομή. Ένα αίτημα προς τη διεύθυνση σήραγγας του κεντρικού υπολογιστή φτάνει στη διεπαφή σήραγγας με την εσωτερική διεύθυνση του πελάτη ως πηγή. Ένα αίτημα προς τη δημόσια διεύθυνση του κεντρικού υπολογιστή συνήθως φτάνει στη διεπαφή που βλέπει προς το διαδίκτυο με τη δημόσια διεύθυνση του πελάτη, ακόμη και όταν ο ίδιος φορητός υπολογιστής έχει σήραγγα σε εκείνη τη στιγμή. Η ιδιότητα μέλους στη δεξαμενή VPN είναι επομένως ιδιότητα της διαδρομής του πακέτου, όχι ιδιότητα που ακολουθεί τον χρήστη.

Path the request tookSource the site normally records
Client reaches the site at its tunnel address, 10.24.0.1Client inner address, 10.24.0.20
Client reaches another internet site through the gatewayGateway public egress address, 192.0.2.44
Client reaches the gateway's public address through the endpoint exceptionClient's own public access address

Ακριβώς αυτή η τρίτη γραμμή αξίζει πρώτη έλεγχο όταν ένας χρήστης VPN εμφανίζεται στην καταγραφή με διεύθυνση που δεν έχει καμία σχέση με τη σήραγγα. Εξηγεί επίσης γιατί δύο χρήστες στο ίδιο προφίλ μπορούν να παράγουν διαφορετικές εγγραφές: τα δικά τους δίκτυα πρόσβασης διαφέρουν και τίποτα μέσα στη σήραγγα δεν το αντικαθιστά.

Γιατί το εξωτερικό τελικό σημείο δημιουργεί δεύτερη δημόσια διαδρομή

Ο πελάτης πρέπει να φτάσει στη δημόσια διεύθυνση της πύλης για να στήσει τη σήραγγα, άρα πρέπει να υπάρχει διαδρομή προς αυτή τη διεύθυνση έξω από τη σήραγγα. Όταν ένας πελάτης ανακατευθύνει όλη την κίνηση προς τα μέσα, μια λογική υλοποίηση κρατά ρητή διαδρομή υπολογιστή προς τη δημόσια διεύθυνση του διακομιστή για να αποφύγει σήραγγα που εξαρτάται από τον εαυτό της. Αυτή η εξαίρεση δεν επιλέγει υπηρεσίες, οπότε κάθε αίτημα προς την ίδια δημόσια διεύθυνση την ακολουθεί, μαζί με ένα αίτημα προγράμματος περιήγησης προς ιστότοπο που φιλοξενείται στην πύλη.

Αυτός είναι ο μηχανισμός πίσω από τις περισσότερες μπερδεμένες αναφορές σε αυτόν τον τομέα, και εξαρτάται από την υλοποίηση του πελάτη και όχι του διακομιστή. Δύο πελάτες με πανομοιότυπα προφίλ μπορούν επομένως να συμπεριφέρονται διαφορετικά. Η αφαίρεση της εξαίρεσης για να »διορθωθεί« η καταγραφή ρίχνει και τη σήραγγα, οπότε κρατήστε τη και σχεδιάστε γύρω της.

Διαβάστε μαζί τον υποδοχέα, τον πίνακα και τη μορφή καταγραφής

Τρεις παρατηρήσεις καθορίζουν ποια διαδρομή βλέπετε: πού ακούει ο υποδοχέας, ποια διεπαφή απαντά στον προορισμό και τι καταγράφει πραγματικά η μορφή καταγραφής. Αν ο ακροατής είναι δεσμευμένος μόνο στη διεύθυνση σήραγγας, ένα δημόσιο αίτημα δεν μπορεί να τον φτάσει καθόλου, κάτι που αποκλείει αμέσως δύο γραμμές. Αν η αναζήτηση για τον πελάτη επιστρέφει τη συσκευή σήραγγας, το αίτημα ήρθε με εσωτερική πηγή και η καταγραφή θα έπρεπε να το δείχνει.

ss -lntp 'sport = :443'
ip route get 10.24.0.20
ip route get 192.0.2.44

Έπειτα διαβάστε τη μορφή και όχι τη γραμμή. Ένα πεδίο που τροφοδοτείται από προωθημένη κεφαλίδα καταγράφει ισχυρισμό, όχι ομότιμο υποδοχέα, και ο ισχυρισμός μετρά μόνο όταν ο άμεσος ομότιμος είναι αξιόπιστος διαμεσολαβητής. Η εγγραφή και των δύο τιμών στην καταγραφή κλείνει μεταγενέστερες διαφωνίες, γιατί ο άμεσος ομότιμος και η υποκατεστημένη διεύθυνση είναι διαφορετικά γεγονότα και μόνο ένα από αυτά ήρθε από το δίκτυο.

log_format tunneled '$remote_addr $realip_remote_addr $request $status';
grep -n 'log_format' /etc/nginx/nginx.conf

Διαλέξτε το σημείο εισόδου που θέλετε και κάντε το DNS να συμφωνήσει

Αν ο ιστότοπος πρέπει να είναι μόνο μέσω σήραγγας, δώστε του όνομα που για τους πελάτες VPN επιλύεται στη διεύθυνση σήραγγας και επιβάλετε πολιτική στον υποδοχέα που ακούει. Μια απάντηση διαχωρισμένου DNS που επιστρέφει 10.24.0.1 για το εσωτερικό όνομα είναι απόφαση δρομολόγησης ντυμένη ως λεπτομέρεια επίλυσης ονομάτων. Αν ο ιστότοπος πρέπει να είναι και δημόσιος, κρατήστε δύο ονόματα ή δύο θύρες και αφήστε την καταγραφή να σας πει ποια εξυπηρέτησε το αίτημα.

Οι κανόνες αποδοχής ακολουθούν την ίδια λογική. Η αποδοχή της δεξαμενής σήραγγας δεν εξουσιοδοτεί δημόσιο αίτημα και δεν θα γεμίσει εσωτερική διεύθυνση σε σύνδεση που ήρθε μέσω διαδικτύου. Η ανάμειξη των δύο σημείων εισόδου κάτω από ένα όνομα κάνει την καταγεγραμμένη πηγή παρενέργεια της δρομολόγησης του πελάτη αντί για σχεδιαστική επιλογή.

Επαληθεύστε τη διαδρομή και μετά την πολιτική

Επιβεβαιώστε τη διαδρομή με σύλληψη στην πύλη και με αίτημα που ελέγχετε. Μια σύλληψη στη συσκευή σήραγγας και μία στη δημόσια διεπαφή δείχνουν ποια μετέφερε τα byte, και η σειρά των πακέτων σας λέει αν έγινε μετάφραση ανάμεσά τους.

tcpdump -ni tun0 port 443 -c 5
tcpdump -ni eth0 port 443 -c 5

Έπειτα επαληθεύστε την πρόσβαση και προς τις δύο κατευθύνσεις: το προβλεπόμενο ονομασμένο σημείο εισόδου λειτουργεί για τον προβλεπόμενο πελάτη, και μια μη εγκεκριμένη δημόσια διαδρομή απορρίπτεται αντί να είναι απλώς αργή. Ένας γενικός ιστότοπος ηχούς IP αποδεικνύει κάτι για την έξοδο της πύλης στο διαδίκτυο και τίποτα για αυτόν τον ιστότοπο στον ίδιο κεντρικό υπολογιστή. Όταν μια σελίδα και ένα WebSocket διαφωνούν, συγκρίνετε τα URL, τις οικογένειες διευθύνσεων και τις απαντήσεις DNS τους πριν αγγίξετε τη ρύθμιση του διακομιστή.

Σχετικά άρθρα