Android always-on VPN: endpoint аты эмне үчүн биринчи чечилет
Android туннель пайда боло электе эле трафикти блоктойт, бирок кардар өз endpointinin атын баары бир чечиши керек. Мына тартип жана тыгылып калган жер.
Телефон кайра жүктөлөт, always-on күйүк, «VPN жок туташууларды блоктоо» күйүк, бирок туннель эч качан көтөрүлбөйт. Эч нерсе туура эмес конфигурацияланган эмес: блоктоо өз ишин аткарып жатат жана кардардын өз endpointине жетүү аракети да ошого баш ийет. Endpoint аты туннель пайда боло электе, калган бардык колдонмолорго уруксат берилбеген учурда тармак менен сүйлөшүүгө уруксаты бар кардар тарабынан чечилиши керек. Кайсы компонент муну кылаарын жана кандай тартипте кылаарын түшүнүү ушул табышмакты конфигурация маселесине айландырат.
VPN куруучу чындыгында эмнени талап кылат
Android VPN колдонмосу платформага сервер дарегин бербейт. Ал жергиликтүү интерфейс курат: туннелдин даректери жана маршруттары, колдонмолор анын ичинде колдонууга тийиш болгон чечкичтер, анан establish() колдонмо чийки IP пакеттери катары окуган жана жазган файл дескрипторун кайтарат. Алыскы endpoint бул куруучуда такыр көрүнбөйт.
Бул негизги структуралык факт. Платформа tun интерфейсин түзүп, ага саясатты колдонот; колдонмо транспортту колдонуучу мейкиндигинде ишке ашырат, башкача айтканда endpoint атын чечүүнү жана шифрленген туташууну ачууну колдонмо өзү жасайт. Ошондуктан хост аты түрүндөгү endpoint мүмкүн — платформа аттарды колдогондуктан эмес, платформа endpointти эч качан көрбөгөндүктөн.
Куруучунун бир гана талаасы даректерди кабыл алат: DNS серверлери. Алар сандык чечкич даректери болушу керек, адатта оператор туннель аркылуу сурагысы келгендер. Бул талаа туннель көтөрүлгөндөн кийин колдонмолор сурамдарды кайда жөнөтөрүн сүрөттөйт. Ал кардар endpointти кантип табаары жөнүндө эч нерсе айтпайт жана ушул эки жөндөөнү бирдей деп кароо түшүнбөстүктүн башталышы.
Бир эмес, эки DNS суроосу
Биринчи суроо: туннель көтөрүлгөндөн кийин колдонмолор сурамдарды кайда жөнөтөт? Жооп — туннелдин ичиндеги чечкич дареги, tun интерфейси аркылуу жеткиликтүү жана түзүлүшү боюнча сандык.
Экинчи суроо: кардар өзүнүн endpointин ушул туннель пайда боло электе кантип табат? Бул издөө туннелден тышкары, негизги тармакта, кардардын процессинде жүрөт. Ал атты колдонсо болот жана түзмөк VPN жок жете алган чечкичти колдонушу керек.
| Stage | Who resolves | Path | Failure looks like |
|---|---|---|---|
| Endpoint lookup | The VPN app | Underlying network, protected socket | Never connects; no tunnel interface traffic |
| Peer authentication | Client and server | Tunnel transport | Connects then drops; certificate or key error |
| Private name lookup | Apps via the tunnel | Resolver inside the tun | Tunnel up, internal sites do not resolve |
Үч баскыч, үч башка белги. «Туташуу мүмкүн эмес» деген бир ката билдирүүсү аларды бириктирип жиберет, ошондуктан адамдар ошол талаа окула электе эле болуп жаткан маселени оңдоо үчүн DNS сервер талаасын оңдой башташат.
Bootstrap эмне үчүн тыгылып калышы мүмкүн
Always-on күйүк блоктоо менен VPN ичинде эмес трафик ташталат, анын ичинде VPNге ээ колдонмонун трафиги да. Чыгуу жолу ачык: колдонмо сокетте protect() чакырат, бул аны негизги тармакка байланыштырат, ошондуктан ал туннелди айланып өтүп, сыртка чыгууга уруксат алат. Ар бир VPN кардары муну өз транспорту үчүн кылышы керек, болбосо серверге эч качан жетпейт.
Эми endpoint атын билген жалгыз чечкич туннелдин ичинде болгон жайгаштырууну карап көрөлү. Кардарга атты чечүү үчүн туннель, туннелди куруу үчүн ат керек. Бул чыныгы циклдик көз карандылык жана аны эч бир кардар конфигурациясы чечпейт. Бул дизайн катасы, баг эмес.
Убакыт ошол эле көз карандылыкты жумшак формаларда көрсөтөт. Жүктөө учурунда, биринчи кулпу ачылганга чейин, түзмөктө азырынча жарактуу тармак болбошу мүмкүн; captive portal учурунда тармак бар, бирок порталдан башканын баарын блоктойт; Wi-Fiден уюлдук тармакка өткөндө корголгон сокеттин негизги тармагы өзгөрөт жана кардар муну байкап, кайра чечиши керек. Алардын ар бири bootstrap окуясы жана ар бирин түнкү 3тө тапкандан көрө атайын сынап көргөн жөн.
Эмне үчүн жоопту бекитүү чечим эмес
Азгырган айланып өтүү жолу — атты бир жолу чечип, алынган даректи сандык талаага кыстоо же аны ыңгайлаштырылган курулушка катуу коддоо. Ал иштеп жаткандай көрүнөт жана атты сүрөткө айландырат. Оператор endpointти жылдырганда — көчүрүү, anycast өзгөрүүсү, жаңы аймактык дарек — кардар эскисин чалууну улантат жана интерфейсте эч нерсе себебин түшүндүрбөйт.
DNS жазууларынын жашоо убактысы бар болушунун себеби — жооптор өзгөрүшү мүмкүн; кэштөө ушул мөөнөт менен аныкталат, түбөлүк эмес. Жоопту бекитүү атты даректен жакшыраак кылган механизмди таштайт, ошол эле учурда атты колдонуунун операциялык чыгымын сактайт.
Бекитүү адатта экинчи жаман адат менен кошо жүрөт: туташуу эми башкача ишке ашпагандыктан, инсандыкты текшерүүнү алсыздатуу. Сервердин инсандыгын текшерүү bootstrap маселесинин бөлүгү эмес жана аны алсыздатуу DNS ыңгайсыздыгын кармоо тобокелдигине алмаштырат.
Кайра жүктөөгө чыдаган долбоорлор
Туруктуу чечим кооз эмес. Корголгон сокеттерди туура ишке ашырган жана endpointин негизги тармакта чечкен кардарды колдонуңуз жана ага ачык жол менен же туннелге чейин жеткиликтүү чечкич аркылуу чечилүүчү endpoint атын бериңиз. Блоктоону күйүк калтырыңыз; DNS иштеши үчүн аны толук өчүрүү жайгаштыруу бар болушунун себеби болгон касиетти жок кылат.
Endpoint купуя бойдон калышы керек жерде платформа колдоно алган ачык bootstrap жолун камсыз кылыңыз — туннелсиз жеткиликтүү чечкич же оператор кармаган башкаруу туташуусу — жана бул өзгөчөлүктү кууш кармап, колдонуучу которгучуна эмес, саясатка таандык кылыңыз. Android VpnService документтери коргоо жана жашоо цикли боюнча платформа эмнени кепилдей турганынын маалымдамасы, жана VpnService.Builder маалымдамасы DNS талаасы сандык даректерди кабыл алаарын ырастайт.
Анан кайра жүктөөдөн кийинки жаңы туташууда үч баскычты тартиби менен текшериңиз: endpoint аты чечилет, туннель орнойт жана өнөктөш аутентификациядан өтөт, купуя ат туннелдин чечкичи аркылуу чечилет. Биринчи баскыч ишке ашпаса, кийинки эч нерсе иштебейт жана оңдоо bootstrap жолуна таандык — эч качан чечкич талаасына эмес.
- Endpointти чечүү колдонмонун ичинде, туннелден тышкары, корголгон сокетте жүрөт.
- Куруучудагы DNS талаасы туннел ичиндеги колдонмолор үчүн, кардардын өз endpointи үчүн эмес.
- Туннель аркылуу гана жеткиликтүү чечкич — жай башталыш эмес, тыгын.
- Кайра жүктөөдөн кийин endpointти, аутентификацияны жана купуя издөөнү өз-өзүнчө сынаңыз.