Δευτέρα 18 Απριλίου 2011

Android Cisco IPSec VPN

Μια και χάλασε το iPhone 4 που έχω και θα το έστελνα για service εντώς εγγύησης αποφάσισα να αγοράσω ένα οικονομικό κινητό Android μέχρι να έρθει το iPhone 4 πίσω. Αυτό θα μου παρείχε τη δυνατότητα να μπορώ να συνδέομαι ανά πάσα στιγμή στα συστήματα που διαχειρίζομαι (POS/Servers/Routers/Switches) όπως έκανα και με το iPhone (κάτι που λόγω δουλειάς είναι αναγκαίο μια και είμαι on call όλη τη μέρα, κάθε μέρα)

Οι ανάγκες μου είναι σχετικά απλές, να συνδέομαι μέσω IPSec VPN στο γραφείο και μετά με να μπορώ να χρησιμοποιώ VNC/SSH/RDP clients.

Εκ πρώτης όψεως δεν ήταν και κάτι τραγικό και το Android θα υποστήριζε εγγενώς το IPSec VPN ενώ τα clients υπήρχαν άλλα προς αγορά και άλλα δωρεάν στο Android Market. Έτσι τελικά κατέληξα στη συσκευή Samsung Galaxy Mini S5570.

Αφού συγρόνισα τις επαφές κι έκανα τις αρχικές ρυθμίσεις στο κινητό προσπάθησα να αγοράσω το RealVNC Viewer και το iTap RDP τα οποία έχω και στο iPhone, μάταια. Έμαθα ότι τελικά η Google ΔΕΝ έχει προς πώληση εφαρμογές στην Ελλάδα και στην Κύπρο και για να αγοράσει κανείς πρέπει να χρησιμοποιήσει το πρόγραμμα Market Enabler με το οποίο στην ουσία κάνεις spoof τον carrier σε κάποιον από χώρα όπου δραστηριοποιείται το Android Market διαφορετικά περιορίζεσαι μόνο στις δωρεάν εφαρμογές.

Για να τρέξει το Market Enabler πρέπει να έχεις κάνει root το κινητό σου κάτι για το S5570 μπορεί να γίνει με το πρόγραμμα Superoneclick το οποίο, αφού κάνει root το κινητό, εγκαθιστά το πρόγραμμα Superuser το οποίο στη συνέχεια καλείται από όποιο πρόγραμμα χρειάζεται πρόσβαση super user (το γνωστό su για τους φίλους του Unix/Linux).

Έτσι, με το Market Enabler, κατάφερα να αποκτήσω το RealVNC που χρειαζόμουν. To iTap RDP δεν ήταν δυστοιχώς διαθέσιμο στο ιταλικό Android Market, και όπως παρατήρησα μετά δεν μου επέτρεπε να αλλάξω εκ νέου σε Android Market άλλης χώρας.

Στη συνέχεια δοκίμασα να ρυθμίσω το VPN όμως διαπίστωσα ότι εργοστασιακά το Android ΔΕΝ είναι συμβατό με IPSec VPN συμβατό με Cisco. Υποστηρίζει PPTP το οποίο όμως είναι μη ασφαλές και εκτός αυτού το μπλοκάρει και MTN Κύπρου με αποτέλεσμα να μην είναι εφικτό με αυτό να συνδεθείς μέσω 3G ή EDGE. Επίσης υποστηρίζει L2TP VPN, ένα ασφαλές πρωτόκολο VPN το οποίο όμως δεν είναι υλοποιημένο στο δίκτυό μου και δεν άξιζε τον κόπο για 2 - 3 εβδομάδες που θα έχω το Android να ασχοληθώ με αυτό.

Ευτυχώς, όντας το Android μια ανοιχτή πλατφόρμα, υπάρχουν χρήστες που έχουν δημιουργήσει οι ίδιοι μια εφαρμογή με όνομα VPN Connections η οποία επιτρέπει τη δημιουργία IPSec στο Android η οποία όμως για να λειτουργήσει χρειάζεται ένα tunneling module (tun.ko) το οποίο δεν είναι παρόν στην υλοποίηση Android στο Samsung Galaxy Mini S5570 (και σε αρκετά άλλα κινητά Android όπως διαπίστωσα).

Κατά συνέπεια, και αφού δεν βρήκα το tun.ko αναγκάστηκα να κατεβάσω το Android SDK, το source code για τον πυρήνα του Linux για το S5570 από τη Samsung, να τραβήξω ένα config file από το κινητό, να τροποποιήσω το .config και Makefile για να κάνω enable το αντίστοιχο module και να δηλώσω που βρήσκεται ο compiler κλπ κλπ και να κάνω compile τα modules.
(Για τους χρήστες Mac όπως εγώ πρέπει να γίνουν εγκατάσταση και οι βιβλιοθήκες libelf μέσω του port install)

Μετά έκανα mount το /system στη συσκευή μου με read-write access, δημιούργησα στο /system/lib το φάκελο modules που δεν υπήρχε και ανέβασα το tun.ko σε αυτόν. Από console έτρεξα το insmod /system/lib/modules/tun.ko και αφού δεν ανέφερε σφάλμα δοκίμασα το VPN Connections το οποίο και δούλεψε τελικά.

Κατά τη γνώμη μου είναι μεγάλη παράβλεψη που το Android δεν υποστηρίζει εγγενώς το IPSec της Cisco και η διαδικασία παράκαμψης αυτής της έλλειψης είναι μια αρκετά μεγάλη πρόκληση ακόμα και για έμπειρους χρήστες. Έχοντας εμπειρία σε Linux από το 1999 περίπου κι έχοντας περάσει από αρκετά Kernel compilations για να ενεργοποιήσω κάρτες δικτύου ή κάρτες ήχου ξόδεψα περίπου 20 ώρες για να βρώ τις απαραίτητες πληροφορίες, να κατεβάσω τα απαραίτητα προγράμματα και τον πηγαίο κώδικα για να προσθέσω αυτή τη δυνατότητα στο κινητό μου. Πλέον όντας επαγγελματίας κι όχι φοιτητής είμαι της λογικής ότι τα πράγματα πρέπει να είναι απλά και να δουλεύουν. Δεν θέλω να χάνω άλλο το χρόνο μου προσπαθώντας να τα κάνω να δουλέψουν αλλά αξιοποιώντας τις λειτουργίες τους κι εκεί είναι που η Apple με κερδίζει...

Επειδή ίσως να φανεί χρήσιμο και σε κάποιον άλλο:
Πατήστε εδώ για λήψη του tun.ko για Samsung Galaxy Mini S5570
Πατήστε εδώ για οδηγίες για compiling του module tun.ko σε HTC Hero τις οποίες χρησιμοποίησα ως βάση για να κάνω την αντίστοιχη διαδικασία για το S5570
Πατήστε εδώ για το Site της Samsung όπου δημοσιεύει τον Open Source Κώδικα για όλες τις συσκεύες της και φιλτράρετε το μοντέλο σας.

Δεν υπάρχουν σχόλια: