Τρία διαφορετικά προϊόντα ανταποκρίνονται στο όνομα VPN στο iOS και δεν μοιράζονται ένα API. Το προσωπικό VPN κινείται στις ενσωματωμένες μεταφορές IPsec και IKEv2 του συστήματος. Μια προσαρμοσμένη σήραγγα εκτελεί το δικό σας πρωτόκολλο μέσα σε μια επέκταση δικτύου. Και ένα προφίλ διαμόρφωσης διαμορφώνει οποιοδήποτε από τα δύο και μπορεί να προσθέσει συμπεριφορά κατά ζήτηση. Η επιλογή με βάση τη μεταφορά με την οποία πρέπει να μιλήσετε είναι ταχύτερη από την επιλογή με βάση όποιο σεμινάριο μεταγλωττίστηκε πρώτο.

Εκτελέστε τους ελέγχους παρακάτω με τη σειρά, γιατί κάθε βήμα προϋποθέτει ότι το προηγούμενο παρήγαγε έγκυρη διαμόρφωση.

Βήμα 1: επιλέξτε με βάση τη μεταφορά

Αν ο διακομιστής είναι IKEv2 ή IPsec σε στυλ Cisco, το NEVPNManager αρκεί και οι μεταφορές του συστήματος έρχονται δωρεάν. Αν ο διακομιστής μιλά OpenVPN, WireGuard ή οτιδήποτε άλλο, το NEVPNManager δεν μπορεί να βοηθήσει: δεν έχει γάντζο για πρωτόκολλο τρίτου. Αυτή η περίπτωση χρειάζεται το NETunnelProviderManager με πάροχο σήραγγας πακέτων που υλοποιεί το πρωτόκολλο. Ένα προφίλ μόνο διανέμει διαμόρφωση και δεν μπορεί να προσθέσει μεταφορά που δεν έχει το λειτουργικό σύστημα.

Το PPTP δεν είναι στόχος στα σημερινά συστήματα. Το IPsec με κοινό μυστικό εξακολουθεί να περιμένει το όνομα ομάδας στο remoteIdentifier, ένα στοιχείο κλειδοθήκης που κρατά το μυστικό και εκτεταμένη ταυτοποίηση όταν ο διακομιστής ζητά όνομα χρήστη. Κάθε κομμάτι που λείπει εμφανίζεται ως το ίδιο γενικό σφάλμα διαμόρφωσης, οπότε προσθέστε τα όλα πριν εντοπίσετε οποιοδήποτε άλλο πρόβλημα.

Βήμα 2: τηρήστε τη σειρά αποθήκευση, φόρτωση, εκκίνηση

Το NEVPNManager γράφει στις προτιμήσεις, τις διαβάζει πίσω και μόνο τότε ξεκινά. Συμπληρώστε τα αντικείμενα πρωτοκόλλου και διαχειριστή, καλέστε saveToPreferences, καλέστε loadFromPreferences και καλέστε startVPNTunnel από τον χειριστή ολοκλήρωσης της φόρτωσης. Η εκκίνηση πριν επιστρέψει η φόρτωση παράγει σφάλμα μη έγκυρης διαμόρφωσης, κωδικό 1 στο NEVPNErrorDomain, σε διαμόρφωση που κατά τα άλλα είναι σωστή.

Η μορφή είναι αρκετά σύντομη για να κρατηθεί σε ένα σημείο:

manager.protocolConfiguration = proto
manager.isEnabled = true
manager.saveToPreferences { }
manager.loadFromPreferences { manager.connection.startVPNTunnel() }

Το startVPNTunnel επιστρέφει όταν γίνει δεκτό το αίτημα, όχι όταν σηκωθεί η σήραγγα. Παρατηρήστε το NEVPNStatusDidChange και διαβάστε το connection.status για την πραγματική κατάσταση. Μια εφαρμογή που υποθέτει επιτυχία στο σημείο κλήσης αναφέρει συνδεδεμένο VPN ενώ η επέκταση ακόμη διαπραγματεύεται. Η κατάσταση σύνδεσης είναι φυσιολογική για μια στιγμή· μια κατάσταση που δεν την εγκαταλείπει ποτέ είναι η αστοχία που αξίζει καταγραφή.

Βήμα 3: δώστε στη διεργασία του παρόχου ό,τι χρειάζεται

Μια προσαρμοσμένη μεταφορά εκτελείται σε ξεχωριστή διεργασία με δικό της αναγνωριστικό πακέτου και δικό της δικαίωμα. Και η εφαρμογή-περιέκτης και ο πάροχος χρειάζονται το δικαίωμα επέκτασης δικτύου κατά την υπογραφή, και μια κατασκευή Developer ID εκτός App Store πρέπει ακόμη να το φέρει στο προφίλ παροχής. Ένα δικαίωμα που λείπει μοιάζει με σφάλμα πρωτοκόλλου, γιατί η επέκταση απλώς δεν ξεκινά.

Δεν υπάρχει δημόσιος περιγραφέας υποδοχής για δανεισμό. Το NEPacketTunnelProvider σας δίνει NEPacketTunnelFlow με read, write και cancel, και κώδικας που απλώνεται σε ιδιωτικές διαδρομές κλειδιών σπάει μεταξύ εκδόσεων. Ο πάροχος συνεχίζει να εκτελείται όσο η εφαρμογή είναι στο παρασκήνιο, οπότε ο περιέκτης δεν χρειάζεται λειτουργία παρασκηνίου για αυτό.

Βήμα 4: η λειτουργία κατά ζήτηση είναι σύνολο κανόνων, όχι διακόπτης

Το isOnDemandEnabled μόνο οπλίζει τους κανόνες· το NEOnDemandRuleConnect και τα αδέλφια του αποφασίζουν πότε σηκώνεται η σήραγγα. Ένας κανόνας αξιολόγησης σύνδεσης με URL δοκιμής αξίζει όσο αξίζει αυτό το URL. Αν η δοκιμή απαντήσει χωρίς τη σήραγγα, ο κανόνας συμπεραίνει ότι το ιδιωτικό δίκτυο είναι ήδη προσβάσιμο και δεν συνδέεται ποτέ, οπότε στρέψτε τον σε κάτι που απαντά μόνο από μέσα.

Το πάντα-ενεργό είναι ξεχωριστή υπόσχεση. Χρειάζεται εποπτευόμενη συσκευή και διαχειριζόμενο προφίλ, και ένας μη εποπτευόμενος χρήστης μπορεί να αφαιρέσει προφίλ όποτε θέλει. Μην παραδώσετε σχέδιο που εξαρτάται από το πάντα-ενεργό, εκτός αν ο στόλος είναι υπό εποπτεία.

Βήμα 5: αποδείξτε τη διαδρομή, όχι την ετικέτα

Η σάρωση για διεπαφές tun, tap, ppp ή ipsec αποδεικνύει ότι ένα VPN είναι διαμορφωμένο, όχι ότι το αίτημά σας το χρησιμοποίησε. Το NWPathMonitor με usesInterfaceType(.other) λέει ότι υπάρχει διαθέσιμη εικονική διεπαφή, και ένας χειριστής βιωσιμότητας μπορεί να δοκιμάσει έναν κεντρικό υπολογιστή. Κανένα από τα δύο δεν αποδεικνύει τη διαδρομή εξόδου, οπότε συνδυάστε τα με αίτημα σε πόρο που μόνο η σήραγγα μπορεί να φτάσει. Τα ονόματα διεπαφών είναι διαγνωστικό βοήθημα, ποτέ πύλη στην οποία θα πρέπει να διακλαδίζεται η λογική της εφαρμογής.

Για επιτόπιο έλεγχο, συγκρίνετε τη δημόσια διεύθυνση με και χωρίς τη σήραγγα και φέρτε μια σελίδα μόνο εσωτερική. Μια κλήση κατάστασης μπορεί να αναφέρει συνδεδεμένο ενώ ο πάροχος διαπραγματεύεται, οπότε αφήστε το αποτέλεσμα του πόρου να αποφασίσει και αντιμετωπίστε την κατάσταση ως υποστηρικτική απόδειξη.

Σχετικά άρθρα