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

Што звычайна апісвае заяўка

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

Тры назіранні розняцца тым, што яны могуць даказаць, а не толькі тым, што яны апісваюць.

ObservationWhat it describesWhat it cannot prove
An address on a local interfaceOne configured attachment: Wi-Fi, cellular or a tunnelThe source a remote site receives
A socket's local endpointThe binding used by that one connectionThe address after translation further along
The peer address at a serviceWhat arrived at that observation pointAny other interface on the phone

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

Што можа і не можа адказаць выклік сокета

На ўзроўні API getsockname паведамляе лакальную канчатковую кропку, якая цяпер прывязана да пэўнага сокета. Для злучанага сокета гэта крыніца, якую ядро абрала для гэтага злучэння, і гэта ўжо больш канкрэтна, чым любы спіс інтэрфейсаў. Гэта не пошук публічнага адраса, і выклік яго на несвязаным сокеце не кажа амаль нічога. Што б ён ні вярнуў, гэта можа быць перапісана пазней на шляху, таму толькі ўласнае назіранне службы мае вагу наконт таго, што служба атрымала.

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

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

Выбірайце назіранне, якое адпавядае пытанню

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

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

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

Назвы інтэрфейсаў — не дэтэктар

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

Называйце поле па назіранні, якое яно трымае. local_interface_address, socket_local_endpoint і service_observed_source няёмкія і адназначныя, а адназначнасць — гэта тое, што трэба, калі значэнне праз тыдзень трапіць у заяўку ў падтрымку. Адзін слупок з назвай device IP збярэ ўсе тры, а потым яму будуць давяраць як аднаму.

Трымайце ідэнтычнасць па-за слупком адраса

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

Калі хтосьці пытае, які адрас мае тэлефон, карысны адказ — гэта пытанне пра тое, якое злучэнне і які назіральнік. Азначэнне getsockname варта цытаваць для сярэдняга выпадку, бо яно вырашае пытанне сокета, не прэтэндуючы вырашыць два іншыя.

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

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