Εργαστήριο VPN σε VirtualBox: VM πύλης ή δίκτυο μόνο για τον κεντρικό υπολογιστή
Διαλέξτε ανάμεσα σε δρομολογημένη VM πύλης και τμήμα μόνο για τον κεντρικό υπολογιστή για ένα εργαστήριο VPN σε VirtualBox, και μετά κάντε τον φιλοξενούμενο να αποτυγχάνει κλειστά όταν πέφτει η σήραγγα.
Πρέπει να αποφασίσετε πόση μηχανική αξίζει το εργαστήριο VPN σας. Μια δρομολογημένη VM πύλης ανάμεσα σε δύο τμήματα του VirtualBox αναπαράγει τη μετάφραση διευθύνσεων, τη διαδρομή επιστροφής και τη θέση του τείχους προστασίας πίσω από την οποία κάθεται ένας πραγματικός πελάτης. Ένα μόνο τμήμα μόνο για τον κεντρικό υπολογιστή σας δίνει μια ελεγχόμενη πόρτα και τίποτε άλλο. Η έκδοση με πύλη κοστίζει τρεις φιλοξενούμενους και έναν πίνακα δρομολόγησης που συντηρείτε· η έκδοση μόνο για τον κεντρικό υπολογιστή κοστίζει έναν φιλοξενούμενο και μια πολιτική. Τρεις ερωτήσεις τις χωρίζουν, και η τρίτη αποφασίζει αν η δοκιμή σας μπορεί να περάσει καθόλου.
Απαντήστε σε τρεις ερωτήσεις πριν κλωνοποιήσετε οτιδήποτε
Ξεκινήστε από το τι πρέπει να παρατηρεί ο διακομιστής VPN. Αν ο διακομιστής πρέπει να βλέπει μια διεύθυνση προέλευσης που δεν είναι του φιλοξενούμενου δοκιμής, κάτι πρέπει να μεταφράζει ανάμεσά τους, και αυτό το κάτι πρέπει να είναι δρομολογητής που ελέγχετε εσείς. Η δικτύωση μόνο για τον κεντρικό υπολογιστή δίνει στον κεντρικό υπολογιστή έναν προσαρμογέα στο τμήμα του φιλοξενούμενου, όχι μεταφραστή. Όταν μετά ο φιλοξενούμενος χρειάζεται να φτάσει οτιδήποτε έξω, συνδέετε έναν προσαρμογέα NAT, και η ίδια η μηχανή NAT του VirtualBox ξαναγράφει την προέλευση χωρίς να σας ρωτήσει.
Στη συνέχεια, ρωτήστε αν ο φιλοξενούμενος επιτρέπεται να φτάσει οτιδήποτε εκτός από τη σήραγγα. Αυτή η απάντηση επιλέγει εσωτερικό ή μόνο για τον κεντρικό υπολογιστή, και είναι η ερώτηση που οι περισσότερες περιγραφές εργαστηρίων παραλείπουν. Τέλος, ρωτήστε τι πρέπει να συμβεί όταν πέσει η σήραγγα, γιατί αυτό καθορίζει πολιτική και όχι τοπολογία, και ένα εργαστήριο που αποδεικνύει μόνο την ευτυχισμένη διαδρομή δεν έχει δοκιμάσει σχεδόν τίποτα.
| What the test requires | Routed gateway VM | Host-only guest |
|---|---|---|
| Server sees a translated source address | Yes, from your own MASQUERADE rule | No, VirtualBox NAT does it instead |
| The guest has exactly one egress | Yes, while the second adapter faces the tunnel | Only until a NAT adapter is attached |
| Policy is testable during a tunnel failure | Rules live in one place | Rules live on each guest |
Συνδέστε τους τρεις ρόλους με εσωτερικά δίκτυα
Χρησιμοποιήστε τρεις φιλοξενούμενους και δύο ονομασμένα τμήματα, με την πύλη ως τη μόνη μηχανή που έχει προσαρμογέα και στα δύο:
VBoxManage modifyvm lab-client --nic1 intnet --intnet1 WAN
VBoxManage modifyvm lab-server --nic1 intnet --intnet1 LAN
VBoxManage modifyvm lab-gw --nic1 intnet --intnet1 WAN --nic2 intnet --intnet2 LAN
Δεν υπάρχει ξεχωριστό βήμα δημιουργίας για ένα εσωτερικό δίκτυο. Η συμβολοσειρά στο --intnet1 είναι το τμήμα: δύο μηχανές το μοιράζονται μόνο αν το όνομα ταιριάζει ακριβώς, και τίποτα στον κεντρικό υπολογιστή δεν είναι συνδεδεμένο με αυτό. Αυτή η τελευταία ιδιότητα είναι ο λόγος που το εργαστήριο επαναλαμβάνεται καθαρά, αφού οι διαδρομές του κεντρικού υπολογιστή, ο δικός του πελάτης VPN και το τείχος προστασίας του δεν μπορούν να φτάσουν τους φιλοξενούμενους κατά λάθος. Ένα εσωτερικό τμήμα επίσης δεν έχει διακομιστή DHCP εκτός αν προσθέσετε έναν, οπότε οι στατικές διευθύνσεις είναι η συντομότερη διαδρομή.
Δώστε στον πελάτη μόνο τη διεύθυνση WAN του, με προεπιλεγμένη πύλη που δείχνει στη διεύθυνση WAN της πύλης. Ο διακομιστής παίρνει μια διεύθυνση LAN και χρησιμοποιεί τη διεύθυνση LAN της πύλης ως προεπιλεγμένη πύλη του. Ένας φιλοξενούμενος που κρατά δύο διευθύνσεις σε ένα τμήμα, ή μια περιπλανώμενη διαδρομή προς το άλλο τμήμα, έχει διαδρομή γύρω από τον δρομολογητή, και οι δοκιμές παρακάτω θα σας πουν ψέματα.
Κρατώ ένα αρχείο κειμένου δίπλα στα ονόματα των VM με τις τέσσερις διευθύνσεις και τα δύο ονόματα τμημάτων, και το επικολλώ σε κάθε κέλυφος. Εβδομάδες αργότερα, όταν μια αλλαγή προφίλ σπάσει κάτι, αυτό το αρχείο είναι η διαφορά ανάμεσα στην αποσφαλμάτωση του προφίλ και στην αποσφαλμάτωση της δικής μου μνήμης.
Επιλέξτε εσωτερικό ή μόνο για τον κεντρικό υπολογιστή για το τμήμα που δεν πρέπει να διαρρεύσει
Η λειτουργία μόνο για τον κεντρικό υπολογιστή δημιουργεί έναν εικονικό προσαρμογέα στον ίδιο τον κεντρικό υπολογιστή, συνήθως vboxnet0, και δίνει στον κεντρικό υπολογιστή μια διεύθυνση στο τμήμα του φιλοξενούμενου. Αυτό είναι βολικό για διαχείριση και μοιραίο για μια δοκιμή απομόνωσης, γιατί ο κεντρικός υπολογιστής μπορεί τώρα να φτάσει τον φιλοξενούμενο απευθείας και κάθε υπηρεσία στην πλευρά του κεντρικού υπολογιστή γίνεται πιθανή διαδρομή. Η εσωτερική λειτουργία δεν έχει καθόλου προσαρμογέα κεντρικού υπολογιστή. Οι δύο λειτουργίες συγχέονται εύκολα στον πίνακα ρυθμίσεων δικτύου, οπότε ελέγξτε την τεκμηριωμένη διαφορά και όχι την ετικέτα (δείτε τη σελίδα λεπτομέρειες δικτύωσης του VirtualBox).
Για έναν φιλοξενούμενο που πρέπει να χρησιμοποιεί τη σήραγγα, το εσωτερικό είναι η ασφαλέστερη προεπιλογή, με την πύλη ως τη μόνη έξοδο. Αν κρατήσετε το μόνο για τον κεντρικό υπολογιστή, αντιμετωπίστε τον προσαρμογέα του κεντρικού υπολογιστή ως διαδρομή διαχείρισης και πείτε το δυνατά: ο κεντρικός υπολογιστής μπορεί να φτάσει τον φιλοξενούμενο, και ο φιλοξενούμενος δεν πρέπει να μπορεί να χρησιμοποιήσει τον κεντρικό υπολογιστή ως έξοδο.
VBoxManage modifyvm lab-client --nic1 hostonly --hostonlyadapter1 vboxnet0
Η απομόνωση που μπορείτε να αποδείξετε είναι η απομόνωση που ρυθμίσατε. Ένας φιλοξενούμενος με έναν εσωτερικό προσαρμογέα, προεπιλεγμένη διαδρομή στην πύλη και χωρίς προσαρμογέα NAT δεν έχει διαδρομή που παρακάμπτει την πύλη. Ένας φιλοξενούμενος με προσαρμογέα μόνο για τον κεντρικό υπολογιστή και προσαρμογέα NAT έχει δύο διαδρομές, και μόνο μία από αυτές είναι αυτή που θέλατε να δοκιμάσετε.
Δρομολογήστε και μεταφράστε στην πύλη, και μετά κάντε την να αποτυγχάνει κλειστά
Το VirtualBox δεν προωθεί ανάμεσα σε τμήματα· το κάνει ο φιλοξενούμενος. Με τη VM του διακομιστή VPN πίσω από την πύλη, ενεργοποιήστε την προώθηση και μεταφράστε την κίνηση του πελάτη καθώς φεύγει προς τον διακομιστή:
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
Με αυτόν τον κανόνα ο διακομιστής βλέπει τη διεύθυνση LAN της πύλης αντί για του πελάτη, και έτσι φαίνεται ένας πραγματικός πελάτης πίσω από NAT παρόχου σε ένα κεφαλικό άκρο. Αποθηκεύστε την τιμή sysctl στο /etc/sysctl.d/ και τον κανόνα στην υπηρεσία τείχους προστασίας που χρησιμοποιεί η διανομή, αλλιώς μια επανεκκίνηση επιστρέφει ήσυχα το εργαστήριο σε δρομολογημένη αλλά αμετάφραστη κατάσταση.
Η προώθηση δεν είναι εξουσιοδότηση. Κάτω από την προεπιλεγμένη πολιτική FORWARD με τιμή ACCEPT, ένας φιλοξενούμενος του οποίου η προεπιλεγμένη διαδρομή δείχνει στην πύλη βγαίνει από τη διεπαφή που θα επιλέξει ο πίνακας δρομολόγησης, με ή χωρίς σήραγγα. Αν η πύλη έχει και προσαρμογέα NAT για εγκατάσταση πακέτων, αυτός ο προσαρμογέας είναι μια λειτουργική μη κρυπτογραφημένη έξοδος τη στιγμή που πέφτει η σήραγγα, και η δοκιμή σας μόνο-VPN δεν ήταν ποτέ δοκιμή μόνο-VPN.
Όταν αντίθετα ο διακομιστής είναι απομακρυσμένος και η πύλη τερματίζει η ίδια τη σήραγγα, η ίδια απόφαση δείχνει στη διεπαφή της σήραγγας, όχι στην κάρτα δικτύου που φτάνει στο διαδίκτυο:
iptables -P FORWARD DROP
iptables -A FORWARD -i eth0 -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Κρατήστε τη δική της εξωτερική μεταφορά της σήραγγας και μια διαδρομή διαχείρισης εκτός ζώνης χωριστά από την προωθούμενη κίνηση. Αν ο μόνος τρόπος να επισκευάσετε την πύλη είναι μέσα από τη σήραγγα που αποσφαλματώνετε, το εργαστήριο γίνεται άσκηση αποκλεισμού. Μια σειριακή κονσόλα, ένας προσαρμογέας διαχείρισης μόνο για τον κεντρικό υπολογιστή ή ένα στιγμιότυπο μιας γνωστής καλής κατάστασης είναι φθηνότερα από την ανάκτηση ενός χαλασμένου δρομολογητή με το χέρι.
Επαληθεύστε τη διαδρομή από τον φιλοξενούμενο, όχι από τον κεντρικό υπολογιστή
Δουλέψτε προς τα έξω. Επιβεβαιώστε ότι ο πελάτης φτάνει στη διεύθυνση WAN της πύλης, μετά στον διακομιστή μέσω της πύλης, μετά ότι μια σύνδεση στη θύρα VPN βγαίνει και επιστρέφει. Μια καταγραφή και στις δύο διεπαφές της πύλης δείχνει αν η απάντηση φτάνει και απορρίπτεται στη διαδρομή επιστροφής, κάτι που μια καταγραφή μόνο στον πελάτη δεν μπορεί να διακρίνει:
tcpdump -ni eth0 udp port 1194
tcpdump -ni tun0 udp port 1194
Μετά αποδείξτε την έξοδο. Ρωτήστε από τον φιλοξενούμενο μια υπηρεσία αντανάκλασης διευθύνσεων ποια προέλευση βλέπει και συγκρίνετε την με τη δική της διεύθυνση εξόδου της πύλης· αν η απάντηση ταιριάζει με τη διεύθυνση του κεντρικού υπολογιστή, υπάρχει διαδρομή γύρω από τη σήραγγα. Ελέγξτε ποιον resolver χρησιμοποιεί πραγματικά ο φιλοξενούμενος, και ελέγξτε το IPv6 ξεχωριστά, γιατί ένα τμήμα όπου το IPv6 είναι ενεργό ενώ η σήραγγα μεταφέρει μόνο IPv4 διαρρέει εκ σχεδιασμού και όχι κατά λάθος.
Τέλος, σπάστε το επίτηδες. Σταματήστε τη σήραγγα, ή μπλοκάρετε την εξωτερική της θύρα, και ανοίξτε μια νέα σύνδεση από τον φιλοξενούμενο. Πρέπει να αποτύχει, και ο λόγος πρέπει να είναι ένας που μπορείτε να ονομάσετε: καμία διαδρομή, ένας κανόνας απόρριψης ή ένας νεκρός resolver. Επανεκκινήστε τη σήραγγα και επιβεβαιώστε ότι ο φιλοξενούμενος ανακάμπτει χωρίς να ξαναχτίσετε το δίκτυο. Αν ένα mesh VPN όπως το Hamachi ή το ZeroTier μοιράζεται το εργαστήριο, θυμηθείτε ότι ένας γεφυρωμένος προσαρμογέας ακολουθεί το όνομα του προσαρμογέα, όχι το mesh, οπότε η γέφυρα πρέπει να επανακατευθυνθεί αφού ο πελάτης εγκαταστήσει τον δικό του εικονικό προσαρμογέα.
VBoxManage list bridgedifs
VBoxManage modifyvm lab-client --bridgeadapter1 <mesh-adapter-name>
Το να μοιράζεστε τη σήραγγα ενός φιλοξενούμενου με τον κεντρικό υπολογιστή αντανακλά το ίδιο πρόβλημα. Το να στρέψετε την προεπιλεγμένη διαδρομή του κεντρικού υπολογιστή στον φιλοξενούμενο λειτουργεί, όπως και ένας διαμεσολαβητής μέσα στον φιλοξενούμενο· το NAT μέσω του κεντρικού υπολογιστή δεν μεταφέρει τη σήραγγα του φιλοξενούμενου για κίνηση που ξεκίνησε ο κεντρικός υπολογιστής. Αποθηκεύστε τα ονόματα των τμημάτων και τους κανόνες του τείχους προστασίας σε ένα μέρος, πάρτε ένα στιγμιότυπο της κατάστασης που λειτουργεί, και καταγράψτε τη διεύθυνση προέλευσης που παρατήρησε ο διακομιστής. Η επόμενη αλλαγή προφίλ κοστίζει τότε ένα τρέξιμο σεναρίου αντί για ένα ξαναχτισμένο εργαστήριο.