Πώς να μετακινήσετε έναν διακομιστή VPN Raspberry Pi στο Ethernet
Μετακινήστε έναν διακομιστή VPN Raspberry Pi από Wi-Fi σε Ethernet χωρίς να αλλάξετε το όνομα του τελικού σημείου, τη δέσμευση του listener, τη προώθηση θύρας ή τη διαδρομή επαναφοράς σε ένα βήμα.
Η αλλαγή του Pi από Wi-Fi σε καλώδιο φαίνεται δουλειά πέντε λεπτών, και παραμένει έτσι μόνο αν αντιμετωπίσετε τη μετακίνηση ως τέσσερις ξεχωριστές ρυθμίσεις αντί για μία. Το όνομα του τελικού σημείου που καλούν οι πελάτες σας μπορεί να μείνει ακριβώς το ίδιο ενώ η διεύθυνση από κάτω αλλάζει. Αυτό που πραγματικά σπάει είναι ένας listener καρφιτσωμένος στην παλιά διεύθυνση, μια προώθηση θύρας που ακόμη στοχεύει τη μίσθωση Wi-Fi, ή μια διαδρομή επιστροφής που βγαίνει από τη διεπαφή που νομίζατε ότι αποσύρατε. Αυτός ο οδηγός κρατά ανοιχτή μια διαδρομή ανάκτησης σε κάθε βήμα, ώστε μια αποτυχημένη μετάβαση να κοστίζει μόνο μια επανεκκίνηση.
Καταγράψτε τους τέσσερις υπεύθυνους πριν αποσυνδέσετε οτιδήποτε
Τέσσερις ρυθμίσεις αποφασίζουν αν η μετάβαση επιβιώνει: η διεύθυνση του Pi, η διεύθυνση δέσμευσης OpenVPN, ο στόχος ανακατεύθυνσης του router και η διαδρομή που ακολουθούν οι απαντήσεις. Καταγράψτε και τις τέσσερις πριν αγγίξετε το καλώδιο, γιατί μόλις εξαφανιστεί η μίσθωση Wi-Fi δεν μπορείτε πλέον να διαβάσετε τις παλιές τιμές από το μηχάνημα. Η ενσύρματη διεπαφή δεν κληρονομεί το προφίλ Wi-Fi, και στο Bookworm η διεύθυνση ζει στο NetworkManager ενώ το Bullseye την κρατά στο dhcpcd.conf. Μια δέσμευση που καθήλωσε τη διεύθυνση MAC Wi-Fi δεν λέει τίποτα για eth0. Αντιμετωπίστε τη νέα διεύθυνση ως νέα εκχώρηση που χρειάζεται τη δική της απόδειξη.
Old wireless lease: 10.42.7.24/24 on wlan0
New wired address: 10.42.7.31/24 on eth0
Client endpoint: vpn.lab.example:1194/udp
Ο listener είναι ο δεύτερος υπεύθυνος. Αν η υπηρεσία ξεκίνησε με συγκεκριμένη διεύθυνση δέσμευσης, το socket πεθαίνει με την παλιά διεπαφή· αν δεσμεύει όλες τις διευθύνσεις, το socket επιβιώνει και ο κανόνας του router γίνεται το μόνο που μένει να διορθωθεί.
Ο στόχος ανακατεύθυνσης και η διαδρομή επιστροφής είναι οι υπεύθυνοι που οι άνθρωποι παραλείπουν. Μια προώθηση που δείχνει ακόμη στο 10.42.7.24 στέλνει τα εισερχόμενα handshake σε διεύθυνση που το Pi δεν έχει πια, οπότε οι πελάτες λήγουν χωρίς καμία γραμμή αρχείου καταγραφής στην πλευρά του διακομιστή. Η διαδρομή επιστροφής μετράει όταν και οι δύο ζεύξεις είναι για λίγο ενεργές, επειδή το Pi απαντά από τη διεπαφή που προτιμά ο πίνακας δρομολόγησης, και δεν είναι πάντα αυτή από την οποία έφτασε το πακέτο. Η αναζήτηση διαδρομής παρακάτω δείχνει ποια πηγή επιλέγει ο πυρήνας.
Διαβάστε το πραγματικό socket πριν εμπιστευτείτε τη νέα διεύθυνση
Τα αρχεία ρυθμίσεων περιγράφουν την πρόθεση και το socket περιγράφει την πραγματικότητα. Ρωτήστε την εκτελούμενη υπηρεσία σε τι είναι δεμένη αντί να εμπιστευτείτε τη ρύθμιση που θυμάστε. Το εγχειρίδιο του OpenVPN 2.6 ορίζει --local ως δέσμευση σε μία διεύθυνση και σημειώνει ότι η παράλειψή του δεσμεύει κάθε διεπαφή.
sudo systemctl cat openvpn-server@server | grep -n -- '--local'
sudo ss -lunp '( sport = :1194 )'
Διαβάστε τη στήλη της τοπικής διεύθυνσης αντί της στήλης κατάστασης. Μια γραμμή που δείχνει 10.42.7.24:1194 σημαίνει ότι το socket είναι καρφιτσωμένο στη διεύθυνση που πρόκειται να αφαιρέσετε, ενώ 0.0.0.0:1194 ή *:1194 σημαίνει ότι ο δαίμονας θα ακολουθήσει μόνος του την αλλαγή διεπαφής. Αν η διεύθυνση είναι καρφιτσωμένη, επεξεργαστείτε το προφίλ και επανεκκινήστε τη μονάδα αντί να ξαναγράψετε με το χέρι το ενεργό socket, και μετά επιβεβαιώστε ότι η υπηρεσία φτάνει ακόμη στα αρχεία πιστοποιητικού και κλειδιού της.
Κάντε τη μετακίνηση με σειρά που σας κρατά προσβάσιμους
Η σειρά μετράει εδώ περισσότερο από την ταχύτητα. Σηκώστε την ενσύρματη ζεύξη ενώ η ασύρματη λειτουργεί ακόμη, επιβεβαιώστε τη νέα διεύθυνση και τη διαδρομή επιστροφής, και μετά αποσύρετε το προφίλ Wi-Fi. Αυτή η ακολουθία κρατά μια λειτουργική συνεδρία ανοιχτή μέχρι να αποδειχθεί ο αντικαταστάτης.
ip -br addr show eth0
ip route get 203.0.113.10
nmcli -g ipv4.method,ipv4.addresses con show "Wired connection 1"
Η πρώτη εντολή απαντά αν eth0 έλαβε τη διεύθυνση που σκοπεύατε, και η δεύτερη εκτυπώνει τη διεύθυνση πηγής που θα χρησιμοποιούσε ο πυρήνας για προορισμό εκτός δικτύου, οπότε εκτελέστε την πριν και μετά την αλλαγή. Αν αυτή η πηγή είναι ακόμη η διεύθυνση Wi-Fi, η ενσύρματη ζεύξη δεν είναι ακόμη η προτιμώμενη διαδρομή και το τεστ απ’ έξω θα αποτύχει για λόγο που δεν έχει καμία σχέση με το OpenVPN. Διορθώστε την προτίμηση δρομολόγησης πριν αγγίξετε την προώθηση.
Με και τις δύο ζεύξεις ενεργές, το Pi μπορεί να προτιμά την προεπιλεγμένη διαδρομή Wi-Fi επειδή εγκαταστάθηκε πρώτη ή επειδή η ενσύρματη ζεύξη φέρει υψηλότερη μετρική. Στο Bookworm η υποστηριζόμενη ρύθμιση είναι ipv4.route-metric στη σύνδεση, και στο Bullseye το ισοδύναμο είναι μια γραμμή metric ειδική για τη διεπαφή στο dhcpcd.conf. Υποβιβάστε την ασύρματη ζεύξη αντί να την απενεργοποιήσετε, ώστε η διαδρομή επαναφοράς να μένει μία εντολή μακριά.
Αποδείξτε το τούνελ απ’ έξω, όχι από το LAN
Μια σύνδεση VPN που λειτουργεί από τον καναπέ αποδεικνύει λιγότερα απ’ όσα φαίνεται. Η κίνηση από μέσα στο LAN προς τη δημόσια διεύθυνση περνά από κανόνες hairpin ή ανάκλασης που οι routers υλοποιούν ασυνεπώς, οπότε ένα επιτυχημένο τεστ LAN μπορεί να συνυπάρχει με σπασμένη εξωτερική διαδρομή. Χρησιμοποιήστε τηλέφωνο με δεδομένα κινητής ή οποιονδήποτε host εκτός δικτύου για το τεστ αποδοχής. Κρατήστε την προσπάθεια LAN ως ξεχωριστή προαιρετική διάγνωση.
Έπειτα διαβάστε το αρχείο καταγραφής με τη σειρά που φτάνουν τα πακέτα. Τίποτα απολύτως σημαίνει ότι το handshake δεν έφτασε ποτέ στο Pi, άρα ο στόχος ανακατεύθυνσης ή το τείχος προστασίας του host είναι λάθος. Ένα handshake που ξεκινά και κολλάει δείχνει κλειδιά, πιστοποιητικά ή MTU. Μια συνεδρία που ολοκληρώνεται και πέφτει συνήθως σημαίνει τη διαδρομή επιστροφής ή μια δεύτερη προεπιλεγμένη διαδρομή, και η γραμμή καταγραφής του πελάτη Initialization Sequence Completed σας λέει ότι το τούνελ ανέβηκε.
sudo journalctl -u openvpn-server@server -n 40 --no-pager
sudo tcpdump -ni any udp port 1194 -c 20
Αν δεν εμφανιστεί τίποτα στο αρχείο καταγραφής του διακομιστή όσο ο πελάτης ξαναπροσπαθεί, σταματήστε να διαβάζετε τη ρύθμιση του OpenVPN και επιστρέψτε στον στόχο ανακατεύθυνσης. Η καταγραφή απαντά στο ερώτημα της άφιξης σε δευτερόλεπτα, και τα εισερχόμενα πακέτα χωρίς απάντηση περιορίζουν το πρόβλημα στη διαδρομή.
Κρατήστε επαναφορά ενός βήματος και αποσύρετε το προφίλ Wi-Fi
Αφήστε το προφίλ Wi-Fi εγκατεστημένο μέχρι η ενσύρματη διάταξη να περάσει μια επανεκκίνηση. nmcli con show απαριθμεί τα ονόματα προφίλ που θα χρειαστείτε, και ένα διαγραμμένο προφίλ πρέπει να ξαναχτιστεί από μνήμη στην χειρότερη στιγμή. Καταγράψτε το όνομα της διεπαφής, τη μέθοδο διεύθυνσης και τη μετρική δίπλα στις άλλες τέσσερις τιμές. Μια επαναφορά που μπορείτε να πληκτρολογήσετε από μια σημείωση αξίζει περισσότερο από μια που πρέπει να ανακατασκευάσετε.
Η απόσυρση της εξάρτησης από το Wi-Fi είναι αλλαγή ιδιότητας αντί για διαγραφή. Ρυθμίζοντας το connection.autoconnect no διατηρούνται άθικτα τα διαπιστευτήρια και το ιστορικό διευθύνσεων ενώ το Pi εμποδίζεται να επανασυνδεθεί σε δίκτυο από το οποίο φύγατε.
nmcli con show
sudo nmcli con up "Wired connection 1"
sudo nmcli con mod "previously-used-wifi" connection.autoconnect no
Πριν θεωρήσετε τη δουλειά τελειωμένη, επιβεβαιώστε τέσσερα πράγματα: ο στόχος ανακατεύθυνσης ταιριάζει με την ενσύρματη διεύθυνση, ο listener επιβίωσε από επανεκκίνηση, ένας πελάτης απ’ έξω ολοκληρώνει handshake, και το Pi απαντά ακόμη στην ενσύρματη διεύθυνση μετά από επανεκκίνηση. Μια επανεκκίνηση είναι ο φθηνότερος τρόπος να πιάσετε μια εκχώρηση που υπήρχε μόνο στον εκτελούμενο πυρήνα. Αν οποιοδήποτε από τα τέσσερα αποτύχει, ανεβάστε ξανά το προφίλ Wi-Fi με sudo nmcli con up και συγκρίνετε τις καταγεγραμμένες τιμές με τις ενεργές.