Το Redsocks ακούει στο loopback αλλά η κίνηση VPN δεν φτάνει ποτέ
Ένας ακροατής μόνο στο loopback δεν βλέπει ποτέ κίνηση που ανακατευθύνεται από το tun0. Διαβάστε τον στόχο ανακατεύθυνσης και τη δέσμευση του socket, διορθώστε τη δέσμευση και έπειτα δοκιμάστε από πραγματικό πελάτη.
Μια σήραγγα σηκώνεται, ο πελάτης μπορεί να κάνει ping στην πύλη και κάθε αίτημα web μέσω της διαδρομής του διακομιστή μεσολάβησης πεθαίνει. Η διεργασία redsocks τρέχει και η θύρα της ακούει, οπότε η υπηρεσία φαίνεται υγιής από την ίδια την πύλη. Αυτό που αποτυγχάνει είναι το βήμα παράδοσης: ένα πακέτο που ανακατευθύνεται από τη σήραγγα δεν προσγειώνεται στο socket που ξεκινήσατε. Η διεύθυνση δέσμευσης και ο στόχος ανακατεύθυνσης πρέπει να συμφωνούν, και συνήθως ελέγχεται μόνο ένα από τα δύο.
Πού προσγειώνεται πραγματικά ένα ανακατευθυνόμενο πακέτο
Η διαφανής μεσολάβηση σε μια πύλη χρησιμοποιεί REDIRECT στον πίνακα nat στο PREROUTING για να ξαναγράψει τον προορισμό μιας εισερχόμενης σύνδεσης σε τοπική θύρα. Ο ξαναγραμμένος προορισμός είναι μια τοπική διεύθυνση όπως τη βλέπει η διεπαφή από την οποία έφτασε το πακέτο, όχι η διεύθυνση loopback μιας διεργασίας που ξεκίνησε αλλού. Ένας ακροατής δεσμευμένος μόνο στο 127.0.0.1 δέχεται συνδέσεις που ήταν ήδη τοπικές στον κεντρικό υπολογιστή, και αυτή είναι ακριβώς η περίπτωση που συνεχίζει να λειτουργεί ενώ η κίνηση της σήραγγας αποτυγχάνει. Το δικό του loopback του πελάτη είναι μια τρίτη διεύθυνση και δεν είναι ποτέ ο στόχος του κανόνα της πύλης.
Έτσι, πριν αγγίξετε τα διαπιστευτήρια του ανάντη, βεβαιώστε δύο γεγονότα: σε ποια τοπική διεύθυνση ξαναγράφει ο κανόνας και σε ποια διεύθυνση είναι δεσμευμένο το socket του διακομιστή μεσολάβησης.
Διαβάστε τον ακροατή και τον κανόνα ανακατεύθυνσης μαζί
Εκτυπώστε τον πίνακα socket και τους κανόνες nat στο ίδιο πέρασμα, γιατί ένας κανόνας που δείχνει σε θύρα που δεν κατέχει κανείς μοιάζει ίδιος με έναν κανόνα που δείχνει στη λάθος διεύθυνση. sudo ss -ltnp | grep redsocks δείχνει τη διεύθυνση δέσμευσης και τη διεργασία που την κατέχει. sudo iptables -t nat -S PREROUTING δείχνει τον στόχο REDIRECT, και sudo iptables -t nat -L PREROUTING -v -n δείχνει αν κάτι ταίριαξε με αυτόν.
Ένα άλμα σε αλυσίδα χρήστη με όνομα REDSOCKS δεν καταφέρνει τίποτα αν αυτή η αλυσίδα δεν υπάρχει και δεν φέρει τις προβλεπόμενες εξαιρέσεις και την ενέργεια REDIRECT. Διαβάστε την αλυσίδα στην οποία κάνει άλμα με sudo iptables -t nat -S REDSOCKS αντί να υποθέτετε ότι το όνομα κάνει τη δουλειά.
Έπειτα συγκρίνετε τις δύο τιμές. Αν ο κανόνας ανακατευθύνει σε διεύθυνση πύλης στη θύρα 12345 και ο ακροατής αναφέρει 127.0.0.1:12345, η ασυμφωνία εξηγεί την αποτυχία χωρίς καμία περαιτέρω διάγνωση.
Δεσμεύστε στενά και έπειτα περιορίστε τι μπορεί να φτάσει
Η δειγματική ρύθμιση του ανάντη βάζει τον ακροατή στο loopback για καλό λόγο: ένας διαφανής διακομιστής μεσολάβησης δέχεται συνδέσεις για λογαριασμό όποιου μπορεί να τον φτάσει. Η αλλαγή της δέσμευσης σε 0.0.0.0 διορθώνει την παράδοση και ταυτόχρονα ανοίγει τη θύρα σε κάθε διεπαφή, που είναι αλλαγή ασφαλείας, όχι ουδέτερη επισκευή. Προτιμήστε δέσμευση στη συγκεκριμένη τοπική διεύθυνση που στοχεύει η ανακατεύθυνση και κρατήστε τη θύρα κλειστή σε μη αξιόπιστες διεπαφές. Αν μια ευρύτερη δέσμευση είναι αναπόφευκτη, προσθέστε κανόνα τείχους προστασίας στον κεντρικό υπολογιστή που επιτρέπει μόνο το εύρος πηγής της σήραγγας και την τοπική κίνηση της ίδιας της πύλης.
Το άνοιγμα της θύρας στη δημόσια διεπαφή δεν απαιτείται ποτέ για ανακατευθυνόμενη κίνηση VPN, επειδή η σύνδεση τερματίζεται τοπικά μετά την ξαναγραφή. Μην εκθέτετε τον διακομιστή μεσολάβησης στο διαδίκτυο για να δουλέψει μια τοπική ανακατεύθυνση.
Αποδείξτε το με νέα σύνδεση από πελάτη
Δοκιμάστε από πραγματικό πελάτη VPN με φρέσκια σύνδεση TCP, όχι από κέλυφος στην πύλη. Το curl -sS -o /dev/null -w '%{http_code}\n' http://example.com στον πελάτη ασκεί την ανακατευθυνόμενη διαδρομή από άκρη σε άκρη.
Έπειτα επιβεβαιώστε ότι μια άμεση σύνδεση στον ακροατή από μη αξιόπιστο δίκτυο εξακολουθεί να απορρίπτεται και ότι η δική του ανάντη σύνδεση του διακομιστή μεσολάβησης δεν συλλαμβάνεται ξανά από τον ίδιο κανόνα. Η αναδρομική σύλληψη εμφανίζεται ως διακομιστής μεσολάβησης που συνδέεται με τον εαυτό του και δεν ολοκληρώνει ποτέ ένα αίτημα. Προσθέστε τον προορισμό του διακομιστή μεσολάβησης στο σύνολο εξαιρέσεων ή σημειώστε τα εξερχόμενα πακέτα του ώστε η αλυσίδα να τα παρακάμπτει.
Τέλος, θυμηθείτε τι δεν καλύπτει αυτή η διαδρομή. Η συνήθης ανακατεύθυνση TCP του redsocks δεν μετατρέπει UDP, QUIC ή DNS σε κίνηση SOCKS, και οι ιδιωτικοί προορισμοί συνήθως χρειάζονται ρητές εξαιρέσεις. Μια επιτυχημένη τοπική δοκιμή αποδεικνύει μόνο τη διαδρομή loopback που ποτέ δεν ήταν το πρόβλημα.