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.

EndpointWhat stays fixedWhat changes on reconnectWho owns it
Server listenerThe service port and the address the profile namesNothing; the listener does not follow the clientThe server operator
Client socketThe destination it dialsThe local source port, chosen per socketThe client, or its operating system
Translated sourceUsually the public address of the routerThe port, and sometimes the address after a network switchThe 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.

Relaterede artikler