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

Γιατί μια σήραγγα που δουλεύει δεν έχει ακόμη διέξοδο

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

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

Δοκιμάστε λοιπόν τα τρία επίπεδα και όχι τον πελάτη, και αλλάξτε ένα τη φορά ώστε το αποτέλεσμα να σημαίνει κάτι.

Η προώθηση είναι διακόπτης του πυρήνα που πρέπει να διατηρήσετε

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

sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1
sysctl net.ipv4.ip_forward

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

Κάντε την μόνιμη σε ένα αρχείο κάτω από το /etc/sysctl.d/, και μετά εφαρμόστε αυτό το αρχείο αντί να επανεκκινήσετε για να μάθετε. Στο FreeBSD το αντίστοιχο είναι το net.inet.ip.forwarding, με gateway_enable=YES στο rc.conf για μονιμότητα. Μια συσκευή που αναφέρει την προώθηση απενεργοποιημένη εξηγεί μια ολόκληρη κατηγορία αναφορών «φτάνουν πακέτα και δεν γυρίζει τίποτα». Ελέγχετε τη ρύθμιση και μετά από κάθε αναβάθμιση, γιατί ένας ξαναχτισμένος πυρήνας ή ένα αντικατεστημένο είδωλο συσκευής μπορεί να την επαναφέρει χωρίς να πει σε κανέναν.

Επιλέξτε masquerade ή μία σταθερή διεύθυνση μετάφρασης

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

iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADE

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

iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -j SNAT --to-source 198.51.100.10

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

Ο πίνακας φίλτρων είναι η τρίτη πύλη

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

iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

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

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

Πού να κοιτάξετε όταν μια σελίδα δεν φορτώνει ποτέ

Κάντε ping στη διεύθυνση σήραγγας του διακομιστή για να αποδείξετε ότι η σήραγγα υπάρχει. Μετά εκτελέστε traceroute από τον πελάτη σε μια δημόσια διεύθυνση και διαβάστε πού σταματά: στον διακομιστή το πακέτο φτάνει αλλά δεν προωθείται ούτε μεταφράζεται· πέρα από τον διακομιστή το πρόβλημα είναι ανάντη και έξω από τα χέρια σας.

ping -c 3 10.9.0.1
traceroute -n 198.51.100.10

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

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

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

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