V tej istej konverzácii sa objavujú dve čísla a ani jedno nie je nesprávne. Protokol servera ukazuje naslúchajúci port, ktorý ponúka službu, notebook ukazuje soket, ktorý odoslal datagram, a smerovač medzi nimi môže druhý pri ceste von prepísať. Užitočnejšie je porovnať konce konverzácie než samotné číslice. Nasledujúce porovnanie drží naslúchajúci port, klientsky soket a preložený zdroj oddelene, pretože odpovedajú na rôzne otázky.

Dve čísla, ktoré opisujú protilehlé konce

Nakonfigurovaný port servera je cieľ, na ktorý klient volá. Určuje ho politika, objavuje sa v profile a musí byť na strane servera otvorený. Zdrojový port klienta sa volí lokálne, zvyčajne z efemérneho rozsahu, a existuje preto, aby odpoveď mala kam doraziť. Môže sa zmeniť pri každom opätovnom pripojení a nič v návrhu nezávisí od toho, že zostane stabilný.

Smerovač medzi nimi môže tento zdroj prepísať do svojho vlastného 'NAT' mapovania. Preto číslo pozorované na serveri často nemá žiadny vzťah k tomu, ktoré si notebook vybral.

Kde sa číslo zdroja cestou von mení

Vezmite vymyslený príklad s IPv4: klient za prekladajúcim smerovačom, server s jedným 'UDP' naslúchajúcim portom a jediný datagram, ktorý prejde oboma. Tabuľka pomenúva každý koncový bod a čo sa s ním deje, namiesto prehrávania paketu v troch bodoch pozorovania.

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

Cieľ je v každom riadku rovnaký a mení sa iba identita zdroja. Požiadavky UDP NAT rozlišujú vnútornú adresu a port od vonkajšieho mapovania, čo je presne rozdiel medzi druhým a tretím riadkom. Smerovač môže zdrojový port klienta zachovať alebo zvoliť iný; zachovanie nie je niečo, čo by aplikácia mala predpokladať.

Prečítajte tri koncové body zo samotných hostiteľov

Výpisy nižšie pochádzajú z troch rôznych strojov a spolu ukazujú celú konverzáciu. Spustite prvý na serveri, druhý na klientovi a tretí tam, kde mapovanie existuje. Jediný riadok protokolu nikdy neukáže všetky tri.

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

Prvý výpis dokazuje, že server je viazaný na port služby, a ukazuje, ktorý proces ho vlastní. Druhý ukazuje lokálny soket klienta a cieľ, na ktorý volal. Tretí ukazuje mapovanie, ktoré vytvoril smerovač, a to je jediné miesto, kde sa preložený zdroj objavuje. Prečítajte ich v tomto poradí a dve čísla prestanú vyzerať protirečivo.

Čo opätovné pripojenie mení a čo nie

Niektoré smerovače zachovajú zdrojový port klienta, keď je voľný, iné pridelia zakaždým iný. Obe správania sú normálne a aplikácia, ktorá vyžaduje prvé, sa na druhom zlomí. Zmena mapovania po opätovnom pripojení alebo prepnutí siete nie je chyba servera: klient otvorí nový soket, smerovač pridelí, čo má, a server vidí nový zdroj na tom istom naslúchajúcom porte. Chybou by bolo očakávať, že server prijme prevádzku adresovanú na ľubovoľný klientsky port.

Komunitní klienti OpenVPN získavajú toto správanie pomocou nobind, čo nechá operačný systém zvoliť lokálny port; vzdialený port stále pochádza z profilu. Explicitné zviazanie je vedomá voľba, nie požiadavka protokolu. Server naďalej ponúka jeden koncový bod, zatiaľ čo klienti si volia vlastné lokálne identity.

Označte vrstvy v zázname oddelene

Vnútri tunela prebieha druhá konverzácia s vlastnými portami. Požiadavka HTTPS nesená tunelom má cieľ TCP 443, zatiaľ čo vonkajšie šifrované spojenie používa UDP 1194, takže zmena vonkajšieho zdrojového portu na vnútornej službe nič nemení.

Aj vo vonkajšej vrstve záleží na protokole. UDP 1194 a TCP 1194 sú rôzne koncové body a 'TCP' naslúchajúci port nikdy neprijme UDP datagram len preto, že číslo súhlasí. Pri dokumentovaní nasadenia označte naslúchajúci port servera, klientsky soket a preložený zdroj ako tri odlišné veci a ku každému pridajte transport.

Potom nechajte politiku nasledovať roly. Server otvorí zamýšľaný transport na svojom naslúchajúcom porte a stále overuje protistranu; firewall klienta prepustí odpovede na jeho vlastnú odchádzajúcu výmenu bez zverejnenia prichádzajúcej služby. Bezstavový filter potrebuje výslovne zapísaný spätný smer, a to je praktický dôvod, prečo na rozlíšení záleží aj mimo úhľadných diagramov.

Súvisiace články