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

Η απάντηση DNS και η διαδρομή είναι διαφορετικά αντικείμενα

Ας πούμε ότι το Pi σας απαντά στο vpn-gw.lan και προωθεί το 10.44.0.0/16 σε ένα τούνελ. Οι πελάτες στο 192.168.30.0/24 το φτάνουν μέσω μιας στατικής διαδρομής. Όταν η διεύθυνση του Pi μετακινήθηκε από το 192.168.30.4 στο 192.168.30.11, η εγγραφή ακολούθησε μέσα στο TTL της και οι διαδρομές όχι.

Οι δύο όψεις διαφωνούν με τρόπο που εύκολα περνά απαρατήρητος, γιατί και οι δύο φαίνονται εύλογες όταν τις ρωτάτε ξεχωριστά:

$ ip route get 10.44.0.1
10.44.0.1 via 192.168.30.4 dev eth0 src 192.168.30.20
$ dig +short vpn-gw.lan
192.168.30.11

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

Τι επιβιώνει στον πίνακα αφού τερματιστεί η εντολή

Μια διαδρομή Linux καταγράφει δύο πράγματα που έχουν σημασία εδώ: το επόμενο άλμα ως διεύθυνση πρωτοκόλλου και τη διεπαφή εξόδου ως αριθμό δείκτη. Τα χαρακτηριστικά διαδρομής rtnetlink ονομάζουν αυτό το πρώτο πεδίο RTA_GATEWAY, και κρατά bytes. Μόλις η καταχώριση τοποθετηθεί, δεν συνδέεται κανένα TTL πάνω της και καμία αναζήτηση στο παρασκήνιο δεν την ανανεώνει.

Γι' αυτό το ip route add 10.44.0.0/16 via vpn-gw.lan μπορεί να φαίνεται ότι δουλεύει. Το εργαλείο επιλύει το όνομα όσο τρέχει η εντολή, γράφει τη διεύθυνση που προκύπτει και ξεχνά εντελώς το όνομα. Τρέξτε το ip route show 10.44.0.0/16 μετά και θα πάρετε πίσω μια κατά γράμμα διεύθυνση.

Αξίζει να ξέρετε αυτή τη συμπεριφορά πριν κατηγορήσετε το τούνελ.

Εργαλεία που επιλύουν ένα όνομα για εσάς, και πότε

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

Οι διαχειριζόμενες εγκαταστάσεις τείνουν να μοιράζουν τη δουλειά. Μια δέσμευση DHCP ή μια στατική μίσθωση κρατά το Pi σε μία διεύθυνση, και η εγγραφή DNS απλώς ακολουθεί τη μίσθωση. Τίποτα δεν χρειάζεται να παρακολουθεί κινούμενο στόχο, γιατί ο στόχος δεν κινείται.

Ένας εποπτευόμενος ενημερωτής είναι το άλλο νόμιμο μοτίβο, και χρειάζεται ιδιοκτήτη.

Καρφιτσώστε τη διεύθυνση ή τρέξτε τον ενημερωτή μόνοι σας

Για ένα μικρό LAN, μια δέσμευση στον διακομιστή DHCP είναι η φθηνότερη λύση. Διαλέξτε μια διεύθυνση έξω από τη δυναμική δεξαμενή, δεσμεύστε την στη διεύθυνση MAC του Pi και επιβεβαιώστε την με ip -4 addr show dev eth0 μετά την επόμενη ανανέωση μίσθωσης. Έπειτα στρέψτε το επόμενο άλμα των πελατών σε αυτή τη διεύθυνση μία φορά. Τώρα έχετε μια σταθερή πύλη και μια εγγραφή που την περιγράφει, και αυτή είναι η σειρά με την οποία η σχέση λειτουργεί πραγματικά.

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

new=$(dig +short vpn-gw.lan | head -n1)
cur=$(ip route get 10.44.0.1 | awk '{print $3}')
if [ "$new" != "$cur" ]; then
  ip route replace 10.44.0.0/16 via "$new"
fi
ip route get 10.44.0.1

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

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

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