Android'den VPN profili dışa aktarmak bir yedekleme adımı gibi görünür ve bunu sunan menü bu izlenimi düzeltmek için hiçbir şey yapmaz. Elinizde kalan şey bir parser girdisi, işletim sisteminin asla geri vermeyebileceği bir anahtar ve tam o telefona verilmiş bir yetkilendirmedir. Bu üçünü ayırın ve faydalı soru ortaya çıkar: yeni cihazda hangi parça hâlâ eksik?

Dosya kolay kısımdır. Diğer ikisi geçişin işe yarayıp yaramayacağını belirler.

Dışa aktarılan profilde gerçekte ne var

Güvenmeden önce dosyayı bir metin düzenleyicide açın. OpenVPN profili küçük bir yapılandırma dilidir: remote, proto, data-ciphers ve çoğu zaman istemcinin TLS yığınına verdiği satır içi <ca>, <cert>, <key> veya <tls-crypt> blokları. WireGuard yapılandırması daha düzdür: [Interface] içinde PrivateKey ve Address bulunur, ardından her uç nokta için PublicKey, AllowedIPs ve Endpoint taşıyan bir [Peer] gelir. IKEv2 ise anahtar blokları yerine yük sözlükleriyle .mobileconfig olarak gelir.

Bu metinlerin hiçbiri tek başına bir kimlik bilgisi değildir. Kimlik bilgisi özel anahtardır ve her biçim onu ya satır içine yapıştırır ya da yalnızca onu oluşturan istemcinin içinde çözülen bir takma ada işaret eder.

Anahtar Android'de gerçekte nerede yaşar

Android uygulama verilerini /data/data/<package> altında tutar ve bunları yalnızca o uygulamanın UID'si okuyabilir. Root yapılmamış bir telefondan başka bir uygulamanın özel dizinini kopyalamanın desteklenen bir yolu yoktur ve adb backup, Android 12 onu kaldırdıktan ve istemciler allowBackup="false" bildirmeye başladıktan sonra genel bir yanıt olmaktan çıktı. Yani bir Android istemcisinden dışa aktarma, o istemcinin uyguladığı şey demektir, dosya sisteminin kopyası değil.

Kimlik katmanı uygulamanın altındadır. Bir istemci anahtarınızı Android Keystore'a aktardıysa malzeme orada üretilir veya sarılır ve sonraki dışa aktarmalar baytlar yerine bir Keystore takma adına referans taşıyabilir. Donanım destekli anahtarlar, sahibi uygulamanın bile okuyamayacağı şekilde oluşturulur, Keystore documentation bunu açıklar, bu nedenle o takma ada işaret eden bir profil aynı telefonda temiz biçimde içe aktarılır ve her yerde başarısız olur.

Bu bozuk bir dışa aktarma değil. Platformdan istenen özellik bu.

Bir profilin taşıyamadığı şeyler

Nesneleri hedefin kabul edeceği şeyle karşılaştırın:

NesneGeçer mi?Neden
Protokol ve uç noktaEvet, hedef istemci destekliyorsaProfildeki düz metin
CA sertifikası ve ana bilgisayar adı denetimiGenellikleGenel malzeme, ancak ana bilgisayar adı yine de sertifikayla eşleşmeli
İstemci sertifikasıEvet, cihaz başına bağlı değilseSertifikalar taşınabilir; birini kaç cihazın kullanabileceğine veren karar verir
Özel anahtarYalnızca Keystore dışında üretildiyseDonanım destekli anahtarlar dışa aktarılamaz, yalnızca değiştirilebilir
Hesap, MFA, SSO oturumuHayırBelirteçler sona erer ve onları alan cihaza bağlı kalır
Rotalar, DNS ve uygulama kapsamıYalnızca yapılandırma metni olarakAndroid bunları bağlanırken VpnService.Builder üzerinden uygular
Bölünmüş tünel uygulama listesiNadirenPaket adları cihazlar arasında farklıdır ve liste istemci durumudur

Karışıklığın çoğuna iki satır neden olur. Cihazda üretilen ve dışa aktarılamaz olarak işaretlenen anahtar gerçekten uygulama verileriyle birlikte kaybolur, bu yüzden yerine yeni bir anahtar ve onun için verilmiş bir sertifika geçer. Yeni telefona kopyalanan oturum belirteci genellikle ilk yenilemede ölür, bu da başarısız bir içe aktarma gibi okunur.

İçe aktarma bir ayrıştırmadır, ardından bir izin istemidir

Alıcı tarafta içe aktarma, ardından kayıt gelen bir ayrıştırmadır. İstemci yapılandırmayı okur, başvurulan her bloğun var olduğunu denetler ve sonra tünel tanımını kendi sanal alanına yazar; bu yüzden İndirilenler'den seçtiğiniz dosya sonradan bağlanan şey değildir.

Sonra hiçbir dosyanın atlayamayacağı bir yetkilendirme adımı gelir. Android, tünel kurmadan önce uygulamanın VpnService.prepare() çağırmasını ve onayınızı almasını ister, bu yüzden yeni içe aktarılmış bir profil sistem iletişim kutusunu yine bir kez gösterir. Ardından tünel açıkça addAddress, addRoute, addDnsServer ve uygulama başına yönlendirme için addAllowedApplication veya addDisallowedApplication üzerinden kurulur. Bunların hiçbiri bir uç noktadan kaynaklanmaz, bu yüzden aynı profil iki istemcide farklı bir etkin rota kümesi üretebilir.

Sertifika tabanlı kurulumlar bir çatal daha ekler. Sunucu belirli bir cihaza sertifika verdiğinde, MDM ve SCEP kaydının yaptığı gibi, ikinci telefonda yeniden kullanım ya sunucu kimlik başına tek oturum dayatana kadar çalışır ya da TLS el sıkışmasında başarısız olur. Yeniden kullanımı planlamadan önce verenin ilkesini denetleyin.

Eskiyi devreden çıkarmadan önce yeni cihazı doğrulayın

Yeni telefon yeşil bir simgeden daha iyi bir şeyi geçene kadar eski telefonu bağlı tutun. Yeni cihazdan çıkış adresini ve gerçekte kullandığı DNS çözümleyicisini doğrulayın. split tunneling önemliyse, tüneli atlaması gereken bir uygulamayı ve atlamaması gereken bir uygulamayı başlatın, sonra hangisinin sağlayıcınıza ulaştığına bakın.

Bir denetim çıkış adresini belirler. Telefon tarayıcısında https://ifconfig.me açın, ardından aynı Wi-Fi'daki bir dizüstü bilgisayardan curl -s https://ifconfig.me çalıştırın ve iki yanıtı sağlayıcınızın atadığı adresle karşılaştırın.

Ancak o zaman eski kimliği devreden çıkarın ve bunu veren aracılığıyla yapın: sertifikayı iptal edin veya cihazı hesaptan çıkarın. İndirilenler'den bir dosya silmek hiçbir şeyi bitirmez, çünkü aynı sertifikayı taşıyan iki cihaz sunucu günlüğünde aynı görünür.

Dışa aktarma taşınamaz çıkarsa çözüm, genel bir yapılandırma paketi değil yeni bir kayıttır. İkinci cihaz için profil isteyin veya yeni telefonda anahtar çiftini oluşturup CSR'yi gönderin; daha yavaş, ve verenin desteklediği yol budur.

Bir şeyi silmeden önce kontrol listesini çalıştırın: yeni cihaz bağlanıyor, çıkış adresi ve DNS eşleşiyor, uygulama başına kapsam amaçladığınız gibi, eski kimlik iptal edilmiş ve sakladığınız her yapılandırma dosyası şifreli depoda duruyor.

İlgili makaleler