Зашто ваша iPhone апликација приказује један IP, а сервер бележи други
Адреса интерфејса, крајња тачка сокета и извор који сервер бележи одговарају на различита питања. VPN додаје контекст; не чини од њих један број.
У подршку долазе тикети у којима пише да апликација приказује једну адресу док је сервер забележио другу, а затим питају која од две лаже. Ниједна; то су два посматрања две различите ствари. Адреса везана за интерфејс, адреса везана за сокет и изворна адреса коју види удаљена услуга одговарају на три одвојена питања. VPN додаје мрежни контекст телефону и не сажима те три у један број на нивоу уређаја. Прочитајте називе поља у тикету пре него што прочитате адресе.
Шта тикет обично описује
Замислите телефон на Wi-Fi мрежи са подигнутим тунелом. Wi-Fi интерфејс држи LAN адресу, интерфејс тунела држи додељену унутрашњу адресу, а захтев који излази кроз тунел стиже до јавне услуге са оног извора који преживи било какво превођење на путу. Апликација која исписује унутрашњу адресу и сервер који бележи преведени извор обоје извештавају тачно, и те две вредности се никада неће поклопити.
Три посматрања разликују се по томе шта могу да докажу, а не само по томе шта описују.
| Observation | What it describes | What it cannot prove |
|---|---|---|
| An address on a local interface | One configured attachment: Wi-Fi, cellular or a tunnel | The source a remote site receives |
| A socket's local endpoint | The binding used by that one connection | The address after translation further along |
| The peer address at a service | What arrived at that observation point | Any other interface on the phone |
Држите ту табелу поред кода који ове вредности уписује у тикет, јер је већина забуне овде замена колона, а не мрежни квар.
На шта позив сокета може и не може да одговори
На нивоу API-ја getsockname пријављује локалну крајњу тачку која је тренутно везана за одређени сокет. За повезан сокет то је извор који је језгро изабрало за ту везу, што је већ конкретније од било ког списка интерфејса. То није претрага јавне адресе, а позивање на неповезаном сокету не каже вам готово ништа. Шта год да врати, то може касније на путу бити преписано, па је само сопствено посматрање услуге меродавно за оно што је услуга примила.
На Apple платформама страна интерфејса има одвојену површину: подешавања тунела наводе адресе додељене интерфејсу тунела. Њихово читање каже како је тунел конфигурисан и не каже којим путем је ишао дати захтев, јер рутирање и правила по апликацији то одлучују за сваку везу.
Подељени тунел чини разлику видљивом. Један захтев може изаћи кроз тунел, док следећи, усмерен ка другом одредишту или другој фамилији адреса, не излази, па два резултата исте апликације у размаку од секунди могу бити искрена и различита.
Изаберите посматрање које одговара питању
Бирајте намерно уместо да инструментујете све. За оно што види бекенд, бележите извор на бекенду, а где напред стоји обрнути прокси, читајте адресу клијента из заглавља за прослеђивање које ваше распоређивање заиста поставља, а не из било чега што је клијент послао.
Да ли је тунел конфигурисан, читајте са интерфејса. Да ли га је саобраћај ове апликације користио, сазнајте тако што ћете послати саобраћај из те апликације на одредиште које контролишете и упоредити извор на оба краја.
Правила по апликацији заслужују своју реченицу. Резултат прегледача је доказ о том прегледачу, а управљани тунел по апликацији може да стави две апликације на исти телефон на различите путеве у истом тренутку. Провера покривености значи слање саобраћаја из дотичне апликације, у дотичној фамилији адреса.
Називи интерфејса нису детектор
Не користите назив интерфејса ни као проверу VPN-а. Називи нису јавни уговор, а телефон може да држи неколико веза док само једна од њих носи ваш захтев.
Назовите поље по посматрању које држи. local_interface_address, socket_local_endpoint и service_observed_source су неспретни и недвосмислени, а недвосмисленост је оно што желите када вредност недељу дана касније заврши у тикету подршке. Једна колона названа device IP покупиће сва три и затим ће јој се веровати као да је једна.
Држите идентитет изван колоне адресе
Заједнички излаз VPN-а није идентитет корисника, а приватна адреса није приступни податак. Оба описују пут, а не особу, и третирање било чега од тога као аутентификације претвара случајну рутирачку грешку у одлуку о овлашћењу.
Када неко пита коју адресу има телефон, користан одговор је питање о томе која веза и који посматрач. Дефиницију getsockname вреди цитирати за средњи случај, јер решава питање сокета без претварања да решава друга два.
Затим запишите коју од три ваше производ заиста треба да приказује, и обришите друге две из интерфејса.