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

Το σύμπτωμα: ο προορισμός βλέπει τη διεύθυνση του LAN

Ένας πελάτης συνδέεται στο proxy στη διεύθυνση LAN, και το proxy ανοίγει τη δική του σύνδεση προς τον προορισμό. Αυτή η δεύτερη σύνδεση επιλέγει διεύθυνση πηγής με τους κανόνες του πυρήνα, και εξ ορισμού είναι ό,τι επιλέγει η αναζήτηση διαδρομής. Ο προορισμός καταγράφει επομένως την κύρια διεύθυνση του host, παρόλο που κάθε byte πέρασε από το proxy. Από πλευράς προώθησης τίποτα δεν είναι σπασμένο, και γι’ αυτό το αρχείο καταγραφής του proxy δεν έχει τίποτα να πει.

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

Τρεις οδηγίες, τρεις διαφορετικές διευθύνσεις

Το Listen ονομάζει την τοπική διεύθυνση που δέχεται τους πελάτες του proxy. Το Bind παρέχει διεύθυνση πηγής για τις συνδέσεις που κάνει το proxy προς τα έξω, και το BindSame του λέει να ξαναχρησιμοποιήσει την τοπική διεύθυνση της σύνδεσης που μόλις δέχτηκε. Αυτά είναι τρία ξεχωριστά ερωτήματα, και μία γραμμή απαντά μόνο σε ένα. Η σύγχυση μεταξύ τους είναι ο συνηθισμένος λόγος που μια αλλαγή μοιάζει να μην κάνει τίποτα.

What you observeCheck first
A client cannot connect at allListen: the local address the listener binds
The request works but the far side logs the LAN addressBind: the outgoing source is not being applied
A configured Bind appears to have no effectBindSame yes: the accepted local address overrides the Bind list
The lookup names the LAN interfaceThe route, not the proxy: the source cannot reach that destination

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

Ρυθμίστε τον ακροατή και την εξερχόμενη πηγή ανεξάρτητα

Πάρτε έναν host με διεύθυνση LAN 192.168.50.10 και διεύθυνση σήραγγας 10.90.0.3. Αν οι πελάτες του LAN πρέπει να φτάνουν στο proxy ενώ τα αιτήματά τους βγαίνουν από τη σήραγγα, αυτές είναι δύο ανεξάρτητες αποφάσεις και πρέπει να γραφτούν και οι δύο. Το παρακάτω απόσπασμα εκφράζει ακριβώς αυτό και τίποτα άλλο.

Listen 192.168.50.10
Bind 10.90.0.3
BindSame no

Δεν είναι πλήρης διαμόρφωση, οπότε κρατήστε την εγκεκριμένη θύρα, την αυθεντικοποίηση, τους ελέγχους πρόσβασης πελατών και τους περιορισμούς προορισμών. Και οι δύο διευθύνσεις πρέπει να ανήκουν σε αυτόν τον host μέσα στον χώρο ονομάτων δικτύου του Tinyproxy, γιατί μια τιμή Bind που η διεργασία δεν μπορεί να κατέχει αποτυγχάνει κατά τη σύνδεση, όχι κατά την εκκίνηση. Το BindSame yes περιγράφει άλλη πολιτική, όπου η τοπική διεύθυνση της αποδεκτής σύνδεσης γίνεται η εξερχόμενη πηγή. Στις τρέχουσες εκδόσεις αυτός ο κλάδος υπερισχύει της λίστας Bind, και έτσι μια διαμορφωμένη πηγή εξαφανίζεται χωρίς σφάλμα.

Ελέγξτε τη διαδρομή που υπονοεί η πηγή

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

ip -4 route get 203.0.113.25 from 10.90.0.3

Χρησιμοποιήστε στο παράδειγμα μια διεύθυνση τεκμηρίωσης και αντικαταστήστε την υπηρεσία που έχετε εξουσιοδότηση να δοκιμάσετε. Εκτελέστε την αναζήτηση μέσα στον χώρο ονομάτων του proxy όταν το proxy τρέχει σε container, γιατί οι κανόνες του host δεν είναι οι κανόνες που βλέπει η διεργασία. Όταν λείπει η προβλεπόμενη διαδρομή της σήραγγας, αφήστε τον ιδιοκτήτη του δικτύου να τη διορθώσει αντί να προσθέτετε κανόνες ειδικού προορισμού στον host του proxy. Μην εκκαθαρίζετε διαδρομές του host και μην απενεργοποιείτε διαδρομές που σπρώχνει ο διακομιστής για να πετύχει μια αναζήτηση, ακόμη και αν παλιότερος οδηγός το έκανε, γιατί τέτοιες αλλαγές μετακινούν όλη την εγκεκριμένη συμπεριφορά VPN του host για να επιδιορθώσουν ένα μονοπάτι του proxy.

Επιβεβαιώστε την πηγή στον προορισμό

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

ss -ltnp | grep tinyproxy
curl -x http://192.168.50.10:8888 https://example.com -o /dev/null -sS

Το curl είναι μόνο γεννήτρια κίνησης· η διεύθυνση που αξίζει επαλήθευση είναι αυτή που κατέγραψε η απομακρυσμένη πλευρά, όχι ο ομότιμος με τον οποίο τυχαία συνδέθηκε το curl. Αν τα δύο διαφωνούν, αποφασίστε αν η διαφορά προέρχεται από την επιλογή πηγής ή από μετατροπή πιο πέρα, γιατί αυτά διορθώνονται σε διαφορετικά σημεία. Σχεδιάστε τις αλλαγές διευθύνσεων και τις επανεκκινήσεις του proxy μαζί, γιατί η δέσμευση διεύθυνσης που η σήραγγα δεν κρατά πια αποτυγχάνει σιωπηλά μετά από επανασύνδεση. Ορίστε και τη συμπεριφορά DNS και IPv6 χωριστά, γιατί το απόσπασμα IPv4 παραπάνω δεν αποδεικνύει τίποτα για κανένα από τα δύο.

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