вторник, 19 апреля 2011 г.

openvpn android

Занимался я тут задачей настройки openvpn на андроидном телефоне. Даже htc legend в офисе под это дело прикупили :) Ну и разобрался. Хоть и пришлось повозиться со всякими мелочами. Запишу на будущее проблемы, чтобы помнить.

Сначала надо было получить на телефоне рута. Это не проблема для легенды (хотя перед этим приносили вилдфайр - так для него с последней прошивкой это таки проблема). Я прошил сразу прошивку с рутом, установленным busybox-ом и установленными модулями tun/tap для openvpn-а.
После этого ставим пакеты openvpn-installer и openvpn-settings. Запускаем инсталлер и нажимаем в нем "инсталл". Вот тут позникла первая проблема - openvpn-installer не мог установить openvpn. Точнее он его якобы ставил, но при следующем запуске показывал, что нету, не установлен openvpn. Выбирал разные комбинации, куда ставить и где лежат ifconfig/route - не помогало. По логам получалось, что инсталлер не может записать в /system/xbin/openvpn - вылезала ошибка CANNOT_ALLOCATE_MEMORY, хотя место там было. Оказалось, в этой прошивке надо дополнительно разрешить запись в system  - команда "aufs --enable". После этого установка прошла успешно.
Далее возникла проблема с тем, что с помощью openvpn-settings соединение устанавливалось, но интерфейс не поднимался, IP-адрес не назначался и маршруты не прописывались. После долгих копаний и поисков удалось установить, что несмотря на то, что инсталлер спрашивает, где лежат ifconfig/route, openvpn их не использует. И потому не может потом запустить интерфейс - в логах была ругань на параметры openvpn - ifconfig и route. Решается тоже просто - надо было при установке openvpn указать, что ifconfig/route лежат в /system/xbin/bb, потом руками создать папку /system/xbin/bb и сделать в ней два симлинка - "ln -s /system/xbin/ifconfig /system/xbin/bb/ifconfig" и "ln -s /system/xbin/route /system/xbin/bb/route". После этого этот этап тоже прошел успешно - все поднималось и работало нормально.
Следующая проблема была в том, что не переопределялись ДНС-ы в системе. Параметр конфига на сервере openvpn "push "dhcp-option DNS x.x.x.x"" игнорировался и андроид продолжал использовать прежние ДНС-ы, которые в моем случае были недоступны. Решилось тоже просто - долгий тап в openvpn-settings на конфиге нужного соединения, далее свойства соединения, далее ставим галку "использовать ДНС-ы ВПН-а" и прописываем чуть ниже нужные нам ДНСы. И все - после этого все работало на ура.

1 комментарий:

  1. Привет.
    У меня на 4.1 чуть другая картина с ДНС. /etc/resolv.conf меняется, но все равно не используется. Только вот как ты сказал - ручками надо прописать.

    ОтветитьУдалить