Извоз VPN-а на Android-у: шта се заиста преноси на нови телефон
Извоз VPN-а на Android-у преноси подешавања и понекад кључ, али никада ауторизацију уређаја. Проверите шта се заиста преноси пре него што обришете стари телефон.
Извоз VPN профила са Android-а изгледа као корак прављења резервне копије, а мени који га нуди не чини ништа да исправи тај утисак. Оно што добијете је улаз за parser, кључ који оперативни систем можда никада неће вратити и ауторизација издата баш том телефону. Раздвојите та три дела и појављује се корисно питање: који део још недостаје на новом уређају?
Датотека је лакши део. Друга два одлучују да ли ће миграција успети.
Шта извезени профил заиста садржи
Отворите датотеку у уређивачу текста пре него што јој поверујете. OpenVPN профил је мали конфигурациони језик: remote, proto, data-ciphers и често уграђени блокови <ca>, <cert>, <key> или <tls-crypt> које клијент предаје свом TLS стеку. WireGuard конфигурација је равнија: [Interface] држи PrivateKey и Address, затим по један [Peer] за сваку крајњу тачку који носи PublicKey, AllowedIPs и Endpoint. IKEv2 долази као .mobileconfig са речницима терета уместо блокова кључева.
Ништа од тог текста није акредитив само по себи. Акредитив је приватни кључ, а сваки формат га или лепи унутра или упућује на алијас који се разрешава само унутар клијента који га је створио.
Где кључ заиста живи на Android-у
Android чува податке апликација под /data/data/<package>, читљиве само том UID-у апликације. Не постоји подржан начин да копирате приватни директоријум друге апликације са телефона без root-а, а adb backup је престао бити општи одговор након што га је Android 12 укинуо и клијенти почели декларисати allowBackup="false". Зато извоз из Android клијента значи оно што тај клијент имплементира, а не копију датотечног система.
Слој идентитета налази се испод апликације. Ако је клијент увезао ваш кључ у Android Keystore, материјал се тамо генерише или умотава, а каснији извози могу носити референцу на Keystore алијас уместо бајтова. Кључеви са хардверском подршком направљени су тако да их чак ни апликација власник не може прочитати, како описује Keystore documentation, па се профил који упућује на тај алијас чисто увози на истом телефону и не успева свуда другде.
То није покварен извоз. То је својство које је платформа замолена да пружи.
Шта профил не може пренети
Поставите објекте према ономе што ће одредиште прихватити:
| Објекат | Преноси се? | Зашто |
|---|---|---|
| Протокол и крајња тачка | Да, ако одредишни клијент то подржава | Обичан текст у профилу |
| CA сертификат и провера имена хоста | Обично | Јавни материјал, али име хоста и даље мора да одговара сертификату |
| Клијентски сертификат | Да, осим ако није везан по уређају | Сертификати су преносиви; издавалац одлучује колико уређаја сме користити један |
| Приватни кључ | Само ако је генерисан изван Keystore-а | Кључеви са хардверском подршком не могу се извести, само заменити |
| Налог, MFA, SSO сесија | Не | Токени истичу и остају везани за уређај који их је добио |
| Руте, DNS и обухват апликација | Само као конфигурациони текст | Android их примењује при повезивању кроз VpnService.Builder |
| Листа апликација за split-tunnel | Ретко | Називи пакета разликују се између уређаја, а листа је стање клијента |
Два реда стварају већину забуне. Кључ генерисан на уређају и означен као неизвозив заиста нестаје са подацима апликације, па је замена нови кључ плус сертификат издат за њега. Сесијски токен копиран на нови телефон обично умире при првом освежавању, што изгледа као неуспешан увоз.
Увоз је парсирање, а затим захтев за пристанак
На страни примаоца увоз је парсирање након којег следи упис. Клијент чита конфигурацију, проверава да ли постоји сваки наведени блок, а затим уписује дефиницију тунела у свој sandbox, због чега датотека коју сте изабрали из Преузимања није оно што се потом повезује.
Затим долази корак ауторизације који ниједна датотека не може прескочити. Android захтева да апликација позове VpnService.prepare() и добије ваш пристанак пре него што успостави тунел, па свеже увезен профил још једном приказује системски дијалог. Затим се тунел изричито гради кроз addAddress, addRoute, addDnsServer и addAllowedApplication или addDisallowedApplication за усмеравање по апликацијама. Ништа од тога не произлази из крајње тачке, па исти профил може произвести различит скуп ефективних рута у два клијента.
Подешавања заснована на сертификатима додају још једно рачвање. Када сервер изда сертификат одређеном уређају, као што то чине MDM и SCEP упис, његово поновно коришћење на другом телефону или ради док сервер не наметне једну сесију по идентитету или не успе на TLS руковању. Проверите политику издаваоца пре него што планирате поновну употребу.
Проверите нови уређај пре него што умирујете стари
Држите стари телефон повезан док нови не прође нешто боље од зелене иконе. Потврдите излазну адресу са новог уређаја и DNS resolver који је заиста користио. Ако је split tunneling важан, покрените апликацију која треба да заобиђе тунел и ону која не треба, па погледајте која долази до вашег ISP-а.
Једна провера решава питање излазне адресе. Отворите https://ifconfig.me у прегледачу телефона, затим покрените curl -s https://ifconfig.me са лаптопа на истој Wi-Fi мрежи и упоредите оба одговора са адресом коју је доделио ваш провајдер.
Тек тада умирујете стари идентитет и то кроз издаваоца: опозовите сертификат или уклоните уређај са налога. Брисање датотеке из Преузимања ништа не завршава, јер два уређаја са истим сертификатом изгледају једнако у дневнику сервера.
Ако се извоз покаже непреносивим, решење је нова регистрација, а не јавни конфигурациони пакет. Затражите профил за други уређај или генеришите пар кључева на новом телефону и пошаљите CSR; спорије је и то је пут који издавалац подржава.
Прођите контролну листу пре него што било шта обришете: нови уређај се повезује, излазна адреса и DNS се подударају, обухват по апликацијама је онакав какав сте намеравали, стари идентитет је опозван, а свака конфигурациона датотека коју сте задржали налази се у шифрованом складишту.