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

Το σύμπτωμα έχει ένα κομμάτι που λείπει κάθε φορά

Αυτή η σχεδίαση χρησιμοποιεί μια δεξαμενή WireGuard 10.71.0.0/24 στη wg1 και μια δεξαμενή OpenVPN 10.72.0.0/24 στη tun1, με τις δύο να τερματίζουν σε μία πύλη. Το αίτημα υπό δοκιμή πηγαίνει από το 10.71.0.5 σε HTTPS στο 10.72.0.30. Κάθε βήμα παρακάτω αφορά αυτή τη μία ροή. Κάθε έλεγχος έχει διαφορετική υπογραφή αποτυχίας αν και ο χρήστης τα βιώνει ίδια, και συνήθως λείπει μόνο ένα από τα τρία κάθε φορά.

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

Επεκτείνετε την κάλυψη προορισμού του κόμβου ακτίνας

Στον πελάτη WireGuard, η υπάρχουσα καταχώριση ομοτίμου πρέπει να επιλέγει την πύλη για τον προορισμό OpenVPN, που σημαίνει ότι το πρόθεμα προορισμού πρέπει να εμφανίζεται στη λίστα επιτρεπόμενων αυτού του ομοτίμου. Η προσθήκη του δεν δημιουργεί δεύτερη σήραγγα· αλλάζει ποιον ομότιμο επιλέγει ο πελάτης όταν αναζητά αυτή τη διεύθυνση, και με το wg-quick η διαδρομή ακολουθεί συνήθως τη λίστα αυτόματα.

AllowedIPs = 10.71.0.0/24, 10.72.0.0/24

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

Κρατήστε την κυριότητα της πηγής στην πύλη

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

AllowedIPs = 10.71.0.5/32

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

Δώστε στην πλευρά OpenVPN μια διαδρομή επιστροφής

Ο προορισμός χρειάζεται τώρα μια διαδρομή πίσω στην πηγή WireGuard, και για πελάτες από δεξαμενή συνήθως φτάνει ως διαδρομή που ωθείται από τον διακομιστή OpenVPN. Ωθήστε την μόνο σε πελάτες που πρέπει να την έχουν, και επιβεβαιώστε στον πελάτη ότι έγινε δεκτή αντί να υποθέσετε ότι εφαρμόστηκε η οδηγία.

push "route 10.71.0.0 255.255.255.0"

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

Επιτρέψτε ακριβώς την υπηρεσία που σκοπεύατε να επιτρέψετε

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

sudo ufw --dry-run route allow in on wg1 out on tun1 proto tcp from 10.71.0.5 to 10.72.0.30 port 443

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

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

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