Δύο πελάτες VPN σε έναν υπολογιστή: τι συγκρούεται και τι λειτουργεί
Δύο πελάτες μάχονται για την προεπιλεγμένη διαδρομή, τον resolver και τους οδηγούς φιλτραρίσματος. Καταγράψτε ποιος κατέχει την έξοδο και μετά διαχωρίστε το δεύτερο τούνελ με VM ή netns.
Ο δεύτερος πελάτης σας συνδέεται, οι πόροι του πρώτου παύουν να επιλύονται και το δελτίο λέει ότι το VPN εργασίας χάλασε το προσωπικό. Τίποτα δεν είναι χαλασμένο με την έννοια της βλάβης: και οι δύο πελάτες έκαναν αυτό για το οποίο σχεδιάστηκαν, και το μηχάνημα έχει μόνο έναν πίνακα δρομολόγησης. Η σύγκρουση αφορά τέσσερις πόρους που κάθε πελάτης θεωρεί δικούς του. Περάστε τους με τη σειρά και η διόρθωση συνήθως γίνεται επιλογή σχεδίασης και όχι επισκευή.
Βήμα 1: βρείτε ποιος πελάτης κατέχει την έξοδο
Διαβάστε την τρέχουσα απόφαση εξόδου πριν αλλάξετε οτιδήποτε. Η αναζήτηση διαδρομής για μια δημόσια διεύθυνση σας λέει ποια διεπαφή και ποιο επόμενο άλμα θα χρησιμοποιούσε ένα πακέτο αυτή τη στιγμή, και αυτή είναι η απάντηση στο ποιος κέρδισε. Συγκρίνετε το με τα ονόματα διεπαφών που δημιούργησαν οι πελάτες, τα οποία συνήθως φέρουν το όνομα του προϊόντος ή του πρωτοκόλλου. Αν η αναζήτηση δείχνει το τούνελ που δεν περιμένατε, έχετε ήδη βρει τη σύγκρουση.
ip route get 1.1.1.1
ip route show default
route print
Μερικοί πελάτες δεν αντικαθιστούν καθόλου την προεπιλεγμένη διαδρομή· προσθέτουν δύο μισά, ένα για το κάτω μισό του χώρου διευθύνσεων και ένα για το πάνω μισό, που μαζί καλύπτουν τα πάντα. Αυτό αφήνει την αρχική προεπιλεγμένη διαδρομή ορατή και κάνει μια χειροκίνητη διόρθωση να φαίνεται σωστή ενώ η κίνηση εξακολουθεί να βγαίνει από το τούνελ. Διαβάστε τη μετρική και το μήκος του προθέματος, όχι μόνο την ύπαρξη μιας προεπιλεγμένης εγγραφής.
Σταματήστε αν και οι δύο πελάτες διεκδικούν το ίδιο πρόθεμα με την ίδια μετρική. Ο πυρήνας θα διαλέξει ένα, και ο άλλος θα φαίνεται συνδεδεμένος ενώ δεν μεταφέρει τίποτα.
Βήμα 2: ελέγξτε τον resolver και τα επικαλυπτόμενα προθέματα
Το DNS είναι η δεύτερη σύγκρουση και παράγει ένα χαρακτηριστικό σύμπτωμα: τα ονόματα αποτυγχάνουν ενώ οι διευθύνσεις λειτουργούν. Κάθε πελάτης επιβάλλει τον δικό του resolver, και ο τελευταίος που γράφει κερδίζει για τα επόμενα ερωτήματα. Ρωτήστε την υπηρεσία resolver τι χρησιμοποιεί ανά ζεύξη αντί να διαβάζετε τη σελίδα ρυθμίσεων του πελάτη.
resolvectl status
Get-DnsClientServerAddress
dig +short intranet.corp.example
Στη συνέχεια συγκρίνετε τα ιδιωτικά προθέματα που χρησιμοποιούν τα δύο δίκτυα. Αν και οι δύο πλευρές κατανέμουν από το ίδιο εύρος, καμία ρύθμιση από την πλευρά του πελάτη δεν θα το διορθώσει, γιατί το μηχάνημα δεν μπορεί να πει ποιος προορισμός 10.0.0.0/8 ανήκει σε ποιο τούνελ. Η μία πλευρά πρέπει να επαναριθμηθεί ή να μεταφραστεί, και αυτό είναι συζήτηση με τους ιδιοκτήτες του δικτύου, όχι αλλαγή διαμόρφωσης. Η επικάλυψη είναι η μόνη σύγκρουση όπου η ειλικρινής απάντηση είναι ότι η σχεδίαση πρέπει να αλλάξει.
Σταματήστε εδώ αν τα προθέματα επικαλύπτονται. Όλα τα επόμενα σε αυτή τη λίστα προϋποθέτουν ότι δεν επικαλύπτονται.
Βήμα 3: επιλέξτε ένα μοτίβο διαχωρισμού που αντέχει
Τα αξιόπιστα μοτίβα αποφεύγουν να τρέχουν δύο πελάτες πάνω στον ίδιο πίνακα δρομολόγησης. Ένας πελάτης με πολιτική split-tunnel που φτάνει και στα δύο ιδιωτικά δίκτυα είναι το απλούστερο, εφόσον οι προορισμοί δεν επικαλύπτονται και ο κάτοχος της πολιτικής συμφωνεί. Μια εικονική μηχανή ή ένας χώρος ονομάτων δικτύου είναι το επόμενο βήμα, γιατί ο καθένας αποκτά τον δικό του πίνακα και τον δικό του resolver.
sudo ip netns add vpn2
sudo ip netns exec vpn2 ip link show
sudo ip netns exec vpn2 curl -sI https://intranet.corp.example/
Ο χώρος ονομάτων δίνει τον ίδιο διαχωρισμό με μια εικονική μηχανή χωρίς το δεύτερο λειτουργικό σύστημα, αλλά έχει τραχιές άκρες: η συσκευή τούνελ πρέπει να μετακινηθεί μέσα του, και η εφαρμογή πρέπει να ξεκινήσει μέσα του. Μια ξεχωριστή φυσική συσκευή είναι συχνά η λιγότερο αιφνιδιαστική επιλογή για ένα προσωπικό VPN δίπλα σε ένα διαχειριζόμενο πελάτη εργασίας. Το στοίβαγμα ενός τούνελ μέσα σε άλλο δεν είναι μοτίβο διαχωρισμού· το εσωτερικό άκρο πρέπει να παραμένει προσβάσιμο μέσω του εξωτερικού τούνελ, και η διάταξη προσθέτει από πάνω προβλήματα MTU και καθυστέρησης.
Επιλέξτε ένα μοτίβο και γράψτε γιατί. Η ανάμειξη ενός χώρου ονομάτων για μία εφαρμογή με split-tunnel για τα υπόλοιπα αναδημιουργεί την αρχική σύγκρουση σε δυσκολότερα αποσφαλματώσιμη μορφή.
Βήμα 4: επαληθεύστε και τα δύο δίκτυα από την ίδια συνεδρία
Δοκιμάστε έναν πόρο σε κάθε ιδιωτικό δίκτυο από το περιβάλλον όπου εκτελείται πραγματικά η εφαρμογή, όχι από το κέλυφός σας αν η εφαρμογή τρέχει μέσα σε χώρο ονομάτων. Ελέγξτε τη διεπαφή εξόδου, τη διεύθυνση που επιλύθηκε και τον κωδικό απόκρισης μαζί, γιατί μια επιτυχία στο ένα από τα τρία μπορεί να κρύψει αποτυχία στα άλλα. Επαναλάβετε μετά από επανεκκίνηση, αφού η σειρά με την οποία ξεκινούν οι πελάτες καθορίζει ποιος κερδίζει. Αυτή τη σειρά ξεχνούν να καταγράψουν οι άνθρωποι.
curl -sI https://intranet.corp.example/
curl -sI https://files.personal.example/
ip route get 10.20.30.40
Καταγράψτε τις εκδόσεις των πελατών, τις διεπαφές, την κατάσταση του resolver και τα προθέματα για κάθε δίκτυο. Όταν ένας πελάτης ενημερώνεται και αλλάζει τη συμπεριφορά δρομολόγησης, αυτή η καταγραφή είναι η διαφορά ανάμεσα σε διόρθωση πέντε λεπτών και ανακατασκευή. Το επόμενο άτομο δεν θα μοιραστεί τη μνήμη σας για το ποιο τούνελ ανέβηκε πρώτο.
Η λίστα είναι πλήρης όταν μπορείτε να ονομάσετε τη διεπαφή που κατέχει την προεπιλεγμένη διαδρομή, τον resolver που χρησιμοποιεί κάθε όνομα, το μοτίβο που διαχωρίζει το δεύτερο τούνελ και το αποτέλεσμα ενός αιτήματος ανά δίκτυο μετά από επανεκκίνηση. Οτιδήποτε λιγότερο είναι μια διαμόρφωση που τυχαίνει να λειτουργεί σήμερα.