Οι πελάτες hotspot σε ένα Pi δεν φτάνουν στο οικιακό LAN μέσω VPN TUN
Οι πελάτες hotspot που παίρνουν διεύθυνση αλλά δεν ανοίγουν οικιακό διαμοιρασμό χάνουν την επιστροφική διαδρομή, όχι τη γέφυρα. Ακολουθήστε τη διαδρομή TUN, τους ιδιοκτήτες προθεμάτων και το NAT.
Οι τοπικοί πελάτες Wi-Fi και Ethernet συνδέονται στο hotspot του Pi, παίρνουν διεύθυνση από το εύρος DHCP του και φορτώνουν σελίδες internet χωρίς παράπονο. Οι ίδιοι πελάτες μετά λήγουν όταν ανοίγουν κοινόχρηστο φάκελο ή διεπαφή web στο οικιακό LAN, ενώ το ίδιο το Pi φτάνει σε αυτό το LAN μέσω της σήραγγας. Τίποτα στο ασύρματο επίπεδο δεν είναι χαλασμένο. Αυτό που λείπει είναι ένα δρομολογημένο συμβόλαιο: το πρόθεμα του hotspot πρέπει να μεταφερθεί στη διεπαφή TUN και κάτι στην οικιακή πλευρά πρέπει να ξέρει πώς να στέλνει απαντήσεις πίσω σε αυτό. Και τα δύο μισά πρέπει να υπάρχουν πριν ένα μόνο πακέτο μπορέσει να ολοκληρώσει τη διαδρομή μετ' επιστροφής.
Τρεις συνδέσεις με τρεις διαφορετικές δουλειές
Μια γέφυρα Ethernet του Linux προωθεί πλαίσια με βάση τη διεύθυνση MAC προορισμού. OpenVPN σε λειτουργία TUN μεταφέρει πακέτα IP και δεν έχει καθόλου επίπεδο MAC, οπότε η προσθήκη τοπικής γέφυρας δεν καταχωρεί ποτέ τη σήραγγα ως θύρα. Η τεκμηρίωση του πυρήνα για TUN/TAP εξηγεί αυτόν τον διαχωρισμό: μια συσκευή TAP μοιάζει με διεπαφή Ethernet, μια συσκευή TUN όχι. Ένας σχεδιασμός που γεφυρώνει δύο τοπικές θύρες και μετά δρομολογεί είναι δρομολογητής, ό,τι κι αν λένε τα ονόματα των διεπαφών.
Αυτή η διάκριση καθορίζει την ιδιοκτησία. Το υποδίκτυο των πελατών, η προεπιλεγμένη πύλη τους και η αρχή DHCP για αυτό το εύρος ανήκουν στο τοπικό σχέδιο του Pi. Οι οικιακές εκπομπές DHCP δεν διασχίζουν δρομολογημένη σήραγγα και καμία ρύθμιση γέφυρας δεν το αλλάζει· το να στρέφετε τους πελάτες σε οικιακό διακομιστή DHCP είναι ξεχωριστός, σκόπιμος σχεδιασμός αναμετάδοσης με δικούς του τρόπους αποτυχίας.
Κρατήστε το modem έξω από τη γέφυρα πελατών. Μια σύνδεση PPP δεν είναι συσκευή Ethernet με άλλη ετικέτα και η τεκμηριωμένη λογική προεπιλεγμένης διαδρομής του pppd εκτελείται μετά τη διαπραγμάτευση IPCP και αποσύρει τη διαδρομή της όταν πέσει αυτός ο σύνδεσμος. Η αντιγραφή προτύπου DHCP και η μετονομασία κάθε usb0 σε ppp0 δεν αποδεικνύει τίποτα για πύλη, μετρική ή κύκλο ζωής.
Επιλέξτε τα προθέματα πριν επεξεργαστείτε οποιαδήποτε ρύθμιση
Τα επικαλυπτόμενα προθέματα σπαταλούν περισσότερα βράδια από τους κανόνες firewall, γιατί μια επικάλυψη στέλνει την αναζήτηση διαδρομής στη λάθος διεπαφή ακόμη και όταν η σήραγγα είναι υγιής. Ξεκινήστε καταγράφοντας τι υπάρχει ήδη στο Pi και μετά διαβάστε το αποτέλεσμα ως τέσσερις ξεχωριστές δεξαμενές.
ip -4 addr show scope global
ip -4 route show table main
ip -4 route get 192.168.77.10
Η πρώτη δεξαμενή είναι η διεύθυνση underlay που έδωσε ο πάροχος στο modem· πρέπει να μένει έξω από κάθε σχέδιο που απευθύνεται σε πελάτες. Η δεύτερη είναι το υποδίκτυο της σήραγγας που επέλεξε ο διακομιστής, συχνά ένα δικό του ιδιωτικό /24 δίκτυο. Η τρίτη είναι η γέφυρα του hotspot και η τέταρτη είναι το οικιακό πρόθεμα που θέλετε να φτάσετε. Σε αυτή τη διαδρομή το hotspot παίρνει 172.28.90.0/24 με τη γέφυρα στο 172.28.90.1, και το οικιακό LAN υπηρεσιών κρατά το 192.168.77.0/24, που αποφεύγει τις προεπιλογές 192.168.1.0/24 και 10.0.0.0/24 που φέρνουν οι οικιακοί δρομολογητές και το εύρος παρόχου 100.64.0.0/10.
Διαφημίστε τη διεύθυνση της γέφυρας ως πύλη στο εύρος DHCP του hotspot και τίποτα άλλο. Μην δίνετε ποτέ σε πελάτες hotspot οικιακή διεύθυνση ως πύλη· δεν έχουν διαδρομή σε επίπεδο ζεύξης προς αυτό το τμήμα.
Δρομολογήστε κάθε κατεύθυνση στην πλευρά που την κατέχει
Το Pi χρειάζεται διαδρομή για το οικιακό πρόθεμα μέσω της σήραγγας. Οι διακομιστές σε λειτουργία διακομιστή συνήθως σπρώχνουν αυτή τη διαδρομή, οπότε πρώτα επιβεβαιώστε ότι η προώθηση είναι ενεργή και ότι ο πυρήνας επιλύει οικιακή διεύθυνση από το tun0.
sysctl net.ipv4.ip_forward
ip route add 192.168.77.0/24 dev tun0
ip -4 route get 192.168.77.10
Αν το ip route get εξακολουθεί να αναφέρει τη διεπαφή underlay, σταματήστε εκεί· τίποτα πιο κάτω στη διαδρομή δεν μπορεί να διορθώσει λάθος αναζήτηση.
Οι οικιακές συσκευές δεν έχουν διαδρομή προς το 172.28.90.0/24, οπότε οι απαντήσεις τους ακολουθούν την προεπιλεγμένη πύλη και πεθαίνουν στον δρομολογητή. Υπάρχουν δύο υποστηριζόμενες επισκευές. Είτε προσθέτετε στατική διαδρομή στον οικιακό δρομολογητή που στρέφει το πρόθεμα του hotspot στη διεύθυνση LAN του διακομιστή VPN, είτε, όταν ο διακομιστής είναι ο ίδιος η πύλη, καταχωρείτε το πρόθεμα του πελάτη στον δικό του πίνακα δρομολόγησης. Στη λειτουργία πολλαπλών πελατών του OpenVPN ο κατάλογος ειδικά για τον πελάτη μεταφέρει αυτή τη συσχέτιση: ένα αρχείο με όνομα από το κοινό όνομα του πιστοποιητικού του πελάτη, που περιέχει iroute 172.28.90.0 255.255.255.0 και την αντίστοιχη γραμμή route που το εγκαθιστά στον πυρήνα του διακομιστή. Μια εικαζόμενη διαδρομή πυρήνα στον διακομιστή δεν είναι η ίδια δήλωση με το να πείτε στον διακομιστή ποιος πελάτης κατέχει το πρόθεμα.
Μη μετακινήσετε την υπηρεσία DHCP του οικιακού δικτύου στον διακομιστή VPN για να δουλέψει αυτό. Η αντικατάσταση της προεπιλεγμένης πύλης για ένα ολόκληρο σπίτι είναι πολύ μεγαλύτερη αλλαγή από την προσθήκη μιας ιδιωτικής επιστροφικής διαδρομής και σέρνει DNS, δεσμεύσεις διευθύνσεων και κάθε συσκευή που αγνοεί τη νέα μίσθωση στην αποτυχία.
Ανοίξτε την προώθηση χωρίς να μαντεύετε το firewall
Η ενεργή προώθηση δεν σημαίνει ότι το πακέτο επιτρέπεται να περάσει. Η κίνηση από τη γέφυρα στη σήραγγα εξακολουθεί να χτυπά τους κανόνες φιλτραρίσματος και μια προεπιλεγμένη πολιτική προώθησης drop ρίχνει την κίνηση του hotspot ενώ η δική του κίνηση του Pi συνεχίζει να λειτουργεί, που παράγει ακριβώς το διχασμένο σύμπτωμα παραπάνω.
iptables -S FORWARD
iptables -t nat -S POSTROUTING
nft list ruleset
Αναζητήστε κανόνα αποδοχής από το br0 προς το tun0 και την αντίστοιχη κατεύθυνση απάντησης, και κανόνα postrouting που μπορεί να ξαναγράψει την πηγή. Αν η πολιτική της αλυσίδας είναι drop και κανένας κανόνας δεν ταιριάζει, προσθέστε τις στενές αποδοχές και δοκιμάστε ξανά αντί να γυρίσετε την πολιτική σε accept.
Η μετάφραση είναι επιλογή πολιτικής, όχι απαίτηση. Το Source NAT προς το οικιακό LAN κάνει κάθε πελάτη hotspot να μοιάζει με τη διεύθυνση σήραγγας του Pi, που χάνει την απόδοση ανά πελάτη στα οικιακά αρχεία καταγραφής και σπάει υπηρεσίες που περιμένουν την αρχική πηγή. Η δρομολόγηση χωρίς NAT κρατά τις διευθύνσεις πελατών ορατές αλλά εξαρτάται από την επιστροφική διαδρομή παραπάνω. Διαλέξτε μία και χειριστείτε DNS και IPv6 με τον ίδιο τρόπο, γιατί μια λειτουργική διαδρομή IPv4 δίπλα σε σπασμένη διαδρομή IPv6 εξακολουθεί να διαβάζεται ως μισοσπασμένη στο πρόγραμμα περιήγησης.
Επαληθεύστε τη διαδρομή μετ' επιστροφής και μετά σπάστε την επίτηδες
Δοκιμάστε από πελάτη hotspot, ποτέ από το Pi, γιατί η δική του κίνηση του Pi παρακάμπτει και την μπροστινή και την επιστροφική διαδρομή. Παρατηρήστε και τις δύο διεπαφές ενώ ένας πελάτης προσπαθεί να φτάσει σε οικιακή υπηρεσία.
tcpdump -ni br0 host 192.168.77.10
tcpdump -ni tun0 host 192.168.77.10
ping -c 3 192.168.77.10
Διαβάστε τις δύο συλλογές μαζί. Τα αιτήματα στο br0 που δεν εμφανίζονται ποτέ στο tun0 σημαίνουν ότι το Pi δεν προωθεί ή η διαδρομή δείχνει αλλού. Τα αιτήματα στο tun0 χωρίς απαντήσεις σημαίνουν ότι η οικιακή πλευρά δεν έχει επιστροφική διαδρομή ή ο διακομιστής φίλτραρε το πακέτο. Οι απαντήσεις στο tun0 που δεν εμφανίζονται ξανά στο br0 σημαίνουν ότι λείπει ο αντίστροφος κανόνας φιλτραρίσματος, όπου η σήραγγα φαίνεται τέλεια και ο πελάτης δεν βλέπει ακόμη τίποτα.
Μετά σπάστε τη διαδρομή σκόπιμα. Κατεβάστε τη σύνδεση του modem και ανεβάστε την ξανά και επαναλάβετε τους ελέγχους διαδρομής και σύλληψης· μια διαδρομή που επιβιώνει από τη σήραγγα αλλά εξαφανίζεται στην επανασύνδεση ανήκει στο προφίλ σύνδεσης, όχι σε μια εντολή μιας χρήσης. Επιβεβαιώστε ότι η μεταφορά της σήραγγας εξακολουθεί να βγαίνει μέσω του underlay και όχι μέσα από τον εαυτό της, ο κλασικός βρόχος όταν μια προωθημένη προεπιλεγμένη διαδρομή γίνεται δεκτή χωρίς διαδρομή κεντρικού υπολογιστή προς τον ομότιμο.
Αποδεχτείτε τον σχεδιασμό μόνο όταν ένας πελάτης hotspot μπορεί να επιλύσει οικιακό όνομα, να ανοίξει υπηρεσία TCP και να κρατήσει μια συνεδρία ζωντανή μέσα από μία επανασύνδεση modem. Αν μια εφαρμογή απαιτεί πραγματικά ανακάλυψη σε επίπεδο Ethernet στο οικιακό τμήμα, επιλέξτε υποστηριζόμενο σχεδιασμό Layer 2 αντί να περιγράφετε την τοπική γέφυρα ως γεφυρωμένη και να περιμένετε να εμφανιστεί εκπομπή.