Klientens kildeport over for serverens lytteport i en VPN-strøm
Sammenlign de to portnumre i én tunnel: serverens faste lytteport og klientens kortvarige kilde, og hvordan en routeroversættelse ligger imellem dem.
To tal optræder i samme samtale, og ingen af dem er forkerte. Serverloggen viser den lytter, der tilbyder tjenesten, laptop'en viser den socket, der sendte datagrammet, og en router imellem kan omskrive det andet på vej ud. Det er mere nyttigt at sammenligne samtalens ender end at sammenligne cifrene. Sammenligningen nedenfor holder lytteren, klientens socket og den oversatte kilde adskilt, fordi de besvarer forskellige spørgsmål.
To tal der beskriver modsatte ender
Serverens konfigurerede port er den destination, klienten ringer til. Den er fastlagt af politik, står i profilen og skal være åben på serversiden. Klientens kildeport vælges lokalt, normalt fra det efemære område, og findes, så svaret har et sted at lande. Den kan ændre sig ved hver genopkobling, og intet i designet afhænger af, at den er stabil.
En router imellem kan omskrive den kilde til sin egen 'NAT'-mapping. Derfor har det tal, der ses på serveren, ofte ingen forbindelse til det, laptoppen valgte.
Hvor kildetallet ændrer sig på vej ud
Tag et opdigtet IPv4-eksempel: en klient bag en oversættende router, en server med én 'UDP'-lytter og et enkelt datagram, der krydser begge. Tabellen navngiver hvert endepunkt og hvad der sker med det, i stedet for at afspille pakken på tre observationspunkter.
| 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 |
Destinationen er konstant i hver række, og kun kildens identitet ændrer sig. Krav til UDP NAT skelner mellem en intern adresse og port og den eksterne mapping, hvilket er præcis forskellen mellem anden og tredje række. En router kan bevare klientens kildeport eller vælge en anden; bevarelse er ikke noget, en applikation bør forudsætte.
Læs de tre endepunkter fra værterne selv
Listerne nedenfor kommer fra tre forskellige maskiner og viser tilsammen hele samtalen. Kør den første på serveren, den anden på klienten og den tredje, hvor mappingen findes. En enkelt loglinje viser aldrig alle tre.
ss -lunp 'sport = :1194'
ss -unp | grep 1194
conntrack -L -p udp | grep 1194
Den første liste beviser, at serveren er bundet til tjenesteporten, og viser hvilken proces der ejer den. Den anden viser klientens lokale socket og den destination, den ringede til. Den tredje viser den mapping, routeren oprettede, og det er det eneste sted, den oversatte kilde optræder. Læs dem i den rækkefølge, og de to tal holder op med at se modstridende ud.
Hvad en genopkobling ændrer, og hvad den ikke ændrer
Nogle routere bevarer klientens kildeport, når den er fri, og andre tildeler en anden hver gang. Begge adfærdsmønstre er normale, og en applikation, der kræver det første, vil gå i stykker på det andet. En ændring af mapping efter en genopkobling eller et netværksskift er ikke en serverfejl: klienten åbner en ny socket, routeren tildeler, hvad den har, og serveren ser en ny kilde på den samme lytter. En fejl ville være at forvente, at serveren accepterer trafik adresseret til en vilkårlig klientport.
Fællesskabets OpenVPN-klienter får denne adfærd gennem nobind, som lader styresystemet vælge den lokale port; fjernporten kommer stadig fra profilen. At binde eksplicit er et bevidst valg, ikke et protokolkrav. Serveren bliver ved med at tilbyde ét endepunkt, mens klienter vælger deres egne lokale identiteter.
Mærk lagene hver for sig i registreringen
Inde i tunnelen er der en anden samtale med sine egne porte. En HTTPS-anmodning, der bæres af tunnelen, har destination TCP 443, mens den ydre krypterede forbindelse bruger UDP 1194, så ændring af den ydre kildeport ændrer intet i den indre tjeneste.
Selv på det ydre lag betyder protokollen noget. UDP 1194 og TCP 1194 er forskellige endepunkter, og en 'TCP'-lytter vil aldrig modtage et UDP-datagram, fordi tallene passer. Når du dokumenterer en udrulning, så mærk serverens lytter, klientens socket og den oversatte kilde som tre forskellige ting, og tilføj transporten til hver.
Lad så politikken følge rollerne. Serveren åbner den tilsigtede transport på sin lytter og autentificerer stadig modparten; klientens firewall tillader svar på dens egen udgående udveksling uden at offentliggøre en indgående tjeneste. Et tilstandsløst filter har brug for den skrevne returretning, og det er den praktiske grund til, at forskellen betyder noget ud over pæne diagrammer.