Το Android OpenVPN δεν προσθέτει διαδρομή χωρίς διεύθυνση τούνελ
Οι πελάτες OpenVPN του Android δεν μπορούν να προσθέσουν διαδρομές αν το τηλέφωνο δεν έχει διεύθυνση τούνελ. Δείτε ποιος την εκχωρεί, ποια φίλτρα pull την πετούν και πότε πρέπει να γράψετε εσείς μία.
Το προφίλ σας OpenVPN για Android αποτυγχάνει να προσθέσει διαδρομή, επειδή το τηλέφωνο δεν έχει διεύθυνση στην εικονική διεπαφή, οπότε δεν υπάρχει τίποτα στο οποίο να δείχνει μια διαδρομή. Οι διαδρομές απαντούν μόνο στο πού πρέπει να πάνε τα πακέτα. Η διεύθυνση τούνελ απαντά ποιο είναι το τηλέφωνο μέσα στο τούνελ, και ο πελάτης πρέπει να δώσει μία πριν μπορέσει να υπάρξει η διεπαφή. Περάστε τους τέσσερις ελέγχους παρακάτω με τη σειρά και σταματήστε στην πρώτη αποτυχία, γιατί η επεξεργασία διαδρομών πριν υπάρξει η διεύθυνση κρύβει το πραγματικό πρόβλημα.
Διαβάστε την αποτυχία με τη σειρά που την εκτελεί ο πελάτης
Το VpnService.Builder του Android κρατά τις δύο έννοιες χωριστά: το addAddress() βάζει διεύθυνση στη διεπαφή που χτίζει η εφαρμογή, το addRoute() προσθέτει πρόθεμα προορισμού και το establish() αρνείται να δημιουργήσει τη διεπαφή μέχρι να προστεθεί τουλάχιστον μία διεύθυνση. Ένας πελάτης OpenVPN αντιστοιχίζει το προφίλ και τις επιλογές που σπρώχνει ο διακομιστής ακριβώς σε αυτές τις κλήσεις, οπότε μια σύνδεση που δεν αναλύει ποτέ διεύθυνση δεν μπορεί καθόλου να χτίσει τη διεπαφή.
Γι αυτό η γραμμή καταγραφής που διαβάζετε μπορεί να αναφέρει διαδρομή ενώ η αιτία βρίσκεται ένα βήμα νωρίτερα. Ο πελάτης φτάνει στο στάδιο της διαδρομής μόνο αφού υπάρξει η διεπαφή· χωρίς διεύθυνση, η κλήση διαδρομής αποτυγχάνει αμέσως ή δεν εκτελείται ποτέ. Όταν το αρχείο καταγραφής λέει ότι δεν μπορεί να προσθέσει διαδρομή, ξεκινήστε από τη διεύθυνση και όχι από τη σύνταξη της διαδρομής.
Έλεγχος 1: βάζει ο διακομιστής διεύθυνση στην απάντηση;
Για μια δρομολογημένη υπηρεσία OpenVPN η διεύθυνση προέρχεται από τη δεξαμενή του διακομιστή ή από εκχώρηση ανά πελάτη, και η τοπολογία καθορίζει τη μορφή της. Σε διακομιστή OpenVPN 2.4 ή νεότερο, μια υπηρεσία τοπολογίας subnet μοιάζει έτσι:
topology subnet
server 10.8.0.0 255.255.255.0
client-config-dir ccd
Με αυτή τη μορφή ο διακομιστής σπρώχνει κάτι σαν ifconfig 10.8.0.6 255.255.255.0. Μια παλαιότερη εγκατάσταση topology net30 σπρώχνει αντίθετα διεύθυνση ομοτίμου, για παράδειγμα ifconfig 10.8.0.6 10.8.0.5, οπότε ένα προφίλ που μεταφέρεται ανάμεσα στα δύο μοντέλα μπορεί να φαίνεται σωστό ενώ κουβαλά λάθος μάσκα δικτύου.
Αναζητήστε στο αρχείο καταγραφής σύνδεσης του πελάτη το σύνολο επιλογών που σπρώχτηκε. Αν δεν περιέχει καθόλου γραμμή ifconfig, ο διακομιστής δεν έστειλε ποτέ διεύθυνση ή ο πελάτης απέρριψε την επιλογή. Σε διακομιστή που χρησιμοποιεί client-config-dir, το αρχείο με όνομα από το common name του πιστοποιητικού πρέπει να υπάρχει και να φέρει την εκχώρηση:
# ccd/phone-anna
ifconfig-push 10.8.0.6 255.255.255.0
Έλεγχος 2: κρατά ο πελάτης τη διεύθυνση που του δόθηκε;
Ένα φίλτρο που είναι πολύ ευρύ είναι η δεύτερη συνηθισμένη αιτία. Το pull-filter υπάρχει στο OpenVPN 2.4 και νεότερο, και όταν πολλά φίλτρα ταιριάζουν στην ίδια επιλογή κερδίζει το τελευταίο που ταιριάζει, οπότε ένα καταληκτικό catch-all αφαιρεί τη διεύθυνση χωρίς σφάλμα:
# removes every pushed option, including the address
pull-filter ignore "ifconfig"
pull-filter ignore "route"
Περιορίστε το φίλτρο στην επιλογή που θέλετε πραγματικά να φύγει και αφήστε τη διεύθυνση ήσυχη:
# keeps the pushed address, drops one unwanted LAN route
pull-filter ignore "route 10.60.0.0"
Η συμβουλή να απενεργοποιήσετε όλα τα pull έρχεται συνήθως από κάποιον που θέλει να ξεφορτωθεί μία μόνο διαδρομή. Το route-nopull είναι ο στενότερος διακόπτης: κρατά το ifconfig και τις άλλες επιλογές που σπρώχνονται ενώ απορρίπτει διαδρομές και επιλογές τύπου DHCP. Χρησιμοποιήστε το όταν αυτό θέλετε πραγματικά, και απαντήστε χωριστά στο ερώτημα της διεύθυνσης.
Έλεγχος 3: είναι δική σας η διεύθυνση για να τη γράψετε;
Η χειροκίνητη διευθυνσιοδότηση είναι νόμιμη μόνο όταν ο διαχειριστής σας δίνει την τιμή. Αν γράψετε μία μόνοι σας, πρέπει να προέρχεται από το subnet του πελάτη VPN, να είναι μοναδική μεταξύ ενεργών συνεδριών και να ταιριάζει με την τοπολογία που τρέχει ο διακομιστής. Η αντιγραφή της διεύθυνσης μιας γέφυρας επιφάνειας εργασίας ή ενός κεντρικού υπολογιστή στο απομακρυσμένο LAN αποτυγχάνει και στα δύο: το τηλέφωνο θα διεκδικούσε διεύθυνση που υπάρχει ήδη αλλού, και η πύλη δεν θα είχε δρόμο επιστροφής προς αυτήν.
Το πρόθεμα του απομακρυσμένου LAN σε μια διαδρομή είναι προορισμός, ποτέ η ταυτότητα του τηλεφώνου. Μια διαδρομή για 10.60.0.0/24 λέει φτάσε αυτό το δίκτυο μέσω του τούνελ· δεν λέει τίποτα για το ποια διεύθυνση 10.60.0.x πρέπει να έχει το τηλέφωνο, και το τηλέφωνο δεν πρέπει να έχει καμία από αυτές. Οι στατικές εκχωρήσεις ανήκουν στην πλευρά του διακομιστή, όπου δεν μπορούν να συγκρουστούν με τη δυναμική δεξαμενή.
Δύο συνεδρίες σε μία ταυτότητα εκθέτουν την ίδια σύγκρουση. Αν το ίδιο πιστοποιητικό συνδεθεί δύο φορές και ο διακομιστής σπρώξει μία σταθερή διεύθυνση και στις δύο, η δεύτερη συνεδρία διπλασιάζει την πρώτη, και ξεχωριστές ταυτότητες ή ξεχωριστές εκχωρήσεις είναι η λύση αντί για αλλαγή στην πλευρά του πελάτη.
Έλεγχος 4: κρατά κάτι άλλο τη θέση του τούνελ;
Το Android επιτρέπει μία ενεργή υπηρεσία VPN κάθε φορά. Μια άλλη εφαρμογή VPN, ή μια καταχώρηση always-on VPN που έμεινε ενεργή για προφίλ που δεν δουλεύει πια, μπορεί να πάρει αυτή τη θέση πριν ο πελάτης OpenVPN καλέσει το establish(). Τότε η διεπαφή δεν εμφανίζεται ποτέ παρόλο που το προφίλ είναι έγκυρο, οπότε αποσυνδέστε το άλλο VPN, απενεργοποιήστε τη ρύθμιση always-on και επανασυνδεθείτε πριν αγγίξετε το προφίλ.
Μια υπηρεσία που επιμένει σε γεφύρωση Ethernet είναι το άλλο αδιέξοδο. Μια εφαρμογή Android χωρίς root μπορεί να δημιουργήσει τούνελ IP, όχι γεφυρωμένο τμήμα Ethernet, οπότε καμία διεύθυνση που γράφετε δεν θα κάνει έναν διακομιστή dev tap να δουλέψει· ο διαχειριστής πρέπει να προσφέρει δρομολογημένη υπηρεσία. Όταν αναφέρετε το πρόβλημα, συμπεριλάβετε όνομα και έκδοση πελάτη, το σύνολο επιλογών που σπρώχτηκε, την τοπολογία και το ακριβές βήμα όπου θα έπρεπε να είχε εμφανιστεί η διεύθυνση.
Αν περνούν και οι τέσσερις έλεγχοι και η διεύθυνση υπάρχει, είναι μοναδική και σωστά μασκαρισμένη, το ερώτημα της διαδρομής γίνεται το συνηθισμένο: ποια προθέματα εξουσιοδοτεί ο διακομιστής και πώς πρέπει ο πελάτης να τα περιορίζει. Σημειώστε τη διεύθυνση τούνελ, τη μάσκα δικτύου και την τοπολογία πριν αλλάξετε οτιδήποτε άλλο, γιατί αυτές οι τρεις τιμές είναι ό,τι χρειάζεται ο διαχειριστής για να συγκρίνει με την όψη του διακομιστή.