У адной размове з'яўляюцца два нумары, і ніводзін з іх не памылковы. Серверны журнал паказвае слухача, які прапануе паслугу, ноўтбук паказвае сокет, што адправіў дэйтаграму, а маршрутызатар паміж імі можа перапісаць другі на выхадзе. Параўноўваць канцы размовы карысней, чым самі лічбы. Параўнанне ніжэй трымае асобна слухача, кліенцкі сокет і пераўтвораную крыніцу, бо яны адказваюць на розныя пытанні.

Два нумары, якія апісваюць процілеглыя канцы

Наладжаны порт сервера — гэта мэта, куды набірае кліент. Ён замацаваны палітыкай, прысутнічае ў профілі і павінен быць адкрыты на баку сервера. Порт-крыніца кліента выбіраецца лакальна, звычайна з эфемернага дыяпазону, і існуе, каб адказу было куды прыйсці. Ён можа змяняцца пры кожным перападключэнні, і нішто ў дызайне не залежыць ад яго стабільнасці.

Маршрутызатар паміж імі можа перапісаць гэтую крыніцу ў сваё ўласнае 'NAT'-супастаўленне. Таму нумар, які назіраецца на серверы, часта не мае ніякай сувязі з тым, што выбраў ноўтбук.

Дзе нумар крыніцы змяняецца на выхадзе

Вазьміце прыдуманы прыклад з IPv4: кліент за маршрутызатарам, які выконвае трансляцыю, сервер з адным 'UDP'-слухачом і адзіная дэйтаграма, што перасякае абодвух. Табліца называе кожны канец і тое, што з ім адбываецца, замест таго каб прайграваць пакет у трох пунктах назірання.

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

Мэта нязменная ў кожным радку, і змяняецца толькі ідэнтычнасць крыніцы. Патрабаванні UDP NAT адрозніваюць унутраны адрас і порт ад знешняга супастаўлення, і гэта менавіта розніца паміж другім і трэцім радкамі. Маршрутызатар можа захаваць порт-крыніцу кліента або выбраць іншы; захаванне — не тое, што праграма павінна меркаваць.

Прачытайце тры канцы з саміх хостаў

Спісы ніжэй паходзяць з трох розных машын і разам паказваюць усю размову. Запусціце першы на серверы, другі на кліенце, а трэці там, дзе існуе супастаўленне. Адзін радок журнала ніколі не паказвае ўсе тры.

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

Першы спіс даказвае, што сервер прывязаны да порта паслугі, і паказвае, які працэс ім валодае. Другі паказвае лакальны сокет кліента і мэту, куды ён набіраў. Трэці паказвае супастаўленне, створанае маршрутызатарам, і гэта адзінае месца, дзе з'яўляецца пераўтвораная крыніца. Прачытайце іх у такім парадку, і два нумары перастануць выглядаць супярэчлівымі.

Што змяняе перападключэнне, а што не

Некаторыя маршрутызатары захоўваюць порт-крыніцу кліента, калі ён вольны, а некаторыя кожны раз выдзяляюць іншы. Абодва паводзіны нармальныя, і праграма, якая патрабуе першага, зламаецца на другім. Змена супастаўлення пасля перападключэння або пераключэння сеткі — не збой сервера: кліент адкрывае новы сокет, маршрутызатар выдае тое, што мае, а сервер бачыць новую крыніцу на тым жа слухачу. Збоем было б чакаць, што сервер прыме трафік, адрасаваны адвольнаму порту кліента.

Супольнасць OpenVPN атрымлівае такія паводзіны праз nobind, што дазваляе аперацыйнай сістэме выбраць лакальны порт; аддалены порт па-ранейшаму бярэцца з профілю. Яўнае прывязванне — свядомы выбар, а не патрабаванне пратаколу. Сервер працягвае прапаноўваць адзін канец, пакуль кліенты выбіраюць уласныя лакальныя ідэнтычнасці.

Пазначце слаі асобна ў запісе

Унутры тунеля ёсць другая размова з уласнымі партамі. Запыт HTTPS, які нясе тунель, мае мэту TCP 443, а знешняе шыфраванае злучэнне выкарыстоўвае UDP 1194, таму змена знешняга порта-крыніцы нічога не мяняе ва ўнутранай паслузе.

Нават на знешнім слаі пратакол мае значэнне. UDP 1194 і TCP 1194 — розныя канцы, і 'TCP'-слухач ніколі не атрымае дэйтаграму UDP, бо нумар супадае. Каб дакументаваць разгортванне, пазначце серверны слухач, кліенцкі сокет і пераўтвораную крыніцу як тры розныя рэчы і дадайце транспарт да кожнай.

Затым хай палітыка ідзе за ролямі. Сервер адкрывае патрэбны транспарт на сваім слухачу і па-ранейшаму аўтэнтыфікуе партнёра; фэйрвол кліента дапускае адказы на яго ўласны зыходны абмен, не публікуючы ўваходную паслугу. Фільтру без стану патрэбны яўна запісаны зваротны кірунак, і гэта практычная прычына, чаму адрозненне важнае па-за акуратнымі схемамі.

Падобныя артыкулы