OpenVPN πλήρους τούνελ: προσθέστε έξοδο διαδικτύου στην πλευρά του διακομιστή
Το σπρώξιμο μιας προεπιλεγμένης διαδρομής είναι μόνο το μισό της υπηρεσίας πλήρους τούνελ. Ο διακομιστής χρειάζεται επίσης προώθηση, περιορισμένο κανόνα προώθησης και διαδρομή επιστροφής για τη δεξαμενή.
Ένας πελάτης πιστοποιείται, λαμβάνει διεύθυνση από τη δεξαμενή και φτάνει στις υπηρεσίες του κεντρικού υπολογιστή VPN, όμως κάθε δημόσιος προορισμός λήγει σε υπέρβαση χρόνου. Έτσι μοιάζει ένα τούνελ χωρίς έξοδο, και έτσι μένει μέχρι να ισχύσουν τέσσερα ξεχωριστά πράγματα. Ο πελάτης πρέπει να δεχτεί μια προεπιλεγμένη διαδρομή, ο διακομιστής πρέπει να προωθεί, το τείχος προστασίας πρέπει να επιτρέπει τη διέλευση, και οι απαντήσεις χρειάζονται διαδρομή πίσω στη δεξαμενή. Και οι τέσσερις αστοχίες μοιράζονται ένα σύμπτωμα, γι' αυτό αλλάξτε ένα στοιχείο ανά προσπάθεια και σημειώστε το αποτέλεσμα.
Σπρώξτε την προεπιλεγμένη διαδρομή και επιβεβαιώστε τι εγκατέστησε ο πελάτης
Η γραμμή στην πλευρά του διακομιστή είναι σύντομη, και επηρεάζει μόνο πελάτες που δέχονται επιλογές που σπρώχνονται. Η μορφή def1 εγκαθιστά δύο μισές προεπιλεγμένες διαδρομές αντί να διαγράψει την υπάρχουσα προεπιλεγμένη, κάτι που κρατά ζωντανή την τρέχουσα σύνδεση ενώ εξακολουθεί να συλλαμβάνει κάθε προορισμό.
push "redirect-gateway def1"
Μετά την επανασύνδεση, διαβάστε τον πίνακα δρομολόγησης του πελάτη αντί να εμπιστευτείτε το προφίλ. Στο Linux οι δύο εγγραφές /1 εμφανίζονται δίπλα στην αρχική προεπιλεγμένη διαδρομή, και τα Windows δείχνουν το ίδιο ζεύγος ως 0.0.0.0/1 και 128.0.0.0/1. Ένας πελάτης που αγνοεί τις επιλογές που σπρώχνονται, ή ένας που έχει ρυθμιστεί να τις αρνείται, κρατά την παλιά του προεπιλεγμένη διαδρομή και δεν στέλνει ποτέ κίνηση διαδικτύου στο τούνελ. Λύστε αυτό το ζήτημα πριν αλλάξετε οτιδήποτε στον διακομιστή, γιατί κανένας κανόνας στην πλευρά του διακομιστή δεν μπορεί να το αναπληρώσει.
Η προώθηση είναι ρύθμιση διακομιστή, όχι ρύθμιση VPN
Διαβάστε τη σημαία προώθησης πριν αγγίξετε τη δρομολόγηση. Ένα μηδέν εκεί σημαίνει ότι ο πυρήνας λαμβάνει το πακέτο του πελάτη και αρνείται να το περάσει παρακάτω, κάτι που μοιάζει ακριβώς με μπλοκάρισμα τείχους προστασίας από την απέναντι πλευρά. Ορίστε την τιμή μέσω του καταλόγου ρυθμίσεων του συστήματος ώστε να επιβιώσει από επανεκκίνηση.
sysctl net.ipv4.ip_forward
echo 'net.ipv4.ip_forward=1' | sudo tee /etc/sysctl.d/99-vpn-forward.conf
sudo sysctl --system
Έπειτα, επιβεβαιώστε ότι ο ίδιος ο κεντρικός υπολογιστής έχει λειτουργική διαδρομή προς την έξοδο του διαδικτύου. Ένα αίτημα από το κέλυφος του διακομιστή αποδεικνύει ότι η ανάντη διαδρομή είναι χρησιμοποιήσιμη και δεν λέει απολύτως τίποτα για την προώθηση του πακέτου ενός πελάτη, γι' αυτό αντιμετωπίστε τα ως δύο ξεχωριστά τεστ. Αν ο διακομιστής δεν μπορεί να φτάσει τον προορισμό, καμία ποσότητα ρύθμισης προώθησης δεν θα βοηθήσει.
Επιτρέψτε ακριβώς τη διέλευση που σκοπεύετε, και τίποτα άλλο
Τα προωθημένα πακέτα διασχίζουν τη διαδρομή προώθησης· η κίνηση που απευθύνεται στον ίδιο τον κεντρικό υπολογιστή VPN διασχίζει τη διαδρομή εισόδου. Αυτές είναι διαφορετικές αποφάσεις, και το άνοιγμα της διαδρομής εισόδου δεν επιτρέπει διέλευση μέσα από το μηχάνημα. Η σύγχυσή τους είναι ο πιο συνηθισμένος λόγος που ένα τείχος προστασίας φαίνεται να επιτρέπει τα πάντα ενώ οι πελάτες εξακολουθούν να λήγουν σε υπέρβαση χρόνου.
Μια ελάχιστη πολιτική δέχεται νέες συνδέσεις από τη δεξαμενή προς τη διεπαφή εξόδου και δέχεται απαντήσεις που ανήκουν σε εδραιωμένες ροές. Τοποθετήστε την στον ιδιοκτήτη συνόλου κανόνων που χρησιμοποιεί η διανομή σας, αντί να προσθέτετε διπλότυπο κανόνα σε κάθε εκκίνηση· οι διπλότυποι κανόνες συσσωρεύονται και οι μετρητές παύουν να σημαίνουν κάτι.
sudo iptables -A FORWARD -i tun0 -o eth0 -s 10.90.0.0/24 -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
Η αλλαγή κάθε αλυσίδας σε αποδοχή κάνει το τεστ να περάσει και αφαιρεί τον λόγο ύπαρξης του τείχους προστασίας. Κρατήστε το εύρος στη δεξαμενή και τη διεπαφή εξόδου, και αφήστε ήσυχη την άσχετη προώθηση.
Δώστε στις απαντήσεις έναν προορισμό
Οι διευθύνσεις της δεξαμενής είναι ιδιωτικές, οπότε ένας δημόσιος διακομιστής δεν μπορεί να παραδώσει απάντηση απευθείας σε αυτές. Είτε ο κεντρικός υπολογιστής VPN μεταφράζει τη διεύθυνση προέλευσης στην έξοδο, είτε μια συσκευή ανάντη κρατά διαδρομή πίσω στη δεξαμενή.
sudo iptables -t nat -A POSTROUTING -s 10.90.0.0/24 -o eth0 -j MASQUERADE
Προσθέστε ακριβώς ένα επίπεδο μετάφρασης. Ένα δεύτερο NAT πιο πάνω κρύβει το πρώτο και κάνει και τα δύο αρχεία καταγραφής σχεδόν άχρηστα όταν κάτι χαλάσει αργότερα. Αν ένας δρομολογητής ανάντη δρομολογεί ήδη τη δεξαμενή πίσω, η μετάφραση στον κεντρικό υπολογιστή είναι περιττή, και η διαδρομή επιστροφής εξαρτάται τότε από τη ρύθμιση εκείνου του δρομολογητή και όχι από τη δική σας.
Οι παρουσίες στο νέφος προσθέτουν άλλη μια πύλη, γιατί ορισμένες πλατφόρμες απορρίπτουν πακέτα των οποίων η διεύθυνση προέλευσης δεν είναι της παρουσίας, εκτός αν χαλαρώσει αυτός ο έλεγχος. Αυτή η ρύθμιση βρίσκεται έξω από τον φιλοξενούμενο και ξεχνιέται εύκολα όταν δουλεύει ένα τοπικό μηχάνημα δοκιμής.
Αποδείξτε το από τον πελάτη, όχι από το κέλυφος του διακομιστή
Ξεκινήστε με αριθμητικό αίτημα IPv4, μετά αναζήτηση ονόματος, μετά την εφαρμογή. Ένα ping αποδεικνύει προώθηση και μετάφραση·δεν αποδεικνύει τίποτα για την επίλυση, γιατί οι επιλογές DNS ισχύουν μόνο όταν τις εγκαταστήσει η ενσωμάτωση του πελάτη.
curl -4 -m 5 http://198.51.100.10/
dig +short example.com
Καταγράψτε τις αλλαγές και το βήμα αναίρεσης στην πορεία, ώστε η πολιτική εξόδου να μπορεί να ανακληθεί με μία ενέργεια όταν ένα τεστ αποτύχει. Αυτή η συνταγή καλύπτει μόνο IPv4· απογράψτε το IPv6 ξεχωριστά πριν ισχυριστείτε ότι η ανάπτυξη μεταφέρει όλη την κίνηση.