Δύο άσχετες βλάβες παράγουν το ίδιο παράπονο. Στην πρώτη, ένας πελάτης δεν φτάνει σε άλλον ούτε με τη διεύθυνση της σήραγγας, επειδή οι διευθύνσεις δεν είναι στο ίδιο subnet ή ο διακομιστής δεν προωθεί την κίνηση μεταξύ ομοτίμων. Στη δεύτερη, το ping λειτουργεί και η λίστα συσκευών της εφαρμογής μένει κενή, επειδή η ανακάλυψη βασίζεται σε broadcast που μια σήραγγα επιπέδου 3 δεν μπορεί να μεταφέρει. Ένα ping τις χωρίζει, και η διόρθωση για καθεμία δεν μοιάζει καθόλου με τη διόρθωση της άλλης.

Ένα ping χωρίζει το πρόβλημα στα δύο

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

ip addr show tun0

Διαβάστε τη διεπαφή του πελάτη πριν από οτιδήποτε άλλο, γιατί η μάσκα δικτύου ονομάζει την τοπολογία. Ένα /24 ή άλλη μάσκα υποδικτύου σημαίνει κοινόχρηστη δεξαμενή· ένα /30 με διεύθυνση ομοτίμου σημαίνει την παλαιότερη διάταξη σημείου-προς-σημείο, όπου κάθε πελάτης έχει ακριβώς έναν γείτονα, τον διακομιστή.

net30 έναντι subnet, όπως διαβάζεται από την πλευρά του πελάτη

What you observenet30subnet
Client netmask/30 with a peer addressThe pool's own mask
Peers a client can address directlyOne, the serverEvery client in the pool
AddressingOne /30 block per client, with the server as the only peerOne pool mask shared by all clients
Effect of client-to-clientRequired for any peer trafficRequired for peer traffic, still no broadcast

Με το net30 ο διακομιστής δίνει ένα μικρό μπλοκ ανά πελάτη, οπότε δεν υπάρχει διαδρομή προς τη διεύθυνση σήραγγας άλλου πελάτη αν δεν την προωθήσει ο διακομιστής. Με το subnet ολόκληρη η δεξαμενή είναι ένα δίκτυο, κάθε πελάτης μπορεί να απευθυνθεί σε κάθε άλλον, και ο διακομιστής προωθεί μεταξύ τους. Γι' αυτό μια διαμόρφωση διακομιστή μπορεί να φαίνεται υγιής ενώ τα ping μεταξύ ομοτίμων αποτυγχάνουν: τίποτα δεν είναι χαλασμένο, απλώς οι πελάτες δεν είναι σε ένα δίκτυο. Ο πελάτης βλέπει έναν σύνδεσμο που λειτουργεί και μια διεύθυνση ομοτίμου που δεν απαντά, κάτι που διαβάζεται σαν τείχος προστασίας αλλά είναι διάταξη διευθυνσιοδότησης.

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

το client-to-client είναι ξεχωριστή πύλη

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

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

TUN έναντι TAP, και τι μπορεί να μεταφέρει το καθένα

PropertyTUNTAP
LayerLayer 3, IP packetsLayer 2, Ethernet frames
Broadcast and multicastNot carriedCarried
Bridging to the LANNot applicableRequired for a shared segment
Client platform supportEverywhereMissing on Android and iOS, limited on macOS

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

Για δύο ή τρεις σταθμούς εργασίας που χρειάζονται ανάλυση ονομάτων, μια εγγραφή hosts ή μια διεύθυνση unicast είναι πολύ φθηνότερη από μια γέφυρα. Καταφύγετε στο TAP όταν ένα πρωτόκολλο που δεν μπορείτε να αντικαταστήσετε εξαρτάται από ανακάλυψη επιπέδου 2, και όχι νωρίτερα.

Πελάτες στο ίδιο subnet χωρίς γέφυρα

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

ip neigh add proxy 10.50.1.250 dev eth0

Το Proxy ARP κλείνει αυτό το κενό κάνοντας τον διακομιστή να απαντά για λογαριασμό του πελάτη. Για ένα εύρος, το parpd διαχειρίζεται τις εγγραφές καθώς οι πελάτες έρχονται και φεύγουν, ενώ το sysctl net.ipv4.conf.eth0.proxy_arp=1 απαντά για ό,τι δρομολογείται αλλού, που είναι αρκετά ευρύ ώστε να δημιουργήσει τις δικές του εκπλήξεις σε ένα πολυάσχολο τμήμα.

Όποια διαδρομή κι αν διαλέξετε, αφαιρέστε το NAT ανάμεσα στη σήραγγα και το καλώδιο. Ένας κανόνας MASQUERADE κρύβει ακριβώς το ερώτημα διευθυνσιοδότησης που προσπαθείτε να απαντήσετε. Αφήνει επίσης στον επόμενο μια τοπολογία για την οποία δεν μπορεί να συλλογιστεί από την πλευρά του πελάτη.

Πριν αλλάξετε οτιδήποτε, καταγράψτε μία απόπειρα στον διακομιστή με το tcpdump -ni tun0 και επιβεβαιώστε αν το πακέτο του ομοτίμου φτάνει καθόλου. Το να φτάνει και να απορρίπτεται δείχνει client-to-client· το να μη φτάνει ποτέ δείχνει τοπολογία ή δρομολόγηση. Το εγχειρίδιο του OpenVPN 2.6 τεκμηριώνει και τις δύο λέξεις-κλειδιά και την προεπιλεγμένη τοπολογία, κάτι που αξίζει να το ελέγξετε με την έκδοσή σας πριν αντιγράψετε μια γραμμή από ανάρτηση φόρουμ.

  • Η διεπαφή tun δείχνει μάσκα δεξαμενής αντί για ζεύγος ομοτίμου /30.
  • Ένα απευθείας ping στη διεύθυνση της άλλης σήραγγας πετυχαίνει πριν δοκιμάσετε την ανακάλυψη.
  • Η διαμόρφωση του διακομιστή περιλαμβάνει το client-to-client όποτε οι ομότιμοι πρέπει να ανταλλάσσουν πακέτα.
  • Ονομάστε το πρωτόκολλο ανακάλυψης που δοκιμάζετε αντί να λέτε ότι η εφαρμογή αποτυγχάνει.
  • Χρησιμοποιήστε TAP μόνο αν κάθε πλατφόρμα πελάτη στην ομάδα το υποστηρίζει.
  • Κρατήστε το NAT έξω από τη διαδρομή μεταξύ σήραγγας και LAN όταν μετράει η προσβασιμότητα εντός του ίδιου subnet.

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