Продвинутое использование OpenVPN

Оглавление

1. Скрипт для автоматизации создания ключей OpenVPN

1.1 Повторный запуск скрипта OpenVPNassistent

2. Запуск сервера OpenVPN и подключение клиентов к нему

3. Как подключиться к OpenVPN с Android

4. Доступ к службам компьютера через NAT и с серым IP с помощью OpenVPN

5. Как сделать статичные IP для клиентов OpenVPN

6. Обход перехватывающего портала с помощью OpenVPN

7. Обход перехватывающих порталов с телефона

8. Доступ к публичным ресурсам сервера OpenVPN

9. Как захватывать и анализировать VPN трафик с Wireshark

Заключение


Многие используют OpenVPN для сокрытия настоящего IP и обхода блокировок доступа к веб-сайтам. Но этим возможности технологии VPN не ограничены. По своему понятию (Virtual Private Network) с помощью OpenVPN можно настраивать виртуальные частные сети, таким образом организуя закрытое из вне пространство с удобным доступом к локальным ресурсам тем, кто к этим сетям подключён. Причём «локальными» эти ресурсы являются внутри виртуальной частной сети, то есть, на самом деле, удалённый компьютер может быть подключён к Интернету на другом конце света через два NAT'а, но мы можем подключаться к его веб-серверу или файловому хранилищу напрямую внутри виртуальной сети. То есть такой подход позволяет решать и другие задачи: доступ к ресурсам компьютера, находящегося за NAT (не имеющего статичного публичного IP), шифрование передаваемых данных, выход в Интернет скрывая свой настоящий IP и другие.

В предыдущей статье я показал как настроить сервер и клиентов OpenVPN. Теперь предлагаю продолжить изучение OpenVPN и рассмотреть разные фишки не совсем стандартного использования OpenVPN: обход перехватывающих порталов, обход ограничений NAT, задействование преимуществ виртуальной частной сети.

Кстати, если вам нужен VPS сервер, чтобы вы могли установить на него OpenVPN и повторять то, что я показываю, то попробуйте этот.

Скрипт для автоматизации создания ключей OpenVPN

Если вы смотрели Инструкцию по настройке сервера и клиента OpenVPN, то могли обратить внимание, что она очень большая. Кстати, некоторое время назад я дополнил и исправил эту инструкцию (в части установки на Debian, Ubuntu, Linux Mint, Kali Linux).

Чтобы сделать жизнь чуточку проще, я написал скрипт OpenVPNassistent, который помогает автоматизировать процесс создания конфигурационных файлов и ключей для сервера и клиентов OpenVPN. Причём этот скрипт создаёт конфигурационные файлы со встроенными сертификатами (для сервера их 5, а для каждого клиента по 4). Скрипт, насколько это возможно, автоматизирует все процессы.

Скрипт поддерживает работу в производных Debian (Ubuntu, Kali Linux, Linux Mint), а также в производных Arch Linux (BlackArch). Я его тестировал в Kali Linux, Arch Linux/BlackArch, Ubuntu.

Скачаем скрипт:

git clone https://github.com/Mi-Al/OpenVPNassistent
cd OpenVPNassistent

Запускаем:

sudo bash openvpnassistent.sh

При запуске скрипт проверит, установлен ли OpenVPN, если не установлен, то спросит разрешение и установит.

Далее проверит, создан ли Центр Сертификации (CA) — если нет, то предложит создать его — соглашаемся.

Придумайте, введите и (главное) запомните пароль центра сертификации. Затем подтвердите этот же пароль:

У вас спросят имя CA, можно ничего не менять, просто нажмите Enter:

Будет создана и сохранена пара публичный-приватный ключ CA.

Вы можете заметить, что скрипт постоянно показывает предупреждения

Can't load /etc/easy-rsa/pki/.rnd into RNG
140426876056064:error:2406F079:random number generator:RAND_load_file:Cannot open file:crypto/rand/randfile.c:88:Filename=/etc/easy-rsa/pki/.rnd

Это какой-то баг в easy-rsa — на создаваемые сертификаты это никак не влияет — они получаются нормальными. Даже если вы будете создавать сертификаты вручную, без моего скрипта, у вас будет появляться эта же ошибка/предупреждение.

Теперь скрипт задаёт вопрос, для скольких клиентов нужно создать конфигурационные файлы (для каждого из них будет создан свой файл с собственными сертификатами).

Также скрипт спросит IP адрес сервера OpenVPN. Если вы его не знаете, то оставьте поле пустым — но вам затем придётся вручную добавлять его в каждый конфигурационный файл клиента.

Ещё скрипт спрашивает, какой порт будет использовать OpenVPN. Портом по умолчанию является 1194. Можно выбрать любой незанятый порт, например, я использую 53 — далее я покажу как OpenVPN на 53 порту помогает обходить Перехватывающие Порталы (хот-споты с авторизацией на веб-интерфейсе).

Далее скрипт переходит к созданию сертификатов. Вначале у нас спрашивают имя сервера, достаточно просто нажать Enter:

Если всё прошло без ошибок, то появится сообщение что создан приватный ключ (файл .key) и создан файл запроса (.req).

Keypair and certificate request completed. Your files are:
req: /etc/easy-rsa/pki/reqs/server.req
key: /etc/easy-rsa/pki/private/server.key

Для получения сертификата (публичного ключа), нужно подписать файл запроса — именно к этому скрипт сразу и переходит. У нас спрашивают, хотим ли мы подписать ключ для, набираем yes:

Вводим пароль от центра сертификации:

Если всё нормально, то будет выведено:

Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName            :ASN.1 12:'server'
Certificate is to be certified until Nov  2 05:13:21 2021 GMT (1080 days)

Write out database with 1 new entries
Data Base Updated

Certificate created at: /etc/easy-rsa/pki/issued/server.crt

Сразу после этого начнётся создание ещё двух ключей — это происходит полностью автоматически.

Теперь переходим к созданию ключей для клиентов. Когда скрипт будет спрашивать имена клиентов, достаточно просто нажимать Enter:

Далее аналогично созданию пары приватный-публичный ключ сервера. То есть все файлы создаются автоматически, нужно только на запрос CA вводить yes, а также пароль от CA:

Это нужно сделать для каждого клиента.

Когда скрипт завершит работу, он выведет информацию о созданных файлах:

Конфигурационные файлы созданы, они размещены в папке :/home/mial/bin/OpenVPNassistent/configs/
итого 72
-rw-r--r-- 1 mial users 8292 ноя 18 08:17 client1.ovpn
-rw-r--r-- 1 mial users 8292 ноя 18 08:17 client2.ovpn
-rw-r--r-- 1 root root  8292 ноя 18 08:18 client3.ovpn
-rw-r--r-- 1 root root  8292 ноя 18 08:18 client4.ovpn
-rw-r--r-- 1 root root  8296 ноя 18 08:18 client5.ovpn
-rw-r--r-- 1 mial users 8956 ноя 18 08:15 server.conf

Эти файлы находятся в папке со скриптом в подпапке configs. Все сертификаты уже встроены внутри конфигурационных файлов — это очень удобно, не нужно их размещать, прописывать пути. Причём — созданные конфигурационные файлы универсальны — вы можете с их помощью подключаться к OpenVPN серверу из Linux, Windows, Android.

Повторный запуск скрипта OpenVPNassistent

При повторном запуске появляются нюансы. Во-первых, если вы не меняете имена сервера и клиентов, то скрипт будет спрашивать, нужно ли перезаписывать уже существующие файлы? Во-вторых, если вы используете те же самые имена файлов клиента и сервера, то создание подписанного сертификата для них всегда будет завершаться ошибкой, что такой сертификат уже существует в базе данных. Эта «база данных» представляет собой несколько файлов в виде простого текста, где перечислены ранее созданные сертификаты. Это очень похоже на баг, поскольку никак не возможно подписать сертификат для того же имени. Поэтому чтобы «обойти» эту проблему на тот случай, если понадобиться заново создавать сертификаты для сервера и клиентов с теми же именами (server, client1, client2, client3 и т. д.), я просто удаляю Центр Сертификации и затем создаю его по-новому.

Чтобы удалить CA в Debian и производных (вместе с ключами самого CA, а также всеми другими ключами, созданными в CA):

sudo rm -rf /usr/share/easy-rsa/pki/

Чтобы удалить CA в Arch Linux и производных (вместе с ключами самого CA, а также всеми другими ключами, созданными в CA):

sudo rm -rf /etc/easy-rsa/pki/

Если у вас там какие-то свои настройки и своя инфраструктура, то не делайте так!!! Если же вы создаёте Центр Сертификации только чтобы подписать ключи для OpenVPN сервера/клиентов, то ничего страшного в этом нет — точно такой же CA можно инициализировать одной командой сколько угодно раз.

Причём это ни какая-то проблема моего скрипта — это проблема easy-rsa для которой мой скрипт является обёрткой. То есть если вы будете вручную вводить команды для создания каждого сертификата, то столкнётесь ровно с такими же проблемами.

Запуск сервера OpenVPN и подключение клиентов к нему

Поскольку это может вызвать путаницу, вернёмся к теории по основам работы OpenVPN сервера и клиентов.

Для запуска OpenVPN сервера нужны:

  • конфигурационный файл
  • 5 сертификатов

В предыдущей статье по настройке OpenVPN, мы размещали необходимые сертификаты, затем в конфигурационном файле прописывали путь до каждого из этих сертификатов, и уже только затем запускали OpenVPN сервер с указанием на наш конфигурационный файл.

Для OpenVPN, файлы сертификатов можно встроить (внедрить) в конфигурационный файл. Как это сделать я рассказывал в дополнении к той статье.

На предыдущем этапе с помощью скрипта мы создали конфигурационные файлы в которые уже встроены все необходимые сертификаты — то есть нам не нужно их устанавливать по отдельности на сервер и клиенты. Достаточно только скопировать файл server.conf на сервер, а файлы client1.ovpn, client2.ovpn и т. д. раскидать по соответствующим клиентам.

Файл server.conf можно «закинуть» на сервер с помощью утилиты scp, с помощью FTP или веб-файлового менеджера — в общем, как умеете. Причём, если у вас есть доступ по SSH, то можете просто создать на сервере текстовый файл с помощью nano/vim и скопировать-вставить содержимое файла server.conf, поскольку это файл в виде простого текста.

Для проверки я запускаю OpenVPN на сервере в консоли (файл server.conf размещён в текущей папке):

sudo openvpn server.conf

Появилась надпись

Initialization Sequence Completed

Это означает, что сервер OpenVPN успешно запущен.

Теперь на клиентской стороне я запускаю (файл с настройками у меня размещён по пути bin/OpenVPNassistent/configs/client1.ovpn):

sudo openvpn bin/OpenVPNassistent/configs/client1.ovpn

Аналогично, надпись

Initialization Sequence Completed

свидетельствует о том, что мы успешно подключились к клиенту.

Кстати, для выхода в Интернет через OpenVPN сеть на сервере нужно настроить маршрутизацию.

Опять смотрим в окно OpenVPN сервера:

Там многочисленные сообщения о том, что пакет отброшен — packet dropped:

Sun Nov 18 09:13:29 2018 us=592651 client1/IP:48143 MULTI: bad source address from client [192.168.1.47], packet dropped
Sun Nov 18 09:13:31 2018 us=358682 client1/IP:48143 MULTI: bad source address from client [192.168.1.47], packet dropped
Sun Nov 18 09:13:32 2018 us=308208 client1/IP:48143 MULTI: bad source address from client [192.168.1.47], packet dropped
Sun Nov 18 09:13:33 2018 us=158781 client1/IP:48143 MULTI: bad source address from client [192.168.1.47], packet dropped
Sun Nov 18 09:13:39 2018 us=987556 client1/IP:48143 MULTI: bad source address from client [192.168.1.47], packet dropped
Sun Nov 18 09:13:47 2018 us=230574 client1/IP:48143 MULTI: bad source address from client [192.168.1.47], packet dropped
Sun Nov 18 09:13:50 2018 us=281534 client1/IP:48143 MULTI: bad source address from client [192.168.1.47], packet dropped
Sun Nov 18 09:13:56 2018 us=199194 client1/IP:48143 MULTI: bad source address from client [192.168.1.47], packet dropped

Можно было бы подумать, что имеются проблемы, но, на самом деле, OpenVPN сеть работает, на клиенте можно проверить:

traceroute ya.ru
traceroute to ya.ru (87.250.250.242), 30 hops max, 60 byte packets
 1  10.8.0.1 (10.8.0.1)  267.816 ms  268.462 ms  269.124 ms
 2  rbr01-sklk-vlan130.marosnet.net (94.142.138.129)  293.287 ms  294.046 ms  299.076 ms
 3  94.142.138.39 (94.142.138.39)  310.788 ms  320.332 ms  330.794 ms
 4  styri.yndx.net (195.208.208.116)  343.901 ms  360.920 ms  395.540 ms
 5  ya.ru (87.250.250.242)  406.716 ms  417.901 ms  428.535 ms

Трафик идёт через узел 10.8.0.1 — это шлюз нашей виртуальной частной сети, то есть всё работает нормально. По какой-то причине локальные пакеты (может быть это широковещательные пакеты?) попадают на OpenVPN сервер. С одной стороны, ничего особо страшного в этом нет — они просто отбрасываются. Но, с другой, это неправильно — нужно разобраться с маршрутизацией — вернусь к этому как-нибудь потом.

Если у вас тоже всё в порядке, то файл server.conf можно поместить в папку /etc/openvpn/server/:

sudo mv ~/server.conf /etc/openvpn/server/

и запустить фоновую службу OpenVPN:

sudo systemctl start openvpn-server@server.service

проверим её статус:

sudo systemctl status openvpn-server@server.service

а затем добавим её в автозагрузку:

sudo systemctl enable openvpn-server@server.service

Как подключиться к OpenVPN с Android

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

Скачайте в Google Play официальный клиент OpenVPN. Запустите программу, там выберите OVPN Profile:

Загрузите файл .ovpn на телефон и найдите его с помощью этой программы. Затем выделите и нажмите кнопку IMPORT:

Будет написано, что импорт прошёл успешно, также вы сможете установить любое имя для вашего соединения:

Новое соединение появится в списке всех соединений. Здесь его можно активировать (включить) или выполнить другие действия:

Например, можно сделать ярлык на главном экране и тогда вы сможете подключаться к сети OpenVPN одним тапом по иконке:

 

В любое время можно посмотреть статус соединения и статистику использования трафика:

Доступ к службам компьютера через NAT и с серым IP с помощью OpenVPN

Фух, теперь, когда всё настроено и готово, можно наконец-то перейти к веселью (это для вас от начала статьи прошло несколько минут — для меня прошло несколько дней: пока написал скрипт, отладил на нескольких системах, разобрался с разными техническими вопросами, подправил команды в статье по настройке OpenVPN и, наконец-то, дошёл до этого места).

VPN — виртуальная частная сеть — имеет своё адресное пространство, по умолчанию это 10.8.0.0/24. Каждому устройству (компьютеру, телефону) из этого пространства выдаётся IP адрес. Эти адреса относятся к локальным. И обращаясь по этому адресу можно получить доступ к ресурсам (сетевым службам, файлам) компьютера, у которого нет белого IP.

К примеру, я подключил к моей локальной сети новое устройство — систему Linux с запущенным веб-сервером. Посмотрим список сетевых интерфейсов:

Можно увидеть, что интерфейс eth0 имеет IP адрес 10.0.2.15 — это серый IP и по нему невозможно подключиться к этому компьютеру из Интернета. К тому же, сама система находится за NAT.

После включения OpenVPN создаётся новый сетевой интерфейс tun0, для данной системы у него IP адрес 10.8.0.18. Используя IP адрес интерфейса OpenVPN (tun0), другие участники сети OpenVPN могут подключаться к этому компьютеру. Как я сказал, на этом компьютере запущен веб-сервер. Попробуем его открыть на телефоне, который подключён к этой же сети OpenVPN через совершенно другого провайдера и вообще может находиться за тысячи километров:

Как можно увидеть, это действительно работает. Это может быть веб-сервер, файловый сервер (FTP и другие), рабочие окружения для совместной работы (например, выполненные в виде веб-приложений, запущенных на веб-сервере). При этом доступ к этой рабочей среде будут иметь только участники VPN сети — для всех других она будет полностью закрыта. Любой из участников сети может делиться любыми ресурсами, и любой другой участник может подключаться используя серый IP, присвоенный внутри сети OpenVPN. Чтобы это работало, нужен только один белый (внешний) IP — для самого OpenVPN сервера. Для этих целей обычной ВПСки (VPS — Virtual Private Server) с минимальной конфигурацией по железу хватит за глаза.

Как сделать статичные IP для клиентов OpenVPN

Самый элементарный способ доступа к сетевым службам внутри локальной сети — по IP адресу, как это показано выше. Проблема в том, что в сети OpenVPN IP адреса не привязаны жёстко к клиентам и после переподключения клиенты могут получить другой IP.

Можно настроить OpenVPN сервер выдавать одним и тем же клиентам одинаковые IP, но для этого необходимо соблюдение одного условия. Чтобы было понятно, поясню, что для подключения разных клиентов к одному OpenVPN серверу можно используя одну и ту же пару публичный-приватный ключ, то есть говоря другими словами, один и тот же конфигурационный файл. Это не запрещено, но не рекомендуется и для активации этой возможности необходимо это чётко указать директивой в конфигурационном файле. При таком способе подключения сервер не сможет различать клиентов. То есть при использовании одинаковых ключей (конфигурационных файлов) разными клиентами, невозможно настроить статичные IP адреса в OpenVPN.

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

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

Настройка требуется только на стороне сервера OpenVPN — в настройках клиентов ничего менять не нужно.

Допустим, я хочу, чтобы у client1 был IP адрес 10.8.0.10, у остальных:

  • client2 — 10.8.0.20
  • client3 — 10.8.0.30
  • client4 — 10.8.0.40
  • client5 — 10.8.0.50

Мне нужно на сервере создать директорию, в которой будут находиться настройки для каждого клиента. Этой папкой я выбрал /etc/openvpn/ccd/, создаём её:

mkdir /etc/openvpn/ccd/

В этой папке нужно создать текстовые файлы, имеющие такие же имена, как клиенты OpenVPN, в которых будут храниться их особые настройки.

Кстати, имя клиента можно посмотреть в его конфигурационном файле, оно размещено в сертификате cert и идёт в поле Subject, например:

Subject: CN=client1

В данном случае имя клиента client1, следовательно, нужно создать файл /etc/openvpn/ccd/client1. В этом файле достаточно указать строку вида

ifconfig-push IP_для_клиента IP_шлюза

Если у вас обычные настройки, то в качестве IP_шлюза у вас всегда будет 10.8.0.1.

Итак, для первого клиента, которому я хочу присвоить IP адрес 10.8.0.10, в файл /etc/openvpn/ccd/client1 я записываю:

ifconfig-push 10.8.0.10 10.8.0.1

То же самое можно сделать командой:

echo 'ifconfig-push 10.8.0.10 10.8.0.1' > /etc/openvpn/ccd/client1

И для всех остальных клиентов:

echo 'ifconfig-push 10.8.0.20 10.8.0.1' > /etc/openvpn/ccd/client2
echo 'ifconfig-push 10.8.0.30 10.8.0.1' > /etc/openvpn/ccd/client3
echo 'ifconfig-push 10.8.0.40 10.8.0.1' > /etc/openvpn/ccd/client4
echo 'ifconfig-push 10.8.0.50 10.8.0.1' > /etc/openvpn/ccd/client5

Чтобы OpenVPN сервер подхватывал новые настройки для клиентов, в файл /etc/openvpn/server/server.conf

vim /etc/openvpn/server/server.conf

Добавьте строку (я её вставил перед сертификатами):

client-config-dir /etc/openvpn/ccd/

Чтобы изменения вступили в силу:

sudo systemctl restart openvpn-server@server.service

Ну и убедитесь, что мы ничего не напортили:

sudo systemctl status openvpn-server@server.service

Наша система Linux с веб-сервером имеет имя client3, посмотрим на её IP после переподключения:

Теперь она имеет адрес 10.8.0.30, и именно такой адрес будет иметь эта система при каждой подключении к OpenVPN серверу. Следовательно, веб-сервер всегда будет иметь IP 10.8.0.30 — можно добавить в закладки.

Внимание: для мобильных клиентов OpenVPN используется Topology net30 — возможно, это связано из-за каких-то ограничений мобильных телефонов. Поэтому установить IP описанным выше методом не получится для Android.

IP адреса для Android (возможно, в Windows такая же ситуация) должны кончаться на цифры из следующего списка (первая цифра из каждой пары предназначена для сервера, вторая — для клиента):

[  1,  2] [  5,  6] [  9, 10] [ 13, 14] [ 17, 18]
[ 21, 22] [ 25, 26] [ 29, 30] [ 33, 34] [ 37, 38]
[ 41, 42] [ 45, 46] [ 49, 50] [ 53, 54] [ 57, 58]
[ 61, 62] [ 65, 66] [ 69, 70] [ 73, 74] [ 77, 78]
[ 81, 82] [ 85, 86] [ 89, 90] [ 93, 94] [ 97, 98]
[101,102] [105,106] [109,110] [113,114] [117,118]
[121,122] [125,126] [129,130] [133,134] [137,138]
[141,142] [145,146] [149,150] [153,154] [157,158]
[161,162] [165,166] [169,170] [173,174] [177,178]
[181,182] [185,186] [189,190] [193,194] [197,198]
[201,202] [205,206] [209,210] [213,214] [217,218]
[221,222] [225,226] [229,230] [233,234] [237,238]
[241,242] [245,246] [249,250] [253,254]

Например, если для клиента client2 мы хотим установить IP адрес 10.8.0.14, то для сервера нужно писать 10.8.0.13, например:

echo 'ifconfig-push 10.8.0.14 10.8.0.13' > /etc/openvpn/ccd/client2

Повторюсь, возможно, это же правило обязательно и для Windows клиентов — по крайней мере, раньше было именно так.

В Linux всё шикарно — работает как описано выше.

Обход перехватывающего портала с помощью OpenVPN

В статье «Быстрый, простой и рабочий способ обхода Captive Portal (hotspot с авторизацией на web-интерфейсе)» в качестве теоретического способа обхода, я упоминал возможность настройки OpenVPN на 53 UDP порту. Также я написал, что у меня это не получилось. В тот раз у меня не было своего OpenVPN сервера, поэтому я нашёл OpenVPN с тестовым периодом и с возможностью выбрать порт 53 UDP. Но попытки подключиться к OpenVPN серверу закончились неудачей.

Теперь у меня снова появилась возможность потестировать уже другой hotspot с авторизацией на web-интерфейсе и в нём это действительно работает. То есть, если я просто пытаюсь выйти в Интернет, то я получаю:

Но стоит включить OpenVPN, то я сразу могу пользоваться Интернет-доступом без авторизации! То есть это действительно работает, правда, видимо не со всеми Перехватывающими Порталами. Видимо, некоторые из них достаточно интеллектуальны, чтобы понять, что это какие-то неправильные DNS запросы и что их не нужно пропускать.

Напомню, в чём суть уязвимости некоторых Captive Portal: принцип их работы в том, что они закрывают все TCP и UDP порты для устройств, которые ещё не выполнили вход. Все - кроме одного UDP порта под номером 53. Этот порт необходим для DNS запросов и если его закрыть, то это влечёт слишком много проблем. Поэтому этот порт открыт и через него можно выходить в мир.

Без предварительной подготовки, через этот порт вы только сможете на халяву делать DNS запросы… Но если вы настроили ваш OpenVPN соответствующим образом, то через открытый UDP порт 53 вы сможете подключаться к серверу OpenVPN, а уже он будет для вас выходить во внешний мир и точно также, по этому же самому пути возвращать полученную информацию.

Это работает стабильно и, по субъективным ощущениям, когда сеть загружена, трафик UDP 53 имеет приоритет… То есть работает даже лучше, чем если бы я купил доступ и сидел через этот же хотспот на TCP трафике (я сравнивал и так и так). Хотя, возможно, свою роль играет OpenVPN. Я замечал, что при хорошем подключении когда я сижу через OpenVPN, пинги лучше, чем когда я использую Интернет-подключение обычным образом.

Итак, для этого нужен только OpenVPN сервер, настроенный для работы по протоколу UDP (это по умолчанию) с номером 53 (его нужно выбрать при создании конфигурационных файлов).

Возможно, работает не для всех хотспотов — буду продолжать тестировать.

Обход перехватывающих порталов с телефона

Описанный в предыдущем пункте способ прекрасно работает и для мобильных телефонов — проверено!

Доступ к публичным ресурсам сервера OpenVPN

Возможно это слишком частный случай, но всё равно расскажу об интересной ситуации.

Предположим, что IP адрес OpenVPN сервера 185.117.153.79. Тогда маршрутизация на компьютере будет настроена примерно следующим образом:

  • весь трафик, кроме предназначенного для адреса 185.117.153.79, направляется на шлюз 10.8.0.1 (это OpenVPN)
  • трафик на адрес 185.117.153.79 является исключением — он направляется на обычный интерфейс и выходит в Интернет

Именно через трафик к адресу 185.117.153.79 и происходит подключение к OpenVPN серверу. Если бы для этого адреса не было сделано исключение, то тогда невозможно было бы подключиться к OpenVPN серверу и компьютер остался бы без Интернет-доступа вообще.

В принципе, ничего страшного, но что делать, если я, например, хочу открыть сайт suip.biz, у которого IP адрес как раз 185.117.153.79? Каждый раз, когда я открываю этот сайт, трафик направляется напрямую — минуя OpenVPN сеть. При обычных условиях это может быть нормально, но если OpenVPN используется для конспирации или для обхода перехватывающего портала (это мой случай), то получается, что я вообще не могу открыть сайт suip.biz. Выход из ситуации очень простой. Вспомним, что OpenVPN сервер доступен как часть виртуальной частной сети по IP адресу 10.8.0.1. Поэтому в файле /etc/hosts

sudo gedit /etc/hosts

Достаточно добавить строку:

10.8.0.1	suip.biz

И теперь доступ к этому сайту будет происходить по сети OpenVPN — то есть он будет без проблем открываться (но только пока я подключён к OpenVPN — после отключения нужно удалить/закомментировать эту запись).

Точно также, если мне нужно подключиться к SSH сервера OpenVPN:

ssh root@185.117.153.79

То когда я подключён к OpenVPN, я могу использовать локальный IP виртуальной частной сети:

ssh root@10.8.0.1

Я подключусь к этому же серверу, но при этом трафик не будет идти «помимо» - всё внутри VPN!

Как захватывать и анализировать VPN трафик с Wireshark

Если вы для захвата выберите обычный интерфейс, например, wlan0 или eth0, то все данные будут зашифрованы — их невозможно анализировать.

Чтобы передаваемые через OpenVPN данные были видны нормальным образом, для захвата нужно выбрать интерфейс tun0.

Кстати, если перед вами задачи провести оценку качества/безопасности VPN, то захват надо делать именно на обычном интерфейсе — если вы там видите читаемые данные вроде таких:

Значит ваше VPN соединение просто не зашифровано. Кстати, это не относится к теме OpenVPN, но как выяснили исследователи из бесплатных Android приложений VPN - 84% из них раскрывают IP адрес пользователя. И среди платных VPN тоже много тех, которые допускают просачивание данных.

Но намного было бы интереснее узнать, сколько из них мониторят и логируют трафик…

Заключение

Главная цель этой статьи сделать так, чтобы вы думали об OpenVPN более широко. Это не просто способ поменять IP адрес. Это возможность создать защищённое окружение в котором участники могут обращаться к ресурсам друг друга минуя все проблемы и ограничения NAT. Также можно придумать не совсем стандартные способы использования OpenVPN — для обхода Wi-Fi хот-спотов, например.

Ну и опять реферальная ссылка на VDS/VPS сервера. Эта рефералка поможет хостить новые интересные проекты, а также писать больше инструкций по настройке VDS и различных сетевых сервисов.

Рекомендуется Вам:

Добавить комментарий

Ваш e-mail не будет опубликован.