Ένα Raspberry Pi που χρειάζεται να προστατεύει μόνο τη δική του εξερχόμενη κίνηση έχει δύο ρεαλιστικά σχέδια: να αφήσετε τον διαχειριστή δικτύου να κατέχει το τούνελ, ή να κρατήσετε ένα σκριπτ που το κατέχει. Και τα δύο μπορούν να μεταφέρουν κίνηση. Αποτυγχάνουν σε διαφορετικά σημεία, και η αποτυχία που μπορείτε να διαγνώσετε απομακρυσμένα στις δύο τα ξημερώματα είναι αυτή που αξίζει να επιλέξετε. Συγκρίνετέ τα ως προς την ιδιοκτησία, ως προς το τι σημαίνει πλήρες τούνελ όταν μπλέκονται IPv6 και DNS, και ως προς το τι συμβαίνει τη στιγμή που πέφτει το τούνελ.

Δύο ιδιοκτήτες για ένα τούνελ

Το σχέδιο A είναι ένα προφίλ μέσα στον διαχειριστή δικτύου του συστήματος: ένα εισηγμένο προφίλ OpenVPN ή μια εγγενής σύνδεση WireGuard, που ενεργοποιείται στην εκκίνηση από την ίδια υπηρεσία που ανεβάζει το Ethernet και το Wi-Fi. Το σχέδιο B είναι μια δική σας μονάδα που τρέχει τον πελάτη απευθείας, αλλάζει τη διαμόρφωση του resolver και εγκαθιστά τις δικές της διαδρομές και κανόνες τείχους προστασίας. Και τα δύο είναι νόμιμα σχέδια· διαφέρουν ως προς το ποιος επιτρέπεται να αλλάξει τον πίνακα δρομολόγησης.

Οι αποτυχίες διαφέρουν γιατί διαφέρουν οι ιδιοκτήτες. Με το A, ένα προφίλ που δεν ενεργοποιείται αφήνει τη διεπαφή πάνω και το τούνελ κάτω, και τα αρχεία καταγραφής του διαχειριστή λένε γιατί. Με το B, ένα σκριπτ που πετυχαίνει μισά αφήνει πίσω διαδρομές που επιβιώνουν της διεργασίας που τις δημιούργησε. Το να τρέχετε και τα δύο είναι το χειρότερο αποτέλεσμα: δύο διεργασίες γράφουν την προεπιλεγμένη διαδρομή, δύο αλλαγές του resolver συναγωνίζονται στην εκκίνηση, και δύο σύνολα μυστικών προς περιστροφή.

Διαλέξτε έναν ιδιοκτήτη ανά τούνελ και απενεργοποιήστε τον άλλον πριν δοκιμάσετε οτιδήποτε. Δύο ιδιοκτήτες σημαίνουν επίσης δύο σημεία για να κοιτάξετε όταν το τούνελ είναι πάνω και τίποτα δεν επιλύεται. Αυτός ο ένας κανόνας αποτρέπει τις περισσότερες από τις μπερδεμένες καταστάσεις που περιγράφονται σε συζητήσεις για το Pi VPN.

Τι δημιουργεί μια εισαγωγή και τι όχι

Στο Raspberry Pi OS Bookworm και μετά, το προεπιλεγμένο εργαλείο διαμόρφωσης δικτύου είναι το NetworkManager, οπότε ένα προφίλ είναι το φυσικό σπίτι για ένα τούνελ πελάτη. Η εισαγωγή απαιτεί εγκατεστημένο το αντίστοιχο πρόσθετο· χωρίς αυτό αποτυγχάνει με μήνυμα για μη υποστηριζόμενο τύπο σύνδεσης, που είναι το ειλικρινές σήμα να σταματήσετε και να εγκαταστήσετε το πρόσθετο.

nmcli connection import type openvpn file ./provider.ovpn
nmcli connection show
nmcli --ask connection up id provider-name

Η εισαγωγή αποθηκεύει ένα προφίλ. Δεν αποδεικνύει ότι η άλλη πλευρά είναι προσβάσιμη, και δεν εγγυάται ότι κάθε οδηγία στο αρχείο επιβίωσε της μετατροπής. Διαβάστε πίσω τη σύνδεση που προέκυψε και ελέγξτε τα μέρη που φέρουν ταυτότητα και εμπιστοσύνη: το πιστοποιητικό, τον απομακρυσμένο κεντρικό υπολογιστή και τη θύρα, και αν ζητείται ή αποθηκεύεται κωδικός πρόσβασης.

Η ενεργοποίηση με --ask κρατά μια φράση πρόσβασης έξω από το ιστορικό του κελύφους σε έναν κοινόχρηστο υπολογιστή. Για ένα Pi χωρίς επίβλεψη θα θέλετε τελικά το προφίλ να ανεβαίνει στην εκκίνηση, που είναι ξεχωριστή απόφαση από το ανέβασμά του μία φορά με το χέρι.

Πλήρες τούνελ, σε σύγκριση και στα δύο σχέδια

Το πλήρες τούνελ είναι ισχυρισμός για διαδρομές, όχι για πρόθεση, και τα δύο σχέδια το εκφράζουν διαφορετικά. Η προσέγγιση με προφίλ ζητά από τον διαχειριστή να εγκαταστήσει μια προεπιλεγμένη διαδρομή και τις ρυθμίσεις του resolver· η προσέγγιση με σκριπτ κάνει ό,τι πει το σκριπτ, συμπεριλαμβανομένου του τίποτα. Κανένα σχέδιο δεν καλύπτει το IPv6 αν δεν του πούμε, και μια άθικτη προεπιλεγμένη διαδρομή IPv6 θα μεταφέρει ευχαρίστως κίνηση έξω από το τούνελ όσο το IPv4 φαίνεται τέλειο.

ip -4 route get 198.51.100.23
ip -6 route show default
resolvectl query example.org

Χρησιμοποιήστε μια διεύθυνση τεκμηρίωσης για την αναζήτηση διαδρομής και αντικαταστήστε την με έναν κεντρικό υπολογιστή που επιτρέπεται να ελέγξετε. Η πρώτη εντολή δείχνει ποια διεπαφή θα χρησιμοποιούσε το Pi για έναν συνηθισμένο προορισμό· η δεύτερη δείχνει αν υπάρχει ακόμη προεπιλεγμένη διαδρομή IPv6· η τρίτη αποδεικνύει ποιος resolver απάντησε. Διαβάστε και τις τρεις πριν πιστέψετε οποιονδήποτε ισχυρισμό για πλήρες τούνελ.

Αν οι οδηγίες του παρόχου υπόσχονται πλήρες τούνελ αλλά η προεπιλεγμένη διαδρομή IPv6 επιβιώνει, το Pi διαρρέει. Απενεργοποιήστε το IPv6 στο uplink ή ζητήστε από το προφίλ να το διεκδικήσει, και αποφασίστε συνειδητά αντί να το ανακαλύψετε αργότερα.

Ανοιχτή αποτυχία έναντι κλειστής

Όταν πέφτει το τούνελ, ένας πίνακας δρομολόγησης που χάνει την προεπιλεγμένη του διαδρομή απλώς επιστρέφει στο φυσικό uplink, και η κίνηση συνεχίζεται ανοιχτά. Αυτό είναι ανοιχτή αποτυχία, και είναι η προεπιλεγμένη συμπεριφορά και των δύο σχεδίων εκτός αν κάτι την εμποδίσει. Οι περισσότεροι το ανακαλύπτουν εβδομάδες αργότερα διαβάζοντας ένα αρχείο καταγραφής του τείχους προστασίας.

Η κλειστή αποτυχία σας κοστίζει την απομακρυσμένη πρόσβαση όταν το τούνελ είναι κάτω, οπότε χρειάζεται μια συνειδητή εξαίρεση για τη διαδρομή διαχείρισης. Ένας τρόπος είναι ένας κανόνας που επιτρέπει μόνο τη διεύθυνση του ομότιμου VPN έξω από το τούνελ:

sudo nft add table inet vpnkill
sudo nft 'add chain inet vpnkill out { type filter hook output priority 0; policy accept; }'
sudo nft add rule inet vpnkill out oifname != "tun0" ip daddr != 203.0.113.24 reject

Συγκρίνετε το λειτουργικό κόστος με ειλικρίνεια. Ένα προφίλ συνήθως δεν μπορεί να εκφράσει αυτόν τον κανόνα, οπότε η κλειστή αποτυχία σας σπρώχνει προς το σχέδιο με σκριπτ ή προς μια μικρή μονάδα που εγκαθιστά τον κανόνα ανεξάρτητα από το τούνελ. Σε κάθε περίπτωση, καταγράφετε τις απορρίψεις για μια εβδομάδα: μια σιωπηλή απόρριψη μοιάζει ίδια με μια χαλασμένη υπηρεσία, και θα θέλετε τον μετρητή όταν ένας χρήστης αναφέρει ότι ένας ιστότοπος σταμάτησε να φορτώνει.

Επιλογή για ένα Pi χωρίς οθόνη

Αν η εικόνα τρέχει ήδη NetworkManager, το τούνελ δεν χρειάζεται τίποτα εξωτικό, και θέλετε να ακολουθεί αυτόματα το uplink, πάρτε το προφίλ. Αν χρειάζεστε δρομολόγηση πολιτικής, πολλά τούνελ επιλεγμένα ανά προορισμό, ή έναν κανόνα κλειστής αποτυχίας που πρέπει να υπάρχει πριν ανέβει το τούνελ, πάρτε το σκριπτ και κατέχετε κάθε μέρος του, συμπεριλαμβανομένης της σειράς εκκίνησης και του καθαρισμού. Το να αναμειγνύετε τα δύο σχέδια κοστίζει περισσότερο από οποιοδήποτε από αυτά μόνο του.

Η μετάβαση μεταξύ τους είναι κυρίως θέμα σειράς: απενεργοποιήστε τον παλιό ιδιοκτήτη, επιβεβαιώστε ότι δεν επιβίωσε καμία παλιά διαδρομή ή καταχώριση resolver, στη συνέχεια ενεργοποιήστε τον νέο και επανεκκινήστε δύο φορές. Μία μόνο επανεκκίνηση μπορεί να κρύψει έναν ανταγωνισμό που η δεύτερη αποκαλύπτει. Τελειώστε δοκιμάζοντας το Pi και όχι το τούνελ: επιλύστε ένα όνομα, κατεβάστε κάτι μέσω IPv4, κατεβάστε μέσω IPv6 αν το κρατήσατε, μετά ρίξτε το τούνελ και επιβεβαιώστε ότι η συμπεριφορά που διαλέξατε συμβαίνει πραγματικά. Μια διεπαφή στο ip link είναι η αρχή της δοκιμής, όχι το τέλος.

Σχετικά άρθρα