Προσθήκη δεύτερου υποδικτύου σε VPN τοποθεσίας-τοποθεσίας: δύο δρόμοι
Οι σήραγγες βάσει πολιτικής χρειάζονται επιλογείς που ταιριάζουν και στις δύο πλευρές· οι βάσει διαδρομής χρειάζονται διαδρομή. Διαλέξτε τον σωστό δρόμο και διορθώστε πρώτα τη διαδρομή επιστροφής.
Η προσθήκη δεύτερου υποδικτύου σε μια σήραγγα τοποθεσίας-τοποθεσίας που δουλεύει παίρνει πέντε λεπτά στη μία σχεδίαση και σχεδόν όλο το απόγευμα στην άλλη. Όταν η σήραγγα εγκαθιστά διαδρομές για τα πρόθεματα που ονομάζετε, προσθέτετε μια διαδρομή και η κίνηση την ακολουθεί. Όταν διαπραγματεύεται ένα σταθερό ζεύγος επιλογέων, το νέο πρόθεμα μένει απροστάτευτο ώσπου και οι δύο πλευρές να συμφωνήσουν σε ταιριαστό ζεύγος. Τρία πράγματα κρίνουν την περίπτωση: τι περιγράφει πραγματικά η ρύθμιση κάθε πλευράς, αν η διαπραγματευμένη κίνηση στενεύει στο μικρότερο ταιριαστό ζεύγος και ποιος κατέχει τη διαδρομή επιστροφής για το νέο εύρος.
Διαβάστε τον πυρήνα, όχι την ένδειξη κατάστασης
Μια σήραγγα που αναφέρει σύνδεση έχει εγκαταστήσει τουλάχιστον μία θυγατρική συσχέτιση, αλλά όχι απαραίτητα αυτή που νομίζετε. Στο Linux ο πυρήνας δείχνει τι εφαρμόζεται: το ip xfrm policy απαριθμεί τα ζεύγη επιλογέων και το swanctl --list-sas (ή το παλαιότερο ipsec statusall) δείχνει τι διαπραγματεύτηκαν οι πλευρές, με τους επιλογείς κίνησης σε κάθε κατεύθυνση. Αν το νέο πρόθεμα δεν εμφανίζεται σε κανένα, είναι απροστάτευτο, ό,τι κι αν λέει το αρχείο ρυθμίσεων.
Συγκρίνετε το με τον πίνακα δρομολόγησης. Σε σχεδίαση βάσει διαδρομής η συσκευή της σήραγγας είναι το επόμενο άλμα για τα προστατευμένα πρόθεματα. Σε σχεδίαση βάσει πολιτικής συχνά δεν υπάρχει ειδική διαδρομή για το απομακρυσμένο υποδίκτυο, μόνο η προεπιλεγμένη, γιατί η πολιτική επιλέγει την κίνηση και όχι ο πίνακας.
Σήραγγες βάσει πολιτικής: και οι δύο πλευρές πρέπει να δηλώνουν το νέο πρόθεμα
Στην ορολογία του strongSwan ο επιλογέας ζει στα local_ts και remote_ts στη θυγατρική ρύθμιση, διαδόχους των leftsubnet και rightsubnet. Το νέο πρόθεμα πρέπει να εμφανίζεται και στις δύο πλευρές κατοπτρικά: ό,τι η τοποθεσία A λέει τοπικό, η τοποθεσία B το λέει απομακρυσμένο. Η ασυμφωνία σπάνια δίνει καθαρό σφάλμα. Οι πλευρές στενεύουν στην τομή, το παλιό πρόθεμα συνεχίζει να δουλεύει και μόνο το νέο αποτυγχάνει σιωπηλά.
swanctl --load-conns
swanctl --initiate --child <child-name>
swanctl --list-sas
ip xfrm policy
Στο pfSense ή στο OPNsense αυτό σημαίνει δεύτερη καταχώριση Phase 2 που ζευγαρώνει το νέο τοπικό υποδίκτυο με το νέο απομακρυσμένο και μετά εφαρμογή. Κρατήστε την παλιά καταχώριση· η αντικατάσταση μετακινεί το αρχικό υποδίκτυο αντί να το προσθέτει. Αν ένα υπάρχον Phase 2 καλύπτει ήδη υπερδίκτυο όπως το 0.0.0.0/0 ή συνοψισμένο εύρος, μην προσθέσετε στενότερη καταχώριση δίπλα του: επικαλυπτόμενοι επιλογείς εγκαθιστούν ανταγωνιστικές πολιτικές και η σειρά αξιολόγησης κρίνει τον νικητή.
Το IKEv1 κάνει κάθε ζεύγος υποδικτύων δικό του Phase 2 και μια πλευρά που δέχεται ένα ζεύγος ανά ανταλλαγή πετάει τα υπόλοιπα. Το IKEv2 μπορεί να μεταφέρει πολλά ζεύγη επιλογέων σε ένα θυγατρικό, αλλά μόνο αν τα δεχτούν και οι δύο υλοποιήσεις. Η λίστα από το swanctl --list-sas είναι η αλήθεια· ό,τι πληκτρολογήσατε είναι αίτημα.
Σήραγγες βάσει διαδρομής: η διαδρομή είναι η πολιτική
Μια διεπαφή XFRM ή μια συσκευή VTI μεταφέρει κίνηση σύμφωνα με τον πίνακα δρομολόγησης. Στρέφετε το νέο πρόθεμα στη συσκευή και στις δύο τοποθεσίες και εφαρμόζεται η κατάσταση που είναι δεμένη με τον μετασχηματισμό της διεπαφής. Δεν υπάρχει ζεύγος επιλογέων για συγχρονισμό, γι αυτό η σχεδίαση κλιμακώνει καλύτερα όσο πληθαίνουν τα υποδίκτυα. Ο οδηγός προώθησης του strongSwan εξηγεί την πλευρά του πυρήνα λεπτομερέστερα.
ip route add 192.168.60.0/24 dev xfrm0
ip route get 192.168.60.10
Το WireGuard πάει την ιδέα πιο πέρα. Το AllowedIPs είναι ταυτόχρονα η κρυπτογραφική λίστα επιτρεπόμενων και, μέσω του wg-quick, η καταχώριση στον πίνακα δρομολόγησης. Βάλτε το πρόθεμα μόνο στη μία πλευρά και θα έχετε χειραψία, εξερχόμενα πακέτα και σιωπή, γιατί η άλλη πλευρά πετάει πακέτα των οποίων η πηγή δεν είναι στη λίστα της. Η μορφή wg set αντικαθιστά όλη τη λίστα, οπότε επαναλάβετε τα πρόθεματα που ήδη δούλευαν, αλλιώς θα τα κόψετε:
wg set wg0 peer <PUBKEY> allowed-ips 192.168.10.0/24,192.168.60.0/24
ip route add 192.168.60.0/24 dev wg0
Η δεύτερη εντολή δεν είναι προαιρετική όταν χρησιμοποιήσατε το wg set αντί για το wg-quick. Ο πυρήνας δέχεται αμέσως τη νέα λίστα, αλλά τίποτα δεν προσθέτει διαδρομή γι αυτήν, οπότε η τοπικά παραγόμενη κίνηση φεύγει ακόμη από την προεπιλεγμένη πύλη. Είναι ο συνηθέστερος λόγος που ένα νέο υποδίκτυο WireGuard δουλεύει από τον κεντρικό υπολογιστή της σήραγγας και όχι από φορητό.
Η διαδρομή επιστροφής αποτυγχάνει συχνότερα από τη σήραγγα
Οι κεντρικοί υπολογιστές στο νέο απομακρυσμένο υποδίκτυο πρέπει να στέλνουν τις απαντήσεις πίσω μέσω της πύλης VPN. Όταν αυτή η πύλη δεν είναι ο προεπιλεγμένος δρομολογητής τους, η απάντηση πάει στον δρομολογητή LAN, ο οποίος είτε την πετάει είτε τη προωθεί στο διαδίκτυο με ιδιωτική διεύθυνση πηγής. Δοκιμάστε από κεντρικό υπολογιστή στην άλλη πλευρά και όχι από την πύλη: το ip route get 10.30.20.15 στο Linux ή το Find-NetRoute -RemoteIPAddress 10.30.20.15 στο PowerShell δείχνει το επόμενο άλμα που θα χρησιμοποιήσει πραγματικά. Αν η απάντηση δεν είναι το τελικό σημείο της σήραγγας, προσθέστε εκεί στατική διαδρομή για το νέο πρόθεμα.
Το Source NAT στην τοποθεσία που της λείπει η διαδρομή επιστροφής είναι νόμιμη εναλλακτική και έτσι πολλές εγκαταστάσεις hub-and-spoke αποφεύγουν να αγγίξουν κάθε διακομιστή. Εφαρμόστε το και στο νέο πρόθεμα στην πύλη της πλευράς προορισμού:
iptables -t nat -A POSTROUTING -s 10.30.20.0/24 -d 192.168.60.0/24 -j MASQUERADE
Το κόστος είναι πραγματικό. Τα απομακρυσμένα αρχεία καταγραφής σταματούν να δείχνουν μεμονωμένες διευθύνσεις πηγής και οι κανόνες τείχους προστασίας για το αρχικό υποδίκτυο συμπτύσσονται σε έναν κανόνα για την πύλη. Διαλέξτε το συνειδητά, όχι επειδή έλειπε διαδρομή.
Τα τείχη προστασίας είναι το άλλο μισό της διαδρομής επιστροφής. Οι συσκευές βάσει ζωνών δεν επεκτείνουν αυτόματα τη ζώνη μιας υπάρχουσας διεπαφής σήραγγας σε νέο υποδίκτυο και ένας κανόνας γραμμένος για το παλιό πρόθεμα δεν θα ταιριάξει. Προσθέστε το νέο υποδίκτυο στη ζώνη ή στο ζεύγος κανόνων και στις δύο κατευθύνσεις πριν κατηγορήσετε το IPsec.
Αποφασίστε με τρεις ερωτήσεις και επαληθεύστε με κίνηση
Η σύντομη εκδοχή: ονομάζει η ρύθμιση της πλευράς προθέματα (βάσει πολιτικής) ή η κίνηση δρομολογείται σε διεπαφή (βάσει διαδρομής); Δηλώνουν και τα δύο άκρα το νέο πρόθεμα; Υπάρχει δρόμος επιστροφής από το νέο υποδίκτυο στο αρχικό εύρος πηγής;
| Tunnel style | Where the prefix goes | What breaks if you skip it |
|---|---|---|
| Policy-based IPsec | Selector pair on both peers | Old subnets work, the new one fails with no clear error |
| Route-based XFRM or VTI | Route into the device on both sites | Packets routed but not transformed, or the state never matches |
| WireGuard | AllowedIPs on both peers plus a route | Handshake succeeds, replies are dropped |
| Overlapping supernet | Adjust the existing entry instead | A shadowed policy wins or loses by evaluation order |
Η επαλήθευση είναι το σημείο όπου οι περισσότερες αλλαγές κλείνουν πολύ νωρίς. Ένα ping από την πύλη αποδεικνύει λίγα, γιατί η πύλη στέλνει από τον εαυτό της και συχνά ταιριάζει με διαφορετική πολιτική από έναν κεντρικό υπολογιστή. Κάντε ping από κεντρικό υπολογιστή στο νέο υποδίκτυο, μετά τρέξτε την εφαρμογή που προκάλεσε την αλλαγή και κοιτάξτε μετρητές, όχι εικονίδιο κατάστασης.
tcpdump -ni any host 192.168.60.10 and (esp or udp port 4500)
ip xfrm state
wg show
Σε σήραγγα βάσει πολιτικής οι μετρητές του ip xfrm state πρέπει να ανεβαίνουν και στις δύο κατευθύνσεις· επίπεδοι μετρητές σημαίνουν ότι το πακέτο δρομολογείται αλλά δεν επιλέγεται. Στο WireGuard το wg show αναφέρει μεταφορά ανά πλευρά και μια χειραψία με μηδέν ληφθέντα byte δείχνει στη λίστα της άλλης πλευράς ή στη διαδρομή επιστροφής της.
Κλείστε καταγράφοντας το πρόθεμα, τον επιλογέα ή τη διαδρομή της πλευράς, την απόφαση για τη διαδρομή επιστροφής και την καταχώριση του τείχους προστασίας μαζί με το υπόλοιπο απόθεμα της σήραγγας. Μετά επανεκκινήστε μια πύλη και δοκιμάστε ξανά: μια διαδρομή που μπήκε με το χέρι εξαφανίζεται και ο επόμενος δεν πρέπει να το ανακαλύψει από την αρχή.