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

Τρεις συνθήκες που καθορίζουν τον σχεδιασμό

Πρώτον, χρειάζεστε το ακριβές πρόθεμα και τη μάσκα από τον ιδιοκτήτη του δικτύου. Το δίκτυο 10.x δεν είναι πρόθεμα, ενώ το 10.20.0.0/16 είναι. Επιβεβαιώστε ότι δεν επικαλύπτεται με το οικιακό σας LAN, με μια γέφυρα Docker ή με άλλο VPN που τρέχετε, γιατί μια επικάλυψη κάνει τη διαδρομή αμφίσημη και ο πυρήνας διαλέγει την εγγραφή που δεν σκοπεύατε.

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

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

WireGuard: το AllowedIPs είναι ο πίνακας διαδρομών

Στον πελάτη, το AllowedIPs απαριθμεί τους προορισμούς που επιτρέπεται να μπουν στη σήραγγα, και το wg-quick μετατρέπει κάθε εγγραφή σε συνηθισμένη διαδρομή. Άρα το μισό του πελάτη σε αυτή την εργασία είναι μία γραμμή.

[Peer]
PublicKey = ...
Endpoint = vpn.example.net:51820
AllowedIPs = 10.20.0.0/16

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

[Peer]
PublicKey = ...
AllowedIPs = 10.99.0.2/32

Η ανταλλαγή αυτών των δύο είναι το λάθος που βλέπω πιο συχνά. Το να βάλετε το 10.20.0.0/16 στην ενότητα peer του διακομιστή δηλώνει ότι ολόκληρο το υποδίκτυο βρίσκεται πίσω από αυτόν τον πελάτη, που είναι αξίωση site-to-site και όχι άδεια. Τα πακέτα που δεν ταιριάζουν με το AllowedIPs κανενός peer απορρίπτονται σιωπηλά, οπότε μια λανθασμένη εγγραφή μοιάζει ακριβώς με πρόβλημα τείχους προστασίας.

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

OpenVPN: προωθήστε τη διαδρομή και μετά βεβαιωθείτε ότι έφτασε

Σε έναν κανονικό διακομιστή η αλλαγή είναι μία οδηγία στη ρύθμιση του διακομιστή, δίπλα στη δεξαμενή πελατών.

push "route 10.20.0.0 255.255.0.0"

Ο πελάτης την προσθέτει όταν συνδέεται. Η αποτυχία φαίνεται όταν το ίδιο προφίλ προωθεί και το redirect-gateway, ή όταν κάποιος έχει ήδη προσθέσει το route-nopull: το πρώτο κάνει τη συνεδρία πλήρη σήραγγα και το δεύτερο πετάει κάθε προωθημένη διαδρομή, μαζί με τη δική σας.

Ένας πελάτης που χρειάζεται στενή συμπεριφορά απέναντι σε διακομιστή πλήρους σήραγγας πρέπει να αγνοεί μόνο τα μέρη που δεν θέλει. Στο OpenVPN 2.4 και μετά, το pull-filter υπάρχει ακριβώς γι' αυτό.

pull-filter ignore "redirect-gateway"
route 10.20.0.0 255.255.0.0

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

Όταν το ιδιωτικό υποδίκτυο δεν είναι στον διακομιστή VPN αλλά πίσω από άλλον πελάτη, ο διακομιστής πρέπει να ενημερωθεί. Προσθέστε ένα αρχείο ανά πελάτη μέσω του client-config-dir που να περιέχει το iroute 10.20.0.0 255.255.0.0, μαζί με το αντίστοιχο route ώστε να μάθουν οι άλλοι πελάτες τη διαδρομή. Χωρίς το iroute ο διακομιστής δεν έχει λόγο να στείλει αυτό το πρόθεμα μέσα από εκείνη τη συγκεκριμένη σήραγγα.

IPsec: οι επιλογείς κίνησης πρέπει να συμφωνήσουν

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

leftsubnet=192.168.1.0/24
rightsubnet=10.20.0.0/16

Αν η πύλη είναι ρυθμισμένη με 0.0.0.0/0 και στις δύο πλευρές, η στένωση IKEv2 συνήθως μειώνει τη θυγατρική SA στην τομή των δύο προτάσεων, που είναι το επιθυμητό αποτέλεσμα. Μερικές πύλες όμως απορρίπτουν μια πρόταση που δεν ταιριάζει με τους ρυθμισμένους επιλογείς τους, και τότε το αρχείο καταγραφής δείχνει αποτυχημένη θυγατρική SA και όχι παράπονο για δρομολόγηση. Όταν συμβεί αυτό, η αλλαγή ανήκει στην πύλη, γιατί μια διαδρομή στον πελάτη δεν μπορεί να δημιουργήσει σήραγγα για επιλογέα που η άλλη πλευρά δεν θα δεχτεί.

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

Set-VpnConnection -Name Office -SplitTunneling $true
Add-VpnConnectionRoute -ConnectionName Office -DestinationPrefix 10.20.0.0/16

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

Κρατήστε το τελικό σημείο και το DNS έξω από την απόφαση

Το τελικό σημείο του VPN πρέπει να μένει προσβάσιμο χωρίς τη σήραγγα, αλλιώς η σήραγγα καταρρέει μέσα στον εαυτό της. Όταν δρομολογείται μόνο το 10.20.0.0/16 αυτό είναι αυτόματο, αφού το τελικό σημείο είναι δημόσια διεύθυνση. Σε προφίλ πλήρους σήραγγας δεν είναι, και ο πελάτης χρειάζεται ρητή διαδρομή υπολογιστή προς το τελικό σημείο πριν σηκωθεί η σήραγγα.

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

Επαληθεύστε, μετά επανεκκινήστε και επαληθεύστε ξανά

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

ip route get 10.20.5.7
curl -sS http://10.20.5.7/health
curl -sS https://ifconfig.me

Η πρώτη γραμμή ονομάζει μια διεπαφή. Αν ονομάζει τη φυσική σας διεπαφή, η διαδρομή δεν έφτασε ποτέ. Στα Windows το Find-NetRoute -RemoteIPAddress 10.20.5.7 απαντά στην ίδια ερώτηση, και η τελευταία δοκιμή πρέπει να δείχνει ακόμα τη συνηθισμένη σας διεύθυνση και όχι του διακομιστή VPN.

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

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

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