Андрей Смирнов
Время чтения: ~12 мин.
Просмотров: 18

OpenVPN на Android: прозрачное переключение между WiFi и «Мобильными данными» без разрыва соединений

openVPN%2Bandroid.png Использовать OpenVPN подключение на смартфоне или планшете очень просто. Рассмотрим этот процесс поближе. И так, мы настроили OpenVPN сервер в роутере и создали тоннель на ПК. Рассмотрим в каких случаях нам может понадобится VPN тоннель на смартфоне или планшете.Во первых, если вы убежденный параноик то использование VPN тоннеля поможет избежать просмотра/сбора истории сайтов, которые вы посещаете или ваших интересов или воровства ваших паролей в публичных местах (кафе, барах, вокзалах и т.д.) при использовании открытой /гостевой точки доступа. Возможно вы просто не захотите оставлять историю своих посещений в логах чужого роутера, тогда этот вариант для вас. Во вторых, если ваш провайдер мобильного интернета запрещает посещать какие-либо ресурсы (как в моем случае), а домашний интернет не имеет таких ограничений то использование OpenVPN на мобильном устройстве позволит вам посещать любые сайты в обход таких ограничений. Для начала нам понадобится официальный клиент: OpenVPN Connect. Запущенное приложение выглядит так:Screenshot_2014-10-08-09-50-52.png OpenVPN Connect сообщает о том, что для подключения к серверу требуется конфигурационный файл с расширением .ovpn и предлагается импортировать его из меню. Так же нам предлагают еще два альтернативных способа использования OpenVPN в виде платных сервисов с готовыми серверами за счет которых, видимо, и существует сам проект. Для подключения мобильного устройства к собственному серверу OpenVPN необходимо иметь:

  1. конфигурационный файл (.ovpn);
  2. клиентский ключ (client.key);
  3. клиентский сертификат (client.crt);
  4. доверенный сертификат (ca.crt);
  5. ключ Диффи-Хельмана (dh1024.pem).

Все эти файлы можно сложить в папку на SD карте или во внутреннее хранилище устройства. В таком случае, при утере устройства клиентский сертификат придется отозвать, да бы им не смог воспользовался злоумышленник. Или же необходимо шифровать содержимое SD карты, на которой хранятся ключи и сертификаты. Альтернативной возможностью является использование хранилища формата PKCS#12 в виде одного запароленого файла, в котором будут находится все перечисленные выше ключи и сертификаты. Недостатком этого способа является то, что ваше Android устройство потребует обязательного использования защищенного экрана блокировки (PIN-код, графический ключ, и др.). Для тех, кто как и я, не использует защиту на экране блокировки этот способ будет не удобен. Рассмотрим первый вариант настройки. Запускаем OpenVPN Connect и открываем меню, в котором выбираем пункт Import:Screenshot_2014-10-08-09-51-02.png Далее выбираем Import Profile from SD card:Screenshot_2014-10-08-09-51-10.png На следующем этапе переходим в каталог с необходимыми файлами и выбираем свой .ovpn:Screenshot_2014-10-08-09-53-34.png Приложение создаст профиль, который можно будет переименовать вызвав меню по длинному нажатию, и будет готово к подключению:Screenshot_2014-10-08-09-54-31.png После нажатия кнопки Connect появится предупреждение системы о том, что OpenVPN Connect пытается установить VPN-соединение. На этом этапе необходимо поставить галку и нажать Ok. Должен заметить, такое предупреждение будет появляться каждый раз после перезагрузки устройства. Это особенности системы безопасности Android.Screenshot_2014-10-08-09-54-53.png Успешно установленное соединение в OpenVPN Connect будет выглядеть следующим образом:Screenshot_2014-10-08-09-55-02.png Еще добавлю несколько слов о настройках. Здесь можно установить галку на пункте Battery Saver которая позволит приложению ставить VPN-соединение на паузу, когда экран выключен, если в этом есть необходимость.Screenshot_2014-10-08-12-15-37.png Спасибо за внимание!Здравствуйте, разрешите поделиться своим опытом. Есть приложения критичные к разрывам связи, переподключение происходит мучительно и вообще не всегда. Поставил перед собой цель, сделать прыжки маршрутов и физических подключений прозрачными, что бы связь была постоянной и TCP коннект не рвался. И поможет в этом старый, добрый и ламповый «openvpn». Но установка и настройка — тема давно избитая, трогать её, здесь не планируется.

Что нам нужно:
  • Сервер Linux с постоянным IP (vps, vds, dedic или просто домашний)
  • Openvpn на сервере и клиенте, настроенные на работу по UDP.
  • iproute2 — собственно для фокуса нужна работающая утилита ip на Android.
  • Так же потребуется внести изменения в исходный код openvpn-settings c последующий сборкой apk.
Приступим

Начнем с правки «openvpn-settings». Суть в том, что при любом изменении в сетевой конфигурации нативному демону openvpn посылается команда SIGUSR1, что заставляет его отключаться и подключаться по новой. Для наших целей это вред, но нам все равно желательно иметь возможность выполнять некоторые действия при изменении сетевой конфигурации. Кто-то скажет, но ведь есть persist-tun. Отвечаю, работает не так, как хочется, openvpn дергает скрипты «лежать-вставать» каждый раз, когда приходит SIGUSR1. И в принципе отличить по имеющимся переменным перезапуск от старта, без выкрутасов почти не возможно. Это подрывает всю затею, а хочется просто и надежно. Поэтому мы заменим отправку SIGUSR1 на вызов shell скрипта. Скачиваем исходники командой hg clone code.google.com/p/android-openvpn-settings Открываем файл srcdeschaeuffelhutandroidopenvpnserviceManagementThread.java Находим функцию public void sendSignal(int s) её мы и будем редактировать. Комментируем отправку SIGUSR1 и вставляем вызов нашего скрипта с правами рут. Файл скрипта у нас будет называться точно так же как и файл подключения, но дополненный расширением sh. Должно получится так:

case SIGUSR1: //sendCommand( new SimpleCommand( "signal SIGUSR1" ) );          new Shell( "OpenVPN-Settings-ip-route",  String.format(                                    "/system/bin/sh %s.sh",                                    Util.shellEscape(mDaemonMonitor.mConfigFile.getAbsolutePath())                                  ), Shell.SU ).run(); break; 

Всё, можно собирать, подписывать, устанавливать. Перед установкой обязательно деинсталлируйте старый «openvpn-setting» из системы. Далее проверим конфигурации подключения openvpn.

Сервер

На сервере требуется внести директиву float, поскольку мы будем менять физическое соединение, а с ним и IP. Так же сервер должен транслировать внутренний адрес нашего клиента во внешнюю сеть. Для настройки этого мне удобней использовать директивы up и down. up «/bin/sh /etc/openvpn/androidupdown» down «/bin/sh /etc/openvpn/androidupdown» Скрипт должен быть примерно таким:

NATGW="1.2.3.4"          # ip с которого будет натится клиент NATDEV="eth0"               # интерфейс с которого клиент получает доступ в общую сеть NATNET="10.9.8.0/24" # vpn подсеть, которую надо транслировать во внешний мир  sysctl -w net.ipv4.ip_forward=1  ACT="A" [ "down" = "$script_type" ] && ACT="D"  iptables -t nat -$ACT POSTROUTING -s $NATNET -o $NATDEV -j SNAT --to-source $NATGW  
Клиент

Во первых надо убрать директиву redirect-gateway, если она есть. Но задать up и down с указанием скрипта, который выполнит настройку маршрутов. Если вы помните, мы условились, что имя файла будет повторять имя конфигурации с добавление sh. Да, мы будем вызывать один и тот же скрипт и из демона, и из монитора. Если конфигурация называется «testconfig.ovpn», то пусть будет так: up «/system/bin/sh /sdcard/openvpn/testconfig.ovpn.sh» down «/system/bin/sh /sdcard/openvpn/testconfig.ovpn.sh» Cкрипт

 # Общая часть export ANDROID_PROPERTY_WORKSPACE=12,66560   # Может зависеть от устройства export PATH=/system/bin:/system/xbin:$PATH  setprop net.dns1 8.8.8.8     # всем известный DNS setprop net.dns2 8.8.4.4  # Сработает только при вызове демоном openvpn. if [ "init" = "$script_context" ]; then    ACT="add"   [ "down" = "$script_type" ] && ACT="del"    ip route $ACT throw $remote_1 table 100   ip route $ACT default dev $dev table 100    ip rule $ACT table 100 pref 1000  fi  

Здесь стоит немного пояснить. Мы создаем альтернативную таблицу маршрутизации под номером 100 в которой указываем шлюзом по умолчанию vpn туннель. И добавляем правило маршрутизации, которое заворачивает весь трафик в нашу таблицу под номером 100, раньше чем он попадет в основную таблицу под именем main. В альтернативной таблице есть маршрут, который выталкивает пакеты предназначенные для сервера, обратно в цепочку правил. Далее они попадут в основную таблицу маршрутизации. Там они смогут найти основной маршрут физического соединения. Но, а если не найдут, такое случатся во время реконнектов, то это не страшно. Openvpn может потерпеть некоторое время, но разумеется не вечно. Только сообщения в логах, напомнят об отсутствии связи непродолжительное время. Не забывайте скрипты должны заканчиваться переводом строки. Для разрешения запуска скриптов на Android, необходимо установить «Built-in + script» в «Preferences» которые вызываются по долгому тапу на подключении. Теперь можно пробовать. В результате тестирования оказалось, что некоторые программы сами проверяют состояние сети и пытаются переподключаться во время любых изменений. Тут либо просить авторов исправить ситуацию. Либо самостоятельно де компилировать и исправлять. В любом случае закрытие TCP сессии происходит, не по таймауту, а так как положено. Буду рад любой критике и замечаниям. Желаю стабильного коннекта!

Для работы ОпенВПН нужно будет импортировать специальные конфигурационные файлы. Их можно скачать бесплатно или создать свой собственный vpn сервер.

  1. Бесплатные — эти файлы доступны в свободном доступе. Большой минус их в том, что ими пользуются много людей. Поэтому их скорость, долговечность и безопасность желает ждать лучшего. Плюс в том, что они бесплатны и вы можете без труда выбрать любую страну.
  2. Собственный сервер VPN. Вы покупаете свой собственный виртуальный сервер и создаёте на нём свой VPN. Никто кроме Вас не имеет к нему доступа (если вы сами не создадите клиентов). Здесь и скорость хорошая и работает пока вы сами его не удалите. Как создать свой собственный VPN сервер вы можете прочитать здесь.

Содержание

Где бесплатно скачать OpenVPN Config file

Скачать бесплатные файлы конфигурации можно здесь. Обратите внимание, что нужно выбирать сервер, где есть «OpenVPN Config file». Так же стоит обратить внимание на скорость и отдалённость сервера. Чем ближе находиться сервер, тем быстрее будет работать VPN. Для скачивания нажимаем на ссылку «OpenVPN Config file»

На следующей странице нажимаем на первую надпись, которая даст файл конфигурации для UDP протокола или можно взять классический TCP.

2019-07-19_13-22-49.jpgДолжен скачаться файл следующего типа: vpngate_vpn129648839.opengw.net_udp_1194.ovpn (имя файла у Вас будет другим). Но обязательно должно быть расширение .ovpn

Установка и настройка на Windows

Скачивание и установка

Для начало нужно скачать и установить программу OpenVPN. Скачивать лучше с официального сайта: Скачать OpenVPN

2019-07-19_12-52-07.jpgВ процессе установки на вопрос «Установить программное обеспечение для данного устройства» нажимаем установить.

2019-07-19_12-56-46.jpgПо завершение установки, запускаем программу. В правом нижнем углу (в системном трее) появиться значок с программой.

2019-07-19_13-06-24.jpg

Подключение

Файл с конфигурациями нужно положить в папку программы OpenVPN, сделать этом можно двумя способами:

  1. Скопировать файл вручную в папку: C:UsersUserOpenVPNconfig (по умолчанию)
  2. Нажать в трее на иконку с программой правой кнопкой мышки и выбрать меню «Импорт конфигурации», далее указать файл через проводник.

Программа полностью готова к работе. Теперь еще раз кликаем правой кнопкой мыши в трее по значку и выбираем пункт «Подключиться». После этого вылезет меню с «непонятными» строчками — это означает, что программа подключается к выбранному серверу.

2019-07-19_13-40-41.jpg

После успешного подключения появится информация о том, что подключение прошло успешно, а иконка программы в трее приобретет зеленый цвет 2019-07-19_13-39-26.jpg

Частые вопросы

Можно ли использовать сразу несколько «прокси файлов»?

Можно скачивать и импортировать несколько конфигурационных файлов. Тогда при подключении появится возможность подключиться к тому VPN, который вам нужен.

2019-07-19_13-53-50.jpg

Ошибка во время подключения OpenVPN.

Если в процессе подключения мы получили ошибку, то нужно попробовать подключиться еще раз. Если на второй попытке произошла та же ошибка, то скорее всего прокси не рабочий. Нужно скачать новый файл конфигурации, после чего заново подключиться.

Как удалить конфиг файлы из OpenVPN клиента

Бывает такое, что при использовании разных конфиг файлов, их очень много накапливается. Получается длинный список, в котором можно легко запутаться. Для того чтобы удалить старые, не нужные файлы, перейдите в Настройки ⇒ Расширенные. Здесь вы увидите путь к папке, где хранятся файлы конфигурации. Перейдите в неё и удалите всё ненужное.

2020-01-14_16-21-37.jpg

Подключение VPN на iPhone (ios)

Нужно скачать и установить клиент «OpenVPN», скачать его можно здесь: скачать OpenVPN для ios

Установив клиент, нужно в него перенести файл настроек. Сделать это можно несколькими способами:

  1. С помощью мессенджеров (viber, wathsapp, telegram). Просто отправьте себе на телефон сообщение, в котором прикрепите файл с настройками.
  2. Подключить телефон к компьютеру и перекинуть файл с настройками.

Первый способ.

Вы отправляет файл на телефон и открываете его. Затем в правом верхнем углу нажимаете иконку и листая в право нажимаете «ещё»

2020_02_10_11_06_img_9538.jpg

Затем нажимаем скопировать в «OpenVPN»

2020_02_10_11_09_img_9539.jpg

Второй способ

Подключаем iPhone к компьютеру или ноутбуку с помощью usb кабеля. Запускаем программу iTunes. Выбираем пункт «Общие файлы». В списке приложения нажимаем на OpenVPN. Перетаскиваем файл в окно «Документы OpenVPN».  Нажимаем внизу кнопку «Готово».

2020-02-10_10-12-01.jpg

Активируем настройки

После импорта настроек, на телефоне заходим в приложение OpenVPN, выбираем «Import Profile» и затем «FILE». Для добавления нажимаем «ADD»

2020_02_10_10_16_img_9534.jpg

Отмечаем галочкой «Connect after import» и в правом верхнем углу нажимаем «ADD»

2020_02_10_10_19_img_9535.jpg

Появится надпись: «OpenVPN» запраживает разрешение на добавление конфигураций VPN. Нажимаем «Разрешить». После этого вы автоматически подключитесь к VPN

Для подключения или отключения VPN нужно в приложении нажимать кнопку.

2020_02_10_10_22_img_9536.jpg

Подключение VPN на android

Нужно скачать и установить клиент «OpenVPN», скачать его можно здесь: скачать OpenVPN для android

Установив клиент, нужно в него перенести файл настроек. Сделать это можно несколькими способами:

  1. С помощью мессенджеров (viber, wathsapp, telegram). Просто отправьте себе на телефон сообщение, в котором прикрепите файл с настройками.
  2. Подключить телефон к компьютеру и перекинуть файл с настройками.

Первый способ.

Вы отправляет на телефон сообщение с файлом настроек. Затем в мессенджере нажимаете на этот файл, и он должен открыться в клиенте OpenVPN. Появится окно с вопросом: Import .ovpn profile? Нажимаем «OK».

screenshot_20200210-115733.png

Второй способ

Подключаете android устройство к компьютеру или ноутбуку с помощью usb кабеля. Копируете в телефон файл с настройками. Папку можно выбрать любую (например, «Download»).

2020-02-10_12-10-13.jpg

На телефоне запускаем приложение «OpenVPN». Выбираем раздел «Import Profile» и нажимаем на «FILE» Переходим в папку, куда скопировали настройки (в примере «Download»), выбираем наш файл и нажимаем «IMPORT»

photo_2020-02-10_12-18-33.jpg

Активация настроек

Когда вы скопируете настройки, нужно нажать «ADD». Далее отметить галочкой «Connect after import» и в правом верхнем углу нажимаем «ADD»

screenshot_20200210-115922.png

После этого вы автоматически подключитесь к VPN

Для подключения или отключения VPN нужно в приложении нажимать кнопку.

2020_02_10_10_22_img_9536.jpg

Установка и настройка OpenVPN клиент на Linux

В этом примере мы разберём установку и настройку на Kali Linux. Для начало нужно выполнить команды обновления:

1 
apt-get update

apt-get update

1 
apt-get upgrade

apt-get upgrade

После всех обновлений переходим к установки клиента. В консоли по порядку вводим следующие команды:

apt-get install network-manager-openvpn-gnomeapt-get install network-manager-pptpapt-get install network-manager-pptp-gnomeapt-get install network-manager-strongswanapt-get install network-manager-vpncapt-get install network-manager-vpnc-gnome/etc/init.d/network-manager restart  — эта команда сделает рестарт менеджера сети.

Файл конфигурации с расширением .ovpn помещаем в удобное для вас место. Для примера я создал папку «vpn» и туда поместил файл. В терминале переходим в папку с файлом

cd /root/vpn/

Командой ls можно проверить есть ли там наш файл. Если всё в порядке, то запускаем клиент openvpn с нашими настройками:

openvpn kali.ovpn — где kali.ovpn мой файл с настройками

2020-01-14_17-37-59.jpg

После этого дожидаемся подключения. Если потребуется имя пользователя(login) и пароль(password) вводим те данные, которые показаны на сайте, где вы брали настройки.

Если всё хорошо, то увидим надпись «Initialization Sequence Completed». Консоль не закрываем, пока работает vpn она должна быть открыта.

2020-01-14_17-39-26.jpg

Если бесконечно идет подключение проблема скорее всего в сервере, попробуйте использовать другой файл конфигураций VPN.

Используемые источники:

  • https://www.creaters.info/2014/10/openvpn-android.html
  • https://habr.com/post/157687/
  • https://7sof.ru/programmi/kak-ustanovit-i-nastroit-openvpn.html

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации