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

Βήμα 1: επιλέξτε τη μεταφορά που έχετε πραγματικά

Ξεκινήστε από το πρωτόκολλο, γιατί το υπόλοιπο σχέδιο εξαρτάται από αυτό. Η διεπαφή SOCKS του Tor δεν υλοποιεί το UDP ASSOCIATE, επομένως οτιδήποτε μεταφέρεται μέσω αυτής πρέπει να είναι ροή TCP. Ένα προφίλ OpenVPN που χρησιμοποιεί UDP δεν θα λειτουργήσει μέσω αυτής της διαδρομής, ανεξάρτητα από το πώς είναι γραμμένος ο επόπτης. Αλλάξτε το προφίλ σε TCP και επιβεβαιώστε ότι ο απομακρυσμένος ομότιμος το δέχεται πριν αγγίξετε τη λογική εκκίνησης.

Στη συνέχεια επιβεβαιώστε ότι ο πελάτης σας μπορεί να φτάσει καθόλου σε διακομιστή μεσολάβησης SOCKS. Το OpenVPN 2.6 τεκμηριώνει μια επιλογή socks-proxy για προφίλ TCP, και διαφορετικοί πελάτες προσφέρουν διαφορετική υποστήριξη μεσολάβησης. Ένας εκκινητής που αγνοεί σιωπηλά την επιλογή μεσολάβησης θα συνδεθεί απευθείας και θα φαίνεται ότι λειτουργεί, κάτι που είναι χειρότερο από την αποτυχία.

Γράψτε τη μεταφορά που επιλέξατε στο runbook, γιατί κάθε μεταγενέστερος έλεγχος εξαρτάται από αυτή.

Βήμα 2: διαβάστε τη φάση bootstrap, όχι τη λίστα διεργασιών

Το πρωτόκολλο ελέγχου του Tor απαντά στο GETINFO status/bootstrap-phase με την πιο πρόσφατη κατάσταση bootstrap, συμπεριλαμβανομένου ενός ποσοστού προόδου και μιας ετικέτας σύνοψης. Αυτή η απάντηση είναι χρήσιμη ακριβώς επειδή ένας ελεγκτής μπορεί να συνδεθεί αφού ο δαίμονας έχει ήδη ολοκληρώσει το bootstrap. Ένας επόπτης που ακούει μόνο συμβάντα θα χάσει την περίπτωση όπου το Tor ήταν έτοιμο πριν ξεκινήσει ο επόπτης.

Επαληθεύστε σωστά τη σύνδεση ελέγχου. Η θύρα ελέγχου είναι μια διαχειριστική διεπαφή, και όποιος μπορεί να της μιλήσει μπορεί να αναδιαμορφώσει τον δαίμονα. Κρατήστε την στο localhost, κρατήστε ενεργή την επαλήθευση με cookie ή κωδικό πρόσβασης, και μην αφαιρέσετε καμία από τις δύο για να απλοποιήσετε ένα σενάριο εκκίνησης.

Διαβάστε τη φάση μία φορά κατά την εκκίνηση και μετά εγγραφείτε στα συμβάντα προόδου για την ζωντανή προβολή.

printf 'AUTHENTICATE\r\nGETINFO status/bootstrap-phase\r\nQUIT\r\n' | nc 127.0.0.1 9051
ss -ltn | grep -E '9050|9051'
tor --verify-config -f /etc/tor/torrc

Μια απάντηση με πρόοδο 100 και την ετικέτα done σημαίνει ότι ο δαίμονας ολοκλήρωσε τη δική του εκκίνηση. Δεν σημαίνει ακόμη ότι υπάρχει ένα χρησιμοποιήσιμο κύκλωμα προς τον προορισμό σας.

Βήμα 3: περιμένετε ένα συμβάν κυκλώματος πελάτη

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

Αντιμετωπίστε το συμβάν ως άδεια για δοκιμή, όχι ως εγγύηση για οποιονδήποτε συγκεκριμένο προορισμό. Μια πολιτική εξόδου μπορεί ακόμη να απορρίψει τον απομακρυσμένο ομότιμο, και η χειραψία του ίδιου του VPN μπορεί ακόμη να αποτύχει για λόγους που δεν έχουν καμία σχέση με το Tor.

Κρατήστε τις δύο συνθήκες χωριστά στον κώδικα. Μια μόνο λογική τιμή με όνομα ready θα τις συνενώσει και θα κάνει το επόμενο περιστατικό δυσανάγνωστο.

Βήμα 4: βάλτε το VPN πίσω από πύλη με βάση τη δική του χειραψία

Το VPN έχει τη δική του συνθήκη ετοιμότητας, και είναι η μόνη που αποδεικνύει ότι η σήραγγα ανέβηκε. Περιμένετε ο πελάτης να αναφέρει συνδεδεμένη κατάσταση με εκχωρημένη διεύθυνση, και μετά ελέγξτε ότι η απαίτηση μεσολάβησης παρέμεινε σε ισχύ. Ένας βρόχος επανάληψης που εγκαταλείπει την επιλογή socks-proxy μετά από μία αποτυχία θα συνδεθεί απευθείας και θα υπονομεύσει σιωπηλά όλο το σχέδιο.

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

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

Ελέγξτε τις τέσσερις μεταβάσεις που πρέπει να επιβιώσετε

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

Εκτελέστε τις σκόπιμα, μία κάθε φορά, και διαβάστε τις αλλαγές κατάστασης και όχι τη λίστα διεργασιών.

journalctl -u tor@default -n 30 --no-pager
systemctl status [email protected]
curl -sS --socks5-hostname 127.0.0.1:9050 https://check.torproject.org/api/ip

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

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