Ένα overlay N2N δεν είναι proxy: σχεδιάστε και τις δύο συνδέσεις
Το overlay μπορεί να φτάσει τον peer ενώ ο browser εξακολουθεί να λαμβάνει άρνηση. Πρόκειται για ελλείπον listener ή λάθος bind, όχι για αποτυχία δρομολόγησης στο N2N.
Ο Firefox δείχνει στο 127.0.0.1:8000, το άκρο N2N είναι ενεργό, ο peer απαντά σε ping στη διεύθυνση overlay του, και ο browser εξακολουθεί να αναφέρει ότι ο proxy αρνήθηκε τη σύνδεση. Τίποτα σε αυτή την αλυσίδα δεν είναι αντιφατικό. Ένα overlay δίνει σε έναν host μια προσβάσιμη διεύθυνση σε ιδιωτικό δίκτυο· δεν δημιουργεί διεργασία που μιλά το πρωτόκολλο proxy. Ο browser δεν ζητά διαδρομή προς έναν peer. Ζητά τοπικό listener.
Εδώ συγχέονται δύο συνδέσεις, και το να τις σχεδιάσουμε χωριστά ξεκαθαρίζει το μεγαλύτερο μέρος της σύγχυσης σε ένα λεπτό.
Δύο συνδέσεις, όχι μία
Η πρώτη σύνδεση πηγαίνει από τον browser σε ό,τι ακούει στη θύρα loopback. Πρόκειται για τοπικό socket, και αν τίποτα δεν το κατέχει, η σύνδεση απορρίπτεται πριν φτάσει έστω ένα πακέτο στο N2N. Η δεύτερη πηγαίνει από τη διεργασία proxy στο origin που ανακτά. Αυτή τη διαδρομή την επιλέγει ο πίνακας δρομολόγησης του host του proxy, και μπορεί να είναι το συνηθισμένο uplink, άλλο tunnel ή διαδρομή πολιτικής που δεν έχει καμία σχέση με το overlay.
Το ping στον peer αποδεικνύει ότι το overlay μπορεί να παραδίδει πακέτα μεταξύ διευθύνσεων άκρων. Δεν αποδεικνύει τίποτα για listener στη θύρα 8000, ούτε για το αν αυτός ο host μπορεί να φτάσει το origin. Χωριστές αστοχίες, χωριστές διορθώσεις.
Πού πρέπει να ζει ο listener
Ένας proxy δεσμευμένος στη 127.0.0.1 είναι σκόπιμα τοπικός: δέχεται συνδέσεις μόνο από το μηχάνημα όπου εκτελείται. Αυτό είναι το σωστό προεπιλεγμένο για προσωπικό proxy και η λάθος μορφή για κοινή χρήση μέσω overlay. Η εξυπηρέτηση peer του overlay απαιτεί είτε διεύθυνση bind στη διεπαφή του overlay είτε στοιχείο προώθησης που τερματίζει τη σύνδεση loopback και τη μεταβιβάζει. Σε κάθε περίπτωση, μια ρητή πολιτική πρέπει να αποφασίζει ποιες πηγές overlay επιτρέπεται να χρησιμοποιούν την υπηρεσία, γιατί ένας ανοιχτός proxy σε κοινόχρηστο δίκτυο είναι πρόσκληση.
Ελέγξτε το πραγματικό bind με λίστα socket αντί για το αρχείο ρυθμίσεων. Ένας daemon που ξεκίνησε πριν ανέβει το overlay μπορεί να είναι ακόμη δεσμευμένος σε διεύθυνση που δεν υπάρχει πλέον.
Το localhost δεν είναι ο peer
Στο πεδίο proxy του browser, το localhost δείχνει στο μηχάνημα του ίδιου του browser. Δεν είναι το άκρο, ούτε ο supernode, ούτε ο host στο μακρινό άκρο του tunnel. Αν ο proxy εκτελείται σε άλλο peer, βάλτε στο πεδίο την προσβάσιμη διεύθυνση overlay και τη θύρα εκείνου του peer, και μετά επιβεβαιώστε ότι ο listener δέχεται συνδέσεις από τη διεύθυνση του άκρου σας.
Οι supernodes βοηθούν τα άκρα να βρίσκουν το ένα το άλλο· δεν είναι υπηρεσία proxy. Το να αντιμετωπίζετε μια διεύθυνση supernode ως τελικό σημείο proxy παράγει την ίδια άρνηση με ένα επιπλέον βήμα σύγχυσης.
Μια διαδρομή δεν μπορεί να εκτελέσει handshake
Ακόμη και με σωστή διεύθυνση, η δρομολόγηση δεν είναι proxying. Μια σύνδεση proxy HTTP ξεκινά με αίτημα CONNECT ή γραμμή αιτήματος απόλυτης μορφής, και ένας proxy SOCKS ξεκινά με διαπραγμάτευση έκδοσης και μεθόδου. Ένας router ή ένα overlay προωθεί bytes· δεν αναλύει αυτά τα μηνύματα ούτε ανοίγει την επόμενη σύνδεση για εσάς. Γι’ αυτό μια διαδρομή που λειτουργεί για ping και SSH μπορεί να αποτύχει για proxy του browser: ο browser χρειάζεται συνεργαζόμενη διεργασία, όχι απλώς προσβασιμότητα.
Αν ο στόχος είναι απλώς να φτάσετε μια υπηρεσία στον peer, αφαιρέστε τη ρύθμιση proxy και χρησιμοποιήστε απευθείας τη διεύθυνση overlay της υπηρεσίας.
Δοκιμάστε τα όρια με σειρά
Επιβεβαιώστε ότι η διεύθυνση overlay απαντά, μετά επιβεβαιώστε ότι υπάρχει listener στη ρυθμισμένη θύρα και σημειώστε τη διεύθυνση bind του. Κάντε ένα ελεγχόμενο αίτημα και διαβάστε το log του proxy, ώστε να ξέρετε αν η αστοχία βρίσκεται στον listener ή στην επόμενη ανάκτηση. Τέλος, ελέγξτε τη διαδρομή του host του proxy και την πολιτική DNS για το origin.
Το έργο N2N τεκμηριώνει άκρα και supernodes ως στοιχεία overlay. Δεν μετατρέπει ένα άκρο σε proxy εφαρμογής, και καμία ρύθμιση δρομολόγησης δεν προσθέτει χειριστή πρωτοκόλλου που δεν ξεκίνησε κανείς.