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

Ελέγξτε τις τρεις συνθήκες πριν γράψετε κανόνα

Ένα container που δημοσιεύει θύρα μέσω DNAT, ή ένας διακομιστής πίσω από προώθηση θύρας, παράγει πακέτα που δεν προέρχονται από αυτόν τον host. Αυτά τα πακέτα προωθούνται, οπότε ένας κανόνας που βασίζεται σε τοπική είσοδο του host δεν τα βλέπει ποτέ και η κίνηση συνεχίζει να ακολουθεί την προεπιλεγμένη διαδρομή. Επιβεβαιώστε πού εκτελείται πραγματικά η υπηρεσία πριν συνεχίσετε, γιατί αυτή είναι η συνθήκη που οι άνθρωποι κάνουν λάθος συχνότερα από κάθε άλλη.

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

Αντιστοιχίστε την απάντηση, όχι τη θύρα προορισμού του πελάτη

Η απάντηση από έναν διακομιστή που ακούει στο TCP 443 φεύγει από τον host με θύρα προέλευσης 443. Ένα πρόγραμμα περιήγησης στον ίδιο host που συνδέεται σε απομακρυσμένη τοποθεσία HTTPS στέλνει μια εφήμερη θύρα προέλευσης και θύρα προορισμού 443. Και τα δύο είναι κίνηση της θύρας 443 και μόνο ένα από αυτά πρέπει να χρησιμοποιεί τον πίνακα WAN, γι' αυτό μια αντιστοίχιση θύρας προορισμού θα έπιανε το λάθος μισό.

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

Χτίστε έναν πλήρη πίνακα επιστροφής πριν ο κανόνας δείξει σε αυτόν

Ένας κενός πίνακας σημαίνει καμία διαδρομή, που μοιάζει με χαλασμένη υπηρεσία και όχι με χαλασμένη πολιτική. Γεμίστε τον πρώτα, με αριθμό πίνακα και προτεραιότητα που τίποτε άλλο στον host δεν διεκδικεί:

ip -4 route add table 100 192.0.2.0/24 dev eth0
ip -4 route add table 100 default via 192.0.2.1 dev eth0
ip -4 rule add priority 1000 iif lo ipproto tcp sport 443 lookup 100

Διαβάστε τους αριθμούς από τον ζωντανό host αντί να τους αντιγράψετε. Το ip -4 rule show σας λέει ποιες προτεραιότητες είναι πιασμένες, και το να προσθέσετε κανόνα σε προτεραιότητα που υπάρχει ήδη αλλάζει σιωπηλά τη σειρά δύο κανόνων που καθένας μόνος του φαίνεται εντάξει.

Δύο επιλογείς κάνουν την πραγματική δουλειά εδώ. Το iif lo είναι ο τρόπος με τον οποίο ο πυρήνας αναφέρει πακέτα που δημιούργησε ο ίδιος ο host, ώστε ο κανόνας να μην μπορεί κατά λάθος να πιάσει προωθημένη κίνηση που έρχεται απ' έξω. Το ipproto tcp sport 443 το περιορίζει σε ένα μεταφορικό πρωτόκολλο και μία θύρα, που είναι τόσο στενό όσο επιτρέπει η απαίτηση. Αφαιρέστε τον επιλογέα πρωτοκόλλου και ο κανόνας θα πιάσει και UDP 443, που είναι άλλη υπηρεσία με άλλη συμπεριφορά.

Κρατήστε τις ιδιωτικές απαντήσεις μέσα στο τούνελ

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

ip -4 route add table 100 throw 10.90.0.0/24

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

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

Δοκιμάστε TCP, μετά QUIC, μετά επανεκκίνηση

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

Το HTTP/3 σερβίρεται πάνω από UDP και δεν θα αντιστοιχιστεί από κανόνα TCP, οπότε ένας ακροατής QUIC χρειάζεται δικό του επιλογέα, αλλιώς θα συνεχίσει να χρησιμοποιεί το τούνελ ενώ το HTTPS δουλεύει. Αποθηκεύστε όποιους κανόνες καταλήξετε στο στοιχείο που κατέχει τη διεπαφή, και επιβεβαιώστε τους μετά από επανασύνδεση ή ανανέωση DHCP. Όταν ένας ανταγωνιστικός διαχειριστής αφαιρέσει μια διαδρομή χρόνου εκτέλεσης μετά από επανεκκίνηση, αυτό είναι πρόβλημα ιδιοκτησίας που λύνεται στην πηγή, όχι λόγος να προσθέσετε ευρύτερους κανόνες NAT από πάνω.

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