VPN στον host ή μέσα στο VM; Οδηγός απόφασης
Ο ιδιοκτήτης της σήραγγας αποφασίζει τι καλύπτει τι. Διαλέξτε τοποθέτηση στον host ή στον guest και επιβεβαιώστε την με ελέγχους διαδρομής, DNS και εξόδου μέσα στον guest.
Το να χτίσετε τη σήραγγα μέσα στον guest και το να τη χτίσετε στον host αλλάζουν και τα δύο τη διεύθυνση που αναφέρει ένα πρόγραμμα περιήγησης, και εκεί τελειώνει η ομοιότητα. Μια σήραγγα που ανήκει στον guest κρατά τα κλειδιά της, την προεπιλεγμένη διαδρομή της και τον resolver της μέσα στον πυρήνα του guest, ενώ ο host προωθεί κρυπτογραφημένα πακέτα σε μία απομακρυσμένη διεύθυνση. Μια σήραγγα που ανήκει στον host είναι η κατοπτρική εικόνα: ο πελάτης του host κρατά τη συνεδρία και εφαρμόζει διαδρομές και πολιτική, και ο guest δανείζεται ό,τι βγαίνει. Διαλέξτε λάθος ιδιοκτήτη και κάθε επόμενο σύμπτωμα θα σας στείλει στη λάθος μηχανή. Δύο εντολές λύνουν το ζήτημα σε περίπου ένα λεπτό, και το υπόλοιπο αυτού του οδηγού είναι τι να κάνετε με την απάντηση.
Αποφασίστε τον ιδιοκτήτη πριν αγγίξετε τον πελάτη
Ο κανόνας αφορά το πού παράγεται το κρυπτοκείμενο, όχι ποια μηχανή δείχνει εικονίδιο VPN. Αν το παράγει ο guest, ο guest χρειάζεται μια λειτουργική διαδρομή προς τον διακομιστή VPN και τίποτα άλλο από τον host. Αν το παράγει ο host, ο guest χρειάζεται η διαδρομή μέσω του host να επιβιώσει από οποιαδήποτε πολιτική επιβάλλει ο πελάτης του host στην τοπική κίνηση.
Τρεις ερωτήσεις συνήθως διαλέγουν την τοποθέτηση για εσάς. Πρέπει η κίνηση του guest να επιβιώσει από έναν εταιρικό πελάτη στον host; Τότε η σήραγγα ανήκει στον guest. Χρειάζονται αρκετοί guests ένα διαπιστευτήριο και μία διεύθυνση εξόδου; Τότε ανήκει στον host, με προώθηση στημένη επίτηδες. Πρέπει η κίνηση του guest να μείνει εντελώς έξω από το VPN του host; Τότε μια σήραγγα στον guest είναι η μόνη διάταξη που σας το δίνει εκ κατασκευής.
Γράψτε την απάντηση σε μία γραμμή δίπλα στο όνομα του VM: guest-owned ή host-owned. Σε ένα εργαστήριο έξι μηχανημάτων αυτή η σημείωση γλιτώνει περισσότερο χρόνο από οποιοδήποτε βήμα παρακάτω, γιατί σας σταματά από το να ψάχνετε βλάβη σε σήραγγα που δεν ήταν ποτέ στη μηχανή στην οποία συνδεθήκατε.
Τα WSL1 και WSL2 είναι αντίθετες περιπτώσεις
Το WSL1 δεν είναι εικονική μηχανή, οπότε το ερώτημα τοποθέτησης εξατμίζεται ως επί το πλείστον. Τα δυαδικά του Linux τρέχουν πάνω στη στοίβα δικτύου των Windows μέσω ενός στρώματος μετάφρασης, και ένας πελάτης VPN για Linux δεν έχει ανεξάρτητες διεπαφές να ρυθμίσει. Η διάταξη που δουλεύει είναι σήραγγα στην πλευρά των Windows, με τη διανομή να χρησιμοποιεί το αποτέλεσμα χωρίς να κατέχει τίποτα.
Το WSL2 είναι το αντίστροφο. Τρέχει έναν πραγματικό πυρήνα σε ένα ελαφρύ βοηθητικό VM πίσω από έναν εικονικό διακόπτη Hyper-V, και ο χώρος διευθύνσεών του μεταφράζεται με NAT μέσω προσαρμογέα στην πλευρά του host. Ένας πελάτης Linux μέσα στη διανομή συμπεριφέρεται επομένως όπως σε ένα φυσικό μηχάνημα Linux: δημιουργεί tun0 ή wg0, εγκαθιστά τις δικές του διαδρομές και δουλεύει. Η αποτυχία κατοικεί στην πλευρά του host. Όταν ένας πελάτης VPN των Windows συνδεθεί με πολιτική που μπλοκάρει κίνηση σε τοπικά δίκτυα, αντιμετωπίζει το υποδίκτυο WSL2 ως μη αξιόπιστο τοπικό δίκτυο και κόβει τη διαδρομή NAT. Η διανομή τότε χάνει DNS και εξερχόμενη πρόσβαση ενώ η δική της σήραγγα είναι ακόμη υγιής: το wg show αναφέρει χειραψία, το ip route φαίνεται σωστό, και το curl κολλάει.
Ποια διόρθωση μπορείτε να χρησιμοποιήσετε εξαρτάται από την έκδοση των Windows. Η παλαιότερη είναι μια εξαίρεση στον πελάτη του host για το υποδίκτυο WSL, που προστίθεται στις ρυθμίσεις τοπικού δικτύου ή διαχωρισμένης σήραγγας του πελάτη. Η νεότερη, σε εκδόσεις Windows 11 που την υποστηρίζουν, είναι κατοπτρική δικτύωση: βάλτε networkingMode=mirrored στην ενότητα [wsl2] του %UserProfile%\.wslconfig, εκτελέστε wsl --shutdown, και η διανομή μοιράζεται τις διεπαφές του host αντί για ένα ιδιωτικό υποδίκτυο NAT. Η κατοπτρική λειτουργία αλλάζει επίσης τη συμπεριφορά του localhost και των εισερχόμενων θυρών, οπότε αντιμετωπίστε την ως μετεγκατάσταση και όχι ως διακόπτη.
NAT, γέφυρα και τι μπορεί να δει ο host
Υπό NAT, τα πακέτα της σήραγγας του guest διευθυνσιοδοτούνται στη δημόσια διεύθυνση του διακομιστή VPN και φεύγουν από τον προσαρμογέα του host ως κρυπτογραφημένο UDP ή TCP. Ο host βλέπει μία ροή και το πλήθος των byte της, τίποτα για τους προορισμούς μέσα της. Υπό προσαρμογέα με γέφυρα ο guest έχει τη δική του ταυτότητα επιπέδου 2 στο φυσικό LAN, παίρνει τη δική του μίσθωση DHCP, και φαίνεται σε κάθε πολιτική βασισμένη σε MAC σαν δεύτερη συσκευή. Καμία από τις δύο λειτουργίες δεν αφήνει τον host να διαβάσει το φορτίο της σήραγγας· ο guest με γέφυρα είναι απλώς πολύ πιο ορατός στο δίκτυο γύρω του.
Υπάρχει και ένα κατώτατο όριο στην απομόνωση. Ένας guest δεν μπορεί να κρυφτεί από τη μηχανή που κατέχει τη μνήμη του, και όποιος ελέγχει τον host μπορεί να διαβάσει κλειδιά από τη RAM του guest. Αυτό που σας δίνει μια σήραγγα στον guest είναι ένα όριο δρομολόγησης και ένα όριο κακόβουλου λογισμικού, όχι προστασία από το άτομο που κρατά το φορητό. Τα τεκμηριωμένα modes προσαρμογέα αξίζει να τα έχετε ανοιχτά όσο διαλέγετε, αφού το mode αλλάζει και τι βλέπει ο host και τι βλέπει το LAN.
Οδηγός: τοποθετήστε το, ρυθμίστε το, αποδείξτε το
Εκτελέστε αυτούς τους τέσσερις ελέγχους με σειρά σε ένα φρέσκο κέλυφος guest, και σταματήστε στον πρώτο που διαφωνεί με τον ιδιοκτήτη που σημειώσατε.
- Το
ip route get 1.1.1.1που επιστρέφειtun0ήwg0σημαίνει ιδιοκτησία guest, και τοeth0με ιδιωτικό επόμενο άλμα σημαίνει ιδιοκτησία host. resolvectl query example.com, ή διαβάστε το/etc/resolv.confόπου ο guest δεν τρέχει υπηρεσία resolver. Μια σήραγγα που μεταφέρει κίνηση αλλά όχι DNS είναι η συνηθέστερη μισο-ρυθμισμένη κατάσταση.- Συγκρίνετε τις εξόδους:
curl -4 -s https://ifconfig.meστον guest έναντιcurl.exe -4 -s https://ifconfig.meστον host. Διαφορετικές διευθύνσεις σημαίνουν ότι ο guest κατέχει τη σήραγγα, και ένας host σε VPN με guest που δείχνει τον πάροχο του σπιτιού είναι η περίπτωση όπου δεν κληρονομήθηκε τίποτα. - Επαναλάβετε και τα δύο με
-6. Μια σήραγγα μόνο για v4 διαρρέει v6 εκτός αν ο πελάτης το μπλοκάρει ή το δρομολογεί, και πολλοί πελάτες αφήνουν το v6 στη φυσική διεπαφή εξ ορισμού.
Για σχεδίαση με πύλη host, όπου αρκετοί guests μοιράζονται μία σήραγγα, ο host πρέπει να προωθεί και να μεταφράζει. Σε host Linux αυτά είναι τρία κομμάτια, και ο guest επιστρέφει ήσυχα στην απλή διαδρομή του όταν λείπει οποιοδήποτε από αυτά:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
iptables -A FORWARD -i virbr0 -o wg0 -j ACCEPT
iptables -A FORWARD -i wg0 -o virbr0 -m state --state RELATED,ESTABLISHED -j ACCEPT
Στην πλευρά του WireGuard, το AllowedIPs του ομολόγου host πρέπει να περιλαμβάνει το υποδίκτυο των guest, για παράδειγμα 192.168.122.0/24, αλλιώς τα πακέτα επιστροφής δεν φτάνουν ποτέ και η ρύθμιση μοιάζει με πρόβλημα τείχους προστασίας. Ένας host Windows φτάνει στο ίδιο αποτέλεσμα με κοινή χρήση σύνδεσης στο διαδίκτυο ή κανόνα NAT στον διακόπτη Hyper-V, και χρειάζεται τον ίδιο έλεγχο της διαδρομής επιστροφής.
Όταν η διάταξη είναι ακόμη ανοιχτή, αυτός ο πίνακας καλύπτει τις πιο συχνές περιπτώσεις:
| Situation | Owner | Check first |
|---|---|---|
| One VM, host also on a corporate VPN | Guest | Does the host client block local networks? |
| Six lab VMs, one exit address | Host plus forwarding | ip_forward, NAT rule, server AllowedIPs |
| Malware or research VM | Guest, NAT | Snapshot age and resolver state |
| Bridged VM on an office LAN | Guest | DHCP lease and port security |
Δύο σήραγγες, δύο guests και οι συγκρούσεις μεταξύ τους
Όταν χρειάζεστε δύο εξόδους ταυτόχρονα, το μοτίβο που αντέχει είναι μία σήραγγα ανά guest. Κάθε VM κρατά τη δική του προεπιλεγμένη διαδρομή και resolver, ο host μένει στο συνηθισμένο δίκτυο, και οι δύο σήραγγες δεν μαλώνουν ποτέ για τον ίδιο πίνακα δρομολόγησης. Το να γεφυρώσετε δύο guests μαζί δεν ενώνει ούτε τις διαδρομές τους: το εικονικό δίκτυο παρέχει μια διαδρομή, και κάθε πελάτης πρέπει ακόμη να μάθει ότι αυτή η τοπική κίνηση μπορεί να παρακάμψει τη σήραγγα.
Το να τρέχετε σήραγγα host και σήραγγα guest μαζί είναι νόμιμο, και η σκόπιμη ένθεση είναι μερικές φορές ακριβώς αυτό που θέλετε, με τον guest να βγαίνει από τη δική του σήραγγα και εκείνη τη σήραγγα να βγαίνει από του host. Αυτό που το κάνει διακοπή είναι ότι κανείς δεν έγραψε ποιο τελικό σημείο πρέπει να φτάνεται μέσω ποιου στρώματος. Κρατήστε μια λίστα δύο στηλών με προορισμό και ιδιοκτήτη, και μια σύγκρουση διαδρομών γίνεται αναζήτηση αντί για ένα απόγευμα ανακάλυψης.
Επαληθεύστε, και μετά κρατήστε την ανάκτηση στον ιδιοκτήτη
Δοκιμάστε από μέσα στον guest με φρέσκια διεργασία εφαρμογής: κίνηση, επίλυση ονομάτων, και οι δύο οικογένειες διευθύνσεων, και τι συμβαίνει όταν πέσει η σήραγγα. Το εικονίδιο VPN του host δεν λέει τίποτα για την κάλυψη του guest, και αυτή είναι η συνηθέστερη ψευδής επιβεβαίωση σε όλη αυτή την περιοχή.
Η ανάκτηση ανήκει επίσης στον ιδιοκτήτη. Μια σήραγγα που ανήκει στον guest αποκαθίσταται από τον πελάτη του ίδιου του guest και τις διαδρομές που έγραψε. Μια σχεδίαση που ανήκει στον host αποκαθίσταται από την ακολουθία εκκίνησης του host, και οι κανόνες προώθησης δεν επιβιώνουν από επανεκκίνηση αν δεν τους εφαρμόσει ξανά μια μονάδα ή μια εργασία εκκίνησης. Ένα επαναφερμένο snapshot είναι ανάπτυξη, όχι αναίρεση, γιατί φέρνει πίσω παλιά διαπιστευτήρια και παλιές διαδρομές μαζί με τον δίσκο. Πριν δηλώσετε τη δουλειά ολοκληρωμένη, επιβεβαιώστε ότι ο ιδιοκτήτης ταιριάζει ακόμη με τη γραμμή που σημειώσατε, ότι το DNS και οι δύο οικογένειες διευθύνσεων επιλύονται μέσα στον guest, ότι μια νεκρή σήραγγα αφήνει ένα χρησιμοποιήσιμο δίκτυο αντί για μαύρη τρύπα, και ότι μια επανεκκίνηση ή επαναφορά snapshot αναπαράγει την ίδια κατάσταση.