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

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

Τι αποφασίζει πραγματικά μια δέσμευση

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

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

Η αναφορά για τα sockets IP του Linux τεκμηριώνει τη σημασιολογία της δέσμευσης. Το μισό της δρομολόγησης ζει στα ip-rule και ip-route, και είναι ξεχωριστά εγχειρίδια για κάποιο λόγο.

Επιβεβαιώστε ότι η διεύθυνση ανήκει σε αυτόν τον χώρο ονομάτων

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

ip -br addr show
ip netns identify <pid>
ss -tanp | grep <port>

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

Διαβάστε την αναζήτηση για αυτή την πηγή και τον προορισμό

Μία εντολή απαντά στην ερώτηση που δεν απάντησε η δέσμευση:

ip route get 203.0.113.10 from 10.8.0.2
ip rule show

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

Έπειτα το ip rule show σας λέει αν κάποιος κανόνας θα είχε επιλέξει άλλον πίνακα. Οι προτεραιότητες μετράνε εδώ, γιατί κερδίζει ο πρώτος κανόνας που ταιριάζει και ένας κανόνας που πιάνει τα πάντα πάνω από τον δικό σας κάνει τον κανόνα σας αόρατο.

Εγκαταστήστε κανόνα πολιτικής μόνο αν αυτό είναι το σχέδιο

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

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

ip route add default dev tun0 table 100
ip rule add from 10.8.0.2 table 100 priority 100
ip route get 203.0.113.10 from 10.8.0.2

Αναιρέστε με ip rule del και ip route flush table 100. Ό,τι προστίθεται έτσι εξαφανίζεται με την επανεκκίνηση, εκτός αν το γράψει κάποιος διαχειριστής, κάτι που είναι ταυτόχρονα ιδιότητα ασφάλειας και λόγος να μην κρατάτε το μοναδικό αντίγραφο στο ιστορικό του shell σας.

Επαληθεύστε με τρεις παρατηρήσεις

Καταγράψτε την πηγή που ζήτησε η εφαρμογή, τη διαδρομή που επέλεξε η αναζήτηση και την πηγή που είδε πραγματικά ο διακομιστής.

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

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

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