Ο μύθος λέει ότι το L2TP στο Android είναι ένα ακόμη πράγμα που μπορεί να ξεκινήσει ένα σενάριο shell: πρόσθεσε μια διαδρομή, κάλεσε την παλιά υπηρεσία, τέλος. Δεν μπορεί να είναι, γιατί τέσσερα διαφορετικά επίπεδα πρέπει να συμφωνήσουν πριν ένα τούνελ μεταφέρει ένα πακέτο. Το επίπεδο IPsec προστατεύει τη διαδρομή, το L2TP μεταφέρει τη συνεδρία, το PPP διαπραγματεύεται τη ζεύξη και το Android πρέπει να καταχωρίσει το αποτέλεσμα ως VPN γύρω από το οποίο μπορεί να δρομολογήσει. Το έχω δει να επιχειρείται δύο φορές με αντιγραμμένες εντολές, και στις δύο η διαδρομή υπήρχε ενώ τίποτα δεν ήταν κρυπτογραφημένο.

Τι καταφέρνει πραγματικά μια αλλαγή διαδρομής

Η προσθήκη μιας διαδρομής αποφασίζει πού πάει το επόμενο πακέτο. Δεν διαπραγματεύεται μια συσχέτιση ασφαλείας, δεν ανοίγει συνεδρία L2TP και δεν εκτελεί την ανταλλαγή PPP που παράγει διεύθυνση, ομότιμο και ρυθμίσεις DNS. Σε ένα τηλέφωνο το ορατό αποτέλεσμα είναι κίνηση που φεύγει από λάθος διαδρομή, ή φεύγει και πεθαίνει, χωρίς κατάσταση τούνελ πουθενά.

Το ίδιο ισχύει για μια κλήση υπηρεσίας αντιγραμμένη από παλαιότερη έκδοση. Η εσωτερική υδραυλική VPN του Android δεν είναι δημοσιευμένο API αυτοματισμού, και μια αριθμημένη συναλλαγή από άλλη έκδοση μπορεί να πετύχει διαφορετική λειτουργία ή να απαιτεί προνόμια που το σενάριο δεν έχει. Ένας αυτοματισμός που κουβαλά κωδικό δεν πρέπει ποτέ να βασίζεται σε μαντεμένες εσωτερικές παραμέτρους, γιατί η αποτυχία είναι είτε σιωπηλό no-op είτε μισοδημιουργημένο προφίλ που κανείς δεν καθαρίζει.

Τέσσερις ιδιοκτήτες, και το σενάριο δεν είναι κανένας

Πάρ' τους με σειρά. Το IPsec εγκαθιστά και συντηρεί την προστατευμένη διαδρομή και πιστοποιεί τους ομοτίμους. Το L2TP μεταφέρει τη συνεδρία πάνω της, και η στρωμάτωση είναι ο λόγος που το πρότυπο τα αντιμετωπίζει ως ξεχωριστούς μηχανισμούς και όχι ως ένα πρωτόκολλο. Μέσα σε αυτό, το PPP διαπραγματεύεται τις παραμέτρους ζεύξης που θα χρησιμοποιήσει ο πελάτης. Το Android κατέχει μετά την πλευρά της πλατφόρμας: τη καταχωρισμένη διεπαφή VPN, το εύρος ανά εφαρμογή, την κατάσταση always-on και τον κύκλο ζωής που αποφασίζει τι γίνεται όταν σκοτωθεί η εφαρμογή.

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

Γιατί ούτε ένας daemon είναι σύντομος δρόμος

Η εκκίνηση ενός προνομιακού daemon Linux στη συσκευή μοιάζει με το κομμάτι που λείπει, και συχνά όντως σηκώνει τούνελ. Αυτό που δεν κάνει είναι να καταχωρίσει αυτό το τούνελ στο Android. Η διεπαφή υπάρχει μέσα στον πυρήνα, αλλά η επιλογή VPN της πλατφόρμας, η δρομολόγηση ανά εφαρμογή, η πολιτική always-on και ο κύκλος ζωής δεν τη γνωρίζουν, και οι αλλαγές διαδρομής και DNS του ίδιου του daemon ανταγωνίζονται τον διαχειριστή δικτύου για τους ίδιους πίνακες.

Το αποτέλεσμα είναι μια σύνδεση που δουλεύει για την κίνηση του daemon και μυστηριωδώς όχι για την εφαρμογή που σε ένοιαζε, ή μια που επιβιώνει μέχρι το σύστημα να επανεκτιμήσει τα δίκτυά του. Κανένα από τα δύο δεν είναι σφάλμα της πλατφόρμας· είναι το όριο ανάμεσα στο να κατέχεις ένα socket και στο να κατέχεις την υποδομή VPN.

Πώς μοιάζουν οι υποστηριζόμενες διαδρομές

Αν ο οργανισμός μπορεί να περάσει σε προφίλ που παρέχει το ίδιο το Android, η διαδρομή της πλατφόρμας είναι η έντιμη. Από το API 30, το VpnManager υποστηρίζει παροχή και έλεγχο προφίλ VPN της πλατφόρμας, με ροή εξουσιοδότησης συνδεδεμένη με την εφαρμογή που καλεί. Δεν είναι μετατροπέας L2TP: το μοντέλο προφίλ που παρέχει για IKEv2 δεν μεταφράζει υπάρχουσα διαμόρφωση L2TP, και η αλλαγή πρωτοκόλλου είναι μετανάστευση, όχι μετονομασία. Ταυτότητες, διαδρομές, ιδιωτικό DNS και άδειες πρόσβασης πρέπει να μεταφερθούν σκόπιμα.

Αν η υπηρεσία πρέπει να μείνει L2TP/IPsec, ο υποστηριζόμενος συνδυασμός είναι ένας πελάτης και μια έκδοση λειτουργικού που ο πάροχος τεκμηριώνει πραγματικά, και το συμβόλαιο αυτοματισμού του αν υπάρχει. Όταν δεν υπάρχει τεκμηριωμένος έλεγχος χωρίς επιτήρηση, η σωστή απάντηση είναι μια υποστηριζόμενη χειροκίνητη σύνδεση και όχι ένα εύθραυστο προνομιακό σενάριο που τυχαίνει να δουλεύει σε μία έκδοση.

Τι κάνει ένας σωστός αυτοματισμός

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

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

  • Το IPsec και το PPP τα χειρίζεται ο πελάτης, όχι οι διαδρομές του σεναρίου.
  • Η σύνδεση εμφανίζεται στην κατάσταση VPN της πλατφόρμας, ώστε το εύρος ανά εφαρμογή και το always-on να ισχύουν γι' αυτήν.
  • Καμία εσωτερική κλήση υπηρεσίας, αριθμός συναλλαγής ή μαντεμένη παράμετρος δεν κουβαλά διαπιστευτήριο.
  • Αποτυχία σε οποιοδήποτε βήμα δεν αφήνει μισοκαταχωρισμένο προφίλ πίσω.

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