Θύρα προέλευσης πελάτη έναντι ακροατή διακομιστή σε ροή VPN
Συγκρίνετε τους δύο αριθμούς θυρών σε ένα τούνελ: τον σταθερό ακροατή του διακομιστή και την εφήμερη προέλευση του πελάτη, και πώς η μετάφραση του δρομολογητή βρίσκεται ανάμεσά τους.
Δύο αριθμοί εμφανίζονται στην ίδια συνομιλία και κανένας από τους δύο δεν είναι λάθος. Το αρχείο καταγραφής του διακομιστή δείχνει τον ακροατή που προσφέρει την υπηρεσία, ο φορητός υπολογιστής δείχνει το socket που έστειλε το datagram, και ένας δρομολογητής ανάμεσα μπορεί να ξαναγράψει τον δεύτερο στην έξοδο. Η σύγκριση των άκρων της συνομιλίας είναι πιο χρήσιμη από τη σύγκριση των ψηφίων. Η σύγκριση παρακάτω κρατά χωριστά τον ακροατή, το socket του πελάτη και τη μεταφρασμένη προέλευση, γιατί απαντούν σε διαφορετικά ερωτήματα.
Δύο αριθμοί που περιγράφουν αντίθετα άκρα
Η ρυθμισμένη θύρα του διακομιστή είναι ο προορισμός που καλεί ο πελάτης. Καθορίζεται από πολιτική, εμφανίζεται στο προφίλ και πρέπει να είναι ανοιχτή στην πλευρά του διακομιστή. Η θύρα προέλευσης του πελάτη επιλέγεται τοπικά, συνήθως από το εφήμερο εύρος, και υπάρχει ώστε η απάντηση να έχει πού να προσγειωθεί. Μπορεί να αλλάξει σε κάθε επανασύνδεση και τίποτα στον σχεδιασμό δεν εξαρτάται από τη σταθερότητά της.
Ένας δρομολογητής ανάμεσα μπορεί να ξαναγράψει αυτή την προέλευση στη δική του αντιστοίχιση 'NAT'. Γι' αυτό ο αριθμός που παρατηρείται στον διακομιστή συχνά δεν έχει καμία σχέση με αυτόν που επέλεξε ο φορητός.
Πού αλλάζει ο αριθμός προέλευσης στην έξοδο
Πάρτε ένα επινοημένο παράδειγμα IPv4: έναν πελάτη πίσω από δρομολογητή που μεταφράζει, έναν διακομιστή με έναν ακροατή 'UDP' και ένα μόνο datagram που διασχίζει και τους δύο. Ο πίνακας ονομάζει κάθε άκρο και τι του συμβαίνει, αντί να αναπαράγει το πακέτο σε τρία σημεία παρατήρησης.
| Endpoint | What stays fixed | What changes on reconnect | Who owns it |
|---|---|---|---|
| Server listener | The service port and the address the profile names | Nothing; the listener does not follow the client | The server operator |
| Client socket | The destination it dials | The local source port, chosen per socket | The client, or its operating system |
| Translated source | Usually the public address of the router | The port, and sometimes the address after a network switch | The NAT device or the upstream carrier |
Ο προορισμός είναι σταθερός σε κάθε γραμμή και αλλάζει μόνο η ταυτότητα της προέλευσης. Απαιτήσεις UDP NAT ξεχωρίζουν μια εσωτερική διεύθυνση και θύρα από την εξωτερική αντιστοίχιση, που είναι ακριβώς η διαφορά ανάμεσα στη δεύτερη και την τρίτη γραμμή. Ένας δρομολογητής μπορεί να διατηρήσει τη θύρα προέλευσης του πελάτη ή να διαλέξει άλλη· η διατήρηση δεν είναι κάτι που μια εφαρμογή πρέπει να υποθέτει.
Διαβάστε τα τρία άκρα από τους ίδιους τους hosts
Οι λίστες παρακάτω προέρχονται από τρία διαφορετικά μηχανήματα και μαζί δείχνουν όλη τη συνομιλία. Εκτελέστε την πρώτη στον διακομιστή, τη δεύτερη στον πελάτη και την τρίτη όπου υπάρχει η αντιστοίχιση. Μία μόνο γραμμή καταγραφής δεν δείχνει ποτέ και τις τρεις.
ss -lunp 'sport = :1194'
ss -unp | grep 1194
conntrack -L -p udp | grep 1194
Η πρώτη λίστα αποδεικνύει ότι ο διακομιστής είναι δεσμευμένος στη θύρα υπηρεσίας και δείχνει ποια διεργασία την κατέχει. Η δεύτερη δείχνει το τοπικό socket του πελάτη και τον προορισμό που κάλεσε. Η τρίτη δείχνει την αντιστοίχιση που δημιούργησε ο δρομολογητής, και είναι το μόνο σημείο όπου εμφανίζεται η μεταφρασμένη προέλευση. Διαβάστε τις με αυτή τη σειρά και οι δύο αριθμοί σταματούν να φαίνονται αντιφατικοί.
Τι αλλάζει μια επανασύνδεση και τι όχι
Μερικοί δρομολογητές διατηρούν τη θύρα προέλευσης του πελάτη όταν είναι ελεύθερη, και άλλοι εκχωρούν διαφορετική κάθε φορά. Και οι δύο συμπεριφορές είναι φυσιολογικές, και μια εφαρμογή που απαιτεί την πρώτη θα σπάσει στη δεύτερη. Αλλαγή αντιστοίχισης μετά από επανασύνδεση ή αλλαγή δικτύου δεν είναι βλάβη του διακομιστή: ο πελάτης ανοίγει νέο socket, ο δρομολογητής δίνει ό,τι έχει, και ο διακομιστής βλέπει νέα προέλευση στον ίδιο ακροατή. Βλάβη θα ήταν να περιμένει κανείς ο διακομιστής να δεχτεί κίνηση που απευθύνεται σε αυθαίρετη θύρα πελάτη.
Οι πελάτες OpenVPN της κοινότητας παίρνουν αυτή τη συμπεριφορά μέσω nobind, που αφήνει το λειτουργικό σύστημα να επιλέξει την τοπική θύρα· η απομακρυσμένη θύρα εξακολουθεί να προέρχεται από το προφίλ. Η ρητή δέσμευση είναι συνειδητή επιλογή, όχι απαίτηση του πρωτοκόλλου. Ο διακομιστής συνεχίζει να προσφέρει ένα άκρο ενώ οι πελάτες διαλέγουν τις δικές τους τοπικές ταυτότητες.
Σημάνετε τα επίπεδα χωριστά στην καταγραφή
Μέσα στο τούνελ υπάρχει δεύτερη συνομιλία με δικές της θύρες. Ένα αίτημα HTTPS που μεταφέρει το τούνελ έχει προορισμό TCP 443, ενώ η εξωτερική κρυπτογραφημένη σύνδεση χρησιμοποιεί UDP 1194, οπότε η αλλαγή της εξωτερικής θύρας προέλευσης δεν αλλάζει τίποτα στην εσωτερική υπηρεσία.
Ακόμη και στο εξωτερικό επίπεδο, το πρωτόκολλο μετράει. UDP 1194 και TCP 1194 είναι διαφορετικά άκρα, και ένας ακροατής 'TCP' δεν θα δεχτεί ποτέ datagram UDP επειδή απλώς ταιριάζει ο αριθμός. Όταν τεκμηριώνετε μια ανάπτυξη, σημάνετε τον ακροατή του διακομιστή, το socket του πελάτη και τη μεταφρασμένη προέλευση ως τρία διακριτά πράγματα και προσθέστε τη μεταφορά στο καθένα.
Έπειτα αφήστε την πολιτική να ακολουθεί τους ρόλους. Ο διακομιστής ανοίγει τη σκοπούμενη μεταφορά στον ακροατή του και εξακολουθεί να πιστοποιεί τον ομότιμο· το τείχος προστασίας του πελάτη επιτρέπει απαντήσεις στη δική του εξερχόμενη ανταλλαγή χωρίς να δημοσιεύει εισερχόμενη υπηρεσία. Ένα φίλτρο χωρίς κατάσταση χρειάζεται ρητά γραμμένη την κατεύθυνση επιστροφής, και αυτός είναι ο πρακτικός λόγος που η διάκριση έχει σημασία πέρα από τακτικά διαγράμματα.