U istom razgovoru pojavljuju se dva broja i nijedan nije pogrešan. Serverski dnevnik pokazuje slušaoca koji nudi uslugu, laptop pokazuje socket koji je poslao datagram, a ruter između može prepisati drugi na izlazu. Korisnije je uporediti krajeve razgovora nego same cifre. Poređenje ispod drži slušaoca, klijentski socket i prevedeni izvor odvojeno, jer odgovaraju na različita pitanja.

Dva broja koja opisuju suprotne krajeve

Konfigurisani port servera je odredište na koje se klijent spaja. Njega fiksira politika, pojavljuje se u profilu i mora biti otvoren na strani servera. Izvorni port klijenta bira se lokalno, obično iz efemernog opsega, i postoji da bi odgovor imao gdje sletjeti. Može se promijeniti pri svakom ponovnom spajanju i ništa u dizajnu ne zavisi od toga da bude stabilan.

Ruter između može prepisati taj izvor u sopstveno 'NAT' mapiranje. Zato broj koji se vidi na serveru često nema nikakve veze s onim koji je laptop izabrao.

Gdje se broj izvora mijenja na izlazu

Uzmite izmišljeni primjer s IPv4: klijent iza rutera koji prevodi, server s jednim 'UDP' slušaocem i jedan datagram koji prelazi oba. Tabela imenuje svaku krajnju tačku i šta se s njom događa, umjesto da ponovo pušta paket na tri mjesta posmatranja.

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

Odredište je konstantno u svakom redu, a mijenja se samo identitet izvora. Zahtjevi UDP NAT-a razlikuju unutrašnju adresu i port od vanjskog mapiranja, što je upravo razlika između drugog i trećeg reda. Ruter može zadržati izvorni port klijenta ili izabrati drugi; zadržavanje nije nešto što aplikacija smije pretpostaviti.

Pročitajte tri krajnje tačke s hostova samih

Liste ispod dolaze s tri različita računara i zajedno pokazuju cijeli razgovor. Pokrenite prvu na serveru, drugu na klijentu, a treću gdje god mapiranje postoji. Jedna linija dnevnika nikad ne pokazuje sve tri.

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

Prva lista dokazuje da je server vezan za servisni port i pokazuje koji proces ga drži. Druga pokazuje lokalni socket klijenta i odredište na koje se spojio. Treća pokazuje mapiranje koje je ruter stvorio, a to je jedino mjesto gdje se prevedeni izvor pojavljuje. Čitajte ih tim redom i dva broja prestaju izgledati proturječno.

Šta ponovno spajanje mijenja, a šta ne

Neki ruteri zadrže izvorni port klijenta kad je slobodan, a neki svaki put dodijele drugi. Oba ponašanja su normalna, a aplikacija koja zahtijeva prvo slomit će se na drugom. Promjena mapiranja nakon ponovnog spajanja ili promjene mreže nije kvar servera: klijent otvara novi socket, ruter dodjeljuje šta ima, a server vidi novi izvor na istom slušaocu. Kvar bi bio očekivati da server prihvati saobraćaj adresiran na proizvoljan klijentski port.

Klijenti iz zajednice OpenVPN dobijaju ovo ponašanje kroz nobind, što operativnom sistemu prepušta izbor lokalnog porta; udaljeni port i dalje dolazi iz profila. Eksplicitno vezivanje je svjesna odluka, a ne zahtjev protokola. Server nastavlja nuditi jednu krajnju tačku dok klijenti biraju sopstvene lokalne identitete.

Označite slojeve odvojeno u zapisu

Unutar tunela postoji drugi razgovor sa sopstvenim portovima. HTTPS zahtjev koji tunel nosi ima odredište TCP 443, dok vanjska šifrirana veza koristi UDP 1194, pa promjena vanjskog izvornog porta ne mijenja ništa na unutrašnjoj usluzi.

Čak i na vanjskom sloju protokol je važan. UDP 1194 i TCP 1194 su različite krajnje tačke i 'TCP' slušalac nikada neće primiti UDP datagram zato što se broj poklapa. Kad dokumentujete postavljanje, označite serverski slušalac, klijentski socket i prevedeni izvor kao tri različite stvari i dodajte transport svakoj.

Zatim neka politika prati uloge. Server otvara predviđeni transport na svom slušaocu i dalje provjerava identitet druge strane; klijentski firewall propušta odgovore na vlastitu odlaznu razmjenu bez objavljivanja dolazne usluge. Filter bez stanja treba izričito napisan povratni smjer, i to je praktični razlog zašto razlika vrijedi i izvan urednih dijagrama.

Povezani članci