Ve stejné konverzaci se objevují dvě čísla a ani jedno není špatné. Protokol serveru ukazuje naslouchající port, který nabízí službu, notebook ukazuje socket, který odeslal datagram, a router mezi nimi může druhý z nich při cestě ven přepsat. Užitečnější je porovnat konce konverzace než samotné číslice. Následující srovnání drží naslouchající port, klientský socket a přeložený zdroj oddělené, protože odpovídají na různé otázky.

Dvě čísla, která popisují protilehlé konce

Nakonfigurovaný port serveru je cíl, na který klient volá. Určuje ho politika, objevuje se v profilu a musí být na straně serveru otevřený. Zdrojový port klienta se volí lokálně, obvykle z efemérního rozsahu, a existuje proto, aby odpověď měla kam dorazit. Může se změnit při každém opětovném připojení a nic v návrhu nezávisí na tom, že zůstane stabilní.

Router mezi nimi může tento zdroj přepsat do svého vlastního 'NAT' mapování. Proto číslo pozorované na serveru často nemá žádný vztah k tomu, které si notebook vybral.

Kde se číslo zdroje cestou ven mění

Vezměte vymyšlený příklad s IPv4: klient za překládajícím routerem, server s jedním 'UDP' naslouchajícím portem a jediný datagram, který projde oběma. Tabulka pojmenovává každý koncový bod a co se s ním děje, místo aby přehrávala paket ve třech bodech pozorování.

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

Cíl je v každém řádku stejný a mění se jen identita zdroje. Požadavky UDP NAT rozlišují vnitřní adresu a port od vnějšího mapování, což je přesně rozdíl mezi druhým a třetím řádkem. Router může zdrojový port klienta zachovat, nebo zvolit jiný; zachování není něco, co by aplikace měla předpokládat.

Přečtěte tři koncové body ze samotných hostitelů

Výpisy níže pocházejí ze tří různých strojů a společně ukazují celou konverzaci. Spusťte první na serveru, druhý na klientovi a třetí tam, kde mapování existuje. Jediný řádek protokolu nikdy neukáže všechny tři.

ss -lunp 'sport = :1194'
ss -unp | grep 1194
conntrack -L -p udp | grep 1194

První výpis dokazuje, že server je vázán na port služby, a ukazuje, který proces jej vlastní. Druhý ukazuje lokální socket klienta a cíl, na který volal. Třetí ukazuje mapování, které router vytvořil, a to je jediné místo, kde se přeložený zdroj objevuje. Přečtěte je v tomto pořadí a dvě čísla přestanou vypadat protichůdně.

Co opětovné připojení mění a co ne

Některé routery zachovají zdrojový port klienta, když je volný, jiné přidělí pokaždé jiný. Obě chování jsou normální a aplikace, která vyžaduje první, se na druhém zlomí. Změna mapování po opětovném připojení nebo přepnutí sítě není chyba serveru: klient otevře nový socket, router přidělí, co má, a server vidí nový zdroj na stejném naslouchajícím portu. Chybou by bylo očekávat, že server přijme provoz adresovaný na libovolný klientský port.

Komunitní klienti OpenVPN toto chování získávají pomocí nobind, což nechá operační systém zvolit lokální port; vzdálený port stále pochází z profilu. Explicitní svázání je vědomá volba, ne požadavek protokolu. Server nadále nabízí jeden koncový bod, zatímco klienti si volí vlastní lokální identity.

Označte vrstvy v záznamu odděleně

Uvnitř tunelu probíhá druhá konverzace s vlastními porty. Požadavek HTTPS nesený tunelem má cíl TCP 443, zatímco vnější šifrované spojení používá UDP 1194, takže změna vnějšího zdrojového portu na vnitřní službě nic nemění.

I ve vnější vrstvě záleží na protokolu. UDP 1194 a TCP 1194 jsou různé koncové body a 'TCP' naslouchající port nikdy nepřijme UDP datagram jen proto, že číslo souhlasí. Při dokumentaci nasazení označte naslouchající port serveru, klientský socket a přeložený zdroj jako tři odlišné věci a ke každému přidejte transport.

Pak nechte politiku následovat role. Server otevře zamýšlený transport na svém naslouchajícím portu a stále ověřuje protistranu; firewall klienta propustí odpovědi na jeho vlastní odchozí výměnu, aniž by zveřejnil příchozí službu. Bezstavový filtr potřebuje výslovně zapsaný zpětný směr, a to je praktický důvod, proč na rozlišení záleží i mimo úhledné diagramy.

Související články