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

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

Διαλέξτε τον ιδιοκτήτη της διεύθυνσης πριν από τις θύρες

Ένα άκρο σήραγγας και ένας διακομιστής web μπορούν να μοιράζονται έναν πυρήνα· το να μοιράζονται μία διεύθυνση, θύρα και πρωτόκολλο ταυτόχρονα είναι αυτό που αποτυγχάνει. Το WireGuard συνήθως παίρνει UDP 51820, OpenVPN παίρνει UDP 1194 ή TCP 443, και ένας διακομιστής web παίρνει TCP 443. Το ζεύγος που πονάει είναι το OpenVPN πάνω από TCP 443 δίπλα στο HTTPS, επειδή και τα δύο θέλουν τον ίδιο υποδοχέα και ο πυρήνας τον δίνει σε όποιον δεσμεύσει πρώτος. Μόνο ένας αποπολυπλέκτης μπροστά, όπως το sslh ή ένας διακομιστής μεσολάβησης που καταλαβαίνει TLS, τους αφήνει να μοιράζονται αυτή τη θύρα, και προσθέτει ένα στοιχείο του οποίου η βλάβη μοιάζει ακριβώς με πρόβλημα τείχους προστασίας.

Κοιτάξτε τους ιδιοκτήτες πριν αλλάξετε οτιδήποτε: ss -lntup τυπώνει την τοπική διεύθυνση, τη θύρα και τη διεργασία για κάθε υποδοχέα που ακούει. Δύο γραμμές με 0.0.0.0:443 σημαίνουν ότι η δεύτερη υπηρεσία δεν δεσμεύτηκε ποτέ, όσο κεφάτο κι αν ήταν το σενάριό της. Η γεφύρωση μετακινεί και τον ιδιοκτήτη. Όταν το eth0 ενώνεται με το br0, η IP μετακινείται στο br0 και κάθε κανόνας τείχους προστασίας που αναφέρει το eth0 σταματά να ταιριάζει, οπότε δέστε τις υπηρεσίες στη γέφυρα και επιβεβαιώστε με το ip -br addr.

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

Δρομολογήστε ανάμεσα στα δύο LAN ή κάντε NAT στη μία πλευρά

Δύο LAN που δεν βλέπονται μπορούν η καθεμία να καλέσει τον δημόσιο κόμβο, ο οποίος έπειτα προωθεί ανάμεσα στις σήραγγες. Αυτό το δρομολογημένο σχέδιο χρειάζεται τρία πράγματα: προώθηση ενεργή, μια διαδρομή προς κάθε απομακρυσμένο πρόθεμα, και μια πολιτική προώθησης που αφήνει τη διέλευση να περάσει. sysctl -w net.ipv4.ip_forward=1 καλύπτει το πρώτο, ip route add 10.20.0.0/24 dev wg1 το δεύτερο, και μια γραμμή nftables όπως nft add rule inet filter forward iifname "wg0" oifname "wg1" accept το τρίτο.

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

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

Δοκιμάστε τον χωρισμό όσο δύο ρόλοι είναι σταματημένοι

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

Τρεις εντολές κάνουν αυτή τη δοκιμή συγκεκριμένη. curl -sk --resolve example.test:443:203.0.113.10 https://example.test/ αποδεικνύει ότι ο τοπικός ακροατής απαντά χωρίς εξωτερικό DNS, wg show στον πελάτη αποδεικνύει ότι η χειραψία ολοκληρώθηκε, και tcpdump -ni any port 51820 στον κόμβο χωρίζει πρόβλημα δρομολόγησης από πρόβλημα κλειδιού. Μια χειραψία που δεν εμφανίζεται ποτέ στη σύλληψη πέθανε πριν από τον κεντρικό: τείχος προστασίας του παρόχου, λάθος δημόσια διεύθυνση ή κανόνας NAT στον δρόμο.

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

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

Γραμμές πρόσβασης μόνο IPv6 και υπηρεσίες IPv4

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

Δοκιμάστε κάθε οικογένεια χωριστά με curl -4 και curl -6, γιατί ένα επιτυχημένο αίτημα δεν λέει τίποτε για τη διαδρομή που δεν δοκιμάσατε. Η ιδιοκτησία θύρας δεν αλλάζει μεταξύ οικογενειών, αλλά ο ακροατής αλλάζει: ss -lntup απαριθμεί τους υποδοχείς IPv4 και IPv6 ως ξεχωριστές γραμμές, και 0.0.0.0:443 δεν καλύπτει [::]:443, εκτός αν η διεργασία ζήτησε υποδοχέα διπλής στοίβας.

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

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