Pantaila batek beste modu batera jokatu behar du tunela aktibo dagoenean, eta ez dago hori esaten dizun deirik. Hori da bidaltze-muga: macOS-en framework publiko batek ere ez du jakinarazten edozein VPN konektatuta dagoen, eta iOS-en egoera konfigurazioa instalatu zuen aplikazioarena da. Beheko egiaztapenek muga horretatik bidal dezakezun zerbaitetara eramaten zaituzte, eta edozeinek amaitu dezake bilaketa goiz.

1. egiaztapena: galderari erantzun dakioke behintzat?

Sandboxak galdera erabakitzen du edozein APIk baino lehen. Hirugarren baten prozesuak ezin du beste hornitzaile baten luzapena zerrendatu, eta ezin du luzapen horren konfigurazioa irakurri ere, beraz ez dago galdetzeko objektu onarturik.

Edozein saihesbide horma berberarekin topo egiten du. Interfaze-zerrendek, scutil --nc list eta sistemaren konfigurazioaren irakurketa zuzenek sandboxak atxikitzen dituen baimenak behar dituzte edo Applek inoiz agindu ez zuen portaeraren mende daude. Planak horietako bat behar badu, arazoa plana da. Dokumentatu gabeko xehetasun baten gainean eraikitako funtzio bat entrega-datadun laguntza-txartel bat da.

2. egiaztapena: zure aplikazioak tunela bera kudeatzen du?

Hala bada, erantzun onartua duzu zure konfiguraziorako. Kargatu hobespenak, kudeatu errorea, gero irakurri egoera eta harpidetu aldaketetara, polling-a egin beharrean:

vpnManager.loadFromPreferences { error in
    // handle a load failure before reading status
}

NotificationCenter.default.addObserver(
    forName: .NEVPNStatusDidChange,
    object: nil,
    queue: nil
) { note in
    let status = (note.object as? NEVPNConnection)?.status
}

Izan zehatza honek zer itzultzen duen: instalatu duzun tunelaren egoera. Beste bezero bat exekutatzen duen erabiltzailea deskonektatuta agertuko da, eta hori ez da zure kodeko akats bat. Erabaki zure funtzioak bi galdera horietako zein egiten duen benetan, erantzunaren gainean eraiki aurretik.

3. egiaztapena: zer esango lizuke heuristika batek benetan?

Oso kopiatua den ikuspegiak sistemaren proxy hiztegiari bere kapsulatutako sarrerak eskatzen dizkio eta gakoak irakurtzen ditu, kasualitatez interfaze-izenak direnak:

let settings = CFNetworkCopySystemProxySettings()?.takeRetainedValue() as NSDictionary?
let scoped = settings?["__SCOPED__"] as? [String: Any]
let names = scoped?.keys ?? []

tap, tun, ppp, ipsec edo utun bezalako aurrizkiarekin hasten den gako batek tunel-kapsulatutako interfaze bat dagoela adierazten du. Izen osoa bat etortzeak berehala huts egiten du, iOS 12 utun1 eta utun2-rekin iritsi zelako eta profil batzuk ipsec4, ppp0 edo utun0 gisa agertzen direlako. Alderatu aurrizkiak horren ordez.

Hala ere, izen batek ez du jaberik identifikatzen. Sistemaren funtzioek eta beste hornitzaileen luzapenek ere utun interfazeak sortzen dituzte, eta bat egon daiteke zure trafikoaren ezer eramaten ez duela. Irakurri hori inguruan tunel-formako zerbait dagoelako arrasto gisa, ez gehiago. Faltsu positibo bat merkea da hemen funtzio bakarra baldintzatzen baduzu, eta garestia saioa hasteko pantaila baldintzatzen baduzu.

4. egiaztapena: helburua proba dezakezu horren ordez?

Aplikazioak barne-zerbitzu bat eskuragarri dagoen jakin behar badu soilik, probatu zerbitzu hori. Denbora-mugarekin egindako proba labur batek funtzioak benetan mendeko duen galderari erantzuten dio, eta lanean jarraitzen du erabiltzaileak bezeroa aldatzen duenean edo tunelak forma aldatzen duenean.

Eskuragarritasuna zure bideari buruzko behaketa bat da. Interfaze-izen bat zure bidearen ondoan dagoen zerbaiti buruzko inferentzia da, eta horregatik heuristikak eztabaidak sortzen ditu errore-txostenetan eta probak frogak sortzen ditu. Proba huts egiten badu erabiltzaileak VPN-a piztuta dagoela dioenean, orain bide zehatza duzu arazteko: izenen ebazpena, ibilbidea edo zerbitzuaren baimena.

5. egiaztapena: plataformak behar duzuna inposa dezake?

Baldintza tunelatik ezer ihes ez dadin bermea denean, profila da horren tokia, ez detektorea. includeAllNetworks aktibatzeak iOS 14 edo berriago batean tunel osoaren konfigurazioan plataformaren portaera aldatzen du, zure aplikazioari inferiarazi beharrean. Banderina NEVPNProtocol erreferentzian dokumentatuta dago.

Hori beste erantzun-mota bat da: inposizioa behaketaren ordez. Gainera, kontrolatzen dituzun profilei baino ez zaie aplikatzen, beraz ez dio laguntzen beste baten tunela zaintzen duen kontsumo-aplikazio bati.

6. egiaztapena: egin hutsegitea seguru eta behatzeko modukoa

Itzali tunela behar duen gaitasuna soilik eta utzi aplikazioaren gainerakoa erabilgarri. Ziur ez dagoenean interfaze osoa ezkutatzen duen detektore batek eten bat sortzen du inoiz aurreikusi ez duzun izen bat erabiltzen duen tunelarentzat. Itzuli portaera kontserbadorearekin: tokiko funtzioek lanean jarraitzen dute eta tunela benetan behar duen urruneko deia baino ez da desgaitzen. Aukera hori produktu-erabakia da, eta heuristikaren ondoan idaztea merezi du.

Erregistratu behatu duzuna: interfaze-izenak, plataformaren bertsioa eta proba baten emaitza. Horrek hurrengo txostena eztabaidatik egiaztapen bihurtzen du. Gero hobetsi deklarazio onartu bat duzun lekuan, konfigurazio kudeatu batek asmoa modu esplizituan eraman dezakeelako eta izenak aztertzeko arrazoi gehiena kenda dezakeelako.

1etik 5era bitarteko egiaztapenek erantzun onarturik gabe utzi bazintuzten, bidali proba eta izendatu emaitza zintzotasunez. Dokumentatutako ahalegin onenaren seinalea produktu-erabaki hobea da hurrengo bertsioan hausten den API pribatu bat baino.

Erlazionatutako artikuluak