hostapd και OpenVPN σε ένα Pi: ποιος κατέχει την προεπιλεγμένη διαδρομή;
Το hostapd και ένας πελάτης OpenVPN μπορούν να μοιράζονται ένα Pi όταν η γέφυρα κρατά τη δική της προεπιλεγμένη διαδρομή και το τούνελ κρατά μια διαδρομή προς τον διακομιστή του. Εντολές και επαναφορά.
Τα τηλέφωνα συνδέονται στο σημείο πρόσβασης, λαμβάνουν μια διεύθυνση και μετά δεν φτάνουν πουθενά μόλις σηκωθεί το τούνελ. Το hostapd είναι συνήθως υγιές σε αυτή την κατάσταση, και το OpenVPN επίσης· αυτό που σπάει είναι η προεπιλεγμένη διαδρομή, η οποία είτε δεν υπήρξε ποτέ στη γέφυρα είτε αντικαταστάθηκε από το τούνελ χωρίς να αφήσει διαδρομή προς τον ίδιο τον διακομιστή VPN. Αυτός ο οδηγός επαναφέρει τη διαδρομή στη θέση της και αποδεικνύει το αποτέλεσμα από έναν πελάτη και όχι από το Pi. Κάθε βήμα είναι αναστρέψιμο και τίποτα εδώ δεν αλλάζει τη ρύθμιση του τούνελ μέχρι να ξέρετε ποια κίνηση θέλετε μέσα του.
Καταγράψτε τις διεπαφές πριν αλλάξετε οτιδήποτε
Η γνωστή διάταξη βάζει το ασύρματο ραδιόφωνο και τη θύρα με καλώδιο μέσα στο br0, ξεκινά το hostapd πάνω στη γέφυρα και μοιράζει μισθώσεις από το dnsmasq, ενώ ένας πελάτης OpenVPN δημιουργεί το tun0. Έπειτα τρεις ξεχωριστές απαιτήσεις μοιάζουν με μία: οι πελάτες του σημείου πρόσβασης χρειάζονται το Pi ως πύλη τους, το Pi χρειάζεται διαδρομή προς το διαδίκτυο για να φτάσει τον διακομιστή του, και η γέφυρα χρειάζεται διεύθυνση πύλης που μπορούν να χρησιμοποιήσουν αυτοί οι πελάτες.
Διαβάστε την τρέχουσα κατάσταση πριν την αλλάξετε, γιατί αυτές οι τέσσερις εντολές χωρίζουν ένα πρόβλημα διεπαφής από ένα πρόβλημα δρομολόγησης.
ip -br addr
ip route show
ip link show master br0
bridge link show
Αν το br0 φέρει διεύθυνση αλλά καμία προεπιλεγμένη διαδρομή, οι πελάτες φτάνουν στο Pi και σε τίποτα πέρα από αυτό. Αν η προεπιλεγμένη διαδρομή δείχνει στο tun0 ενώ το τούνελ είναι κάτω, το Pi δεν έχει καθόλου λειτουργική διαδρομή, και το σύμπτωμα του πελάτη φαίνεται ακριβώς το ίδιο. Και οι δύο περιπτώσεις φαίνονται ίδιες από ένα τηλέφωνο, γι' αυτό ο πίνακας δρομολόγησης πρέπει να διαβάζεται απευθείας.
Δώστε στη γέφυρα μια προεπιλεγμένη διαδρομή που της ανήκει
Το Raspberry Pi OS αφήνει συχνά τη γέφυρα χωρίς προεπιλεγμένη διαδρομή όταν η γέφυρα δημιουργήθηκε αφού γράφτηκε το αρχείο διεπαφής. Το τμήμα ανήκει στο /etc/dhcpcd.conf και πρέπει να ονομάζει τον ανάντη δρομολογητή και όχι το Pi.
interface br0
static ip_address=192.168.50.2/24
static routers=192.168.50.1
static domain_name_servers=192.168.50.1
Σε αυτό το παράδειγμα το 192.168.50.1 είναι ο υπάρχων δρομολογητής και το 192.168.50.2 είναι η διεύθυνση γέφυρας του Pi στο ίδιο υποδίκτυο, οπότε βάλτε το δικό σας σχέδιο αντί να αντιγράψετε τους αριθμούς. Τα μέλη της γέφυρας δεν πρέπει επίσης να ζητούν δρομολογητές, αλλιώς το Pi καταλήγει με ανταγωνιστικές προεπιλογές των οποίων ο νικητής εξαρτάται από τη μετρική και τον χρόνο και όχι από την πρόθεση.
Μετά το systemctl restart dhcpcd το ip route show default πρέπει να εμφανίζει το br0 μία φορά και κανένα διπλότυπο από τη θύρα με καλώδιο. Επιβεβαιώστε την αναζήτηση και όχι τον πίνακα, γιατί μια παλιά καταχώριση μπορεί να κάθεται δίπλα σε μια κερδισμένη: το ip -4 route get 203.0.113.10 πρέπει να ονομάζει το br0. Αυτή η διεύθυνση προέρχεται από το εύρος τεκμηρίωσης TEST-NET-3, οπότε δεν μπορεί να συγκρουστεί με πραγματικό διακομιστή όσο το διαβάζετε.
Σταματήστε το τούνελ να κλέβει τη διαδρομή προς τον δικό του διακομιστή
Ένας πελάτης OpenVPN που δέχεται το redirect-gateway παίρνει την προεπιλεγμένη διαδρομή και τη στρέφει μέσα στο τούνελ. Αυτό είναι σωστό όταν κάθε πελάτης του σημείου πρόσβασης πρέπει να χρησιμοποιεί το VPN, και λάθος όταν πρέπει μόνο ορισμένοι προορισμοί. Όπως και να έχει, η δική του σύνδεση του Pi με τον διακομιστή δεν πρέπει να ταξιδεύει μέσα στο τούνελ που ακόμη χτίζει. Το OpenVPN προσθέτει διαδρομή κεντρικού υπολογιστή προς τον απομακρυσμένο μέσω της αρχικής πύλης όταν ανακατευθύνει την προεπιλογή, και αυτή είναι ακριβώς η συμπεριφορά που κρατά ζωντανή τη μεταφορά· αν λείπει αυτή η διαδρομή, το τούνελ καταρρέει μόλις εδραιωθεί.
Μια γρήγορη σύγκριση αυτής της διαδρομής μεταφοράς πριν και μετά τη σύνδεση αξίζει τα δέκα δευτερόλεπτα. Το ip -4 route get 203.0.113.10 πρέπει να ονομάζει τη συσκευή υποστρώματος και στις δύο καταστάσεις, με μόνο τη μετρική να αλλάζει. Αν ονομάζει το tun0 αφού σηκωθεί το τούνελ, η διαδρομή κεντρικού υπολογιστή δεν εγκαταστάθηκε ποτέ και η επόμενη επανασύνδεση θα αποτύχει.
Όταν μόνο επιλεγμένα προθέματα πρέπει να διασχίσουν το τούνελ, χρησιμοποιήστε το route-nopull και προσθέστε τις διαδρομές που θέλετε με το χέρι, ή στείλτε ένα στενότερο σύνολο από τον διακομιστή. Η γέφυρα κρατά την προεπιλεγμένη διαδρομή σε αυτόν τον σχεδιασμό, και το DNS γίνεται η επόμενη απόφαση: η προώθηση του dnsmasq σε έναν οικιακό επιλυτή έχει νόημα μόνο για τα ονόματα που πραγματικά ζουν εκεί.
Αποφασίστε την ιστορία προώθησης και NAT
Το πλήρες τούνελ χρειάζεται προώθηση ενεργοποιημένη στο Pi και μια πύλη στην απέναντι πλευρά πρόθυμη να δρομολογήσει το υποδίκτυο του σημείου πρόσβασης. Ελέγξτε την προώθηση πριν από οτιδήποτε άλλο, γιατί ένα μηδέν κάνει κάθε αλλαγή διαδρομής άσχετη.
sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o tun0 -j MASQUERADE
Ο κανόνας NAT είναι η συντόμευση που λειτουργεί όταν ο διακομιστής δεν θα δεχτεί το πρόθεμα του σημείου πρόσβασης, με κόστος κάθε πελάτης να εμφανίζεται ως η διεύθυνση τούνελ του Pi στα αρχεία καταγραφής της απέναντι πλευράς. Η δρομολόγηση του προθέματος χωρίς NAT κρατά τις διευθύνσεις ορατές και εξαρτάται από μια διαδρομή επιστροφής για το 192.168.50.0/24 στην πλευρά του σπιτιού.
Γράψτε την επιλογή δίπλα στους κανόνες του τείχους προστασίας, γιατί ένας κανόνας NAT αόρατος στον σχεδιασμό γίνεται ανεξήγητος έξι μήνες αργότερα. Κρατήστε το IPv6 στην ίδια απόφαση· μια λειτουργική διαδρομή IPv4 δίπλα σε μια χαλασμένη διαδρομή IPv6 εξακολουθεί να διαβάζεται ως μισοχαλασμένη σε ένα πρόγραμμα περιήγησης.
Επαληθεύστε από έναν πελάτη και μετά επαναφέρετε καθαρά
Δοκιμάστε με αυτή τη σειρά από ένα τηλέφωνο ή φορητό υπολογιστή στο σημείο πρόσβασης: μια μίσθωση από το dnsmasq, ένα ping στη διεύθυνση της γέφυρας, και μετά έναν προορισμό στην απέναντι πλευρά του τούνελ. Κάθε βήμα απομονώνει ένα επίπεδο αντί να παράγει μια μόνο άχρηστη αποτυχία.
ip -4 route get 203.0.113.10
ping -c 3 -I br0 203.0.113.10
Μετά επιβεβαιώστε ότι το Pi έχει ακόμη τη δική του έξοδο: το ip route get 203.0.113.10 πρέπει να ονομάζει τη συσκευή υποστρώματος, και το ping -c 3 -I br0 203.0.113.10 πρέπει να απαντά αν ο διακομιστής επιτρέπει ICMP. Αν τα δύο πρώτα βήματα του πελάτη περάσουν και το τρίτο αποτύχει, το σφάλμα βρίσκεται στην προώθηση ή στο NAT. Αν το δεύτερο βήμα αποτύχει, η γέφυρα ή το DHCP είναι ακόμη ελλιπή.
Η επαναφορά είναι μία επεξεργασία αρχείου και δύο εντολές: αφαιρέστε το τμήμα, επανεκκινήστε το dhcpcd και αντικαταστήστε την προεπιλεγμένη διαδρομή ρητά με το ip route replace default via 192.168.50.1 dev br0. Κάντε το πριν κλείσει το παράθυρο συντήρησης και όχι μετά, γιατί ένα Pi που έχασε την προεπιλεγμένη διαδρομή του είναι απρόσιτο από το δίκτυο που θα χρησιμοποιούσατε για να το επισκευάσετε.