OpenWRT.su

Open.Wireless.Super and LEDE

VPN клиент на OpenWrt

VPN клиент на OpenWrtИспользовать VPN для доступа к запрещенным сайтам сейчас уже не кажется таким кощунством, как раньше.  За последние лет десять было создано такое огромное количество VPN-сервисов, который все в один голос трубят, как снимают с вас ограничения на интернет-контент, наложенный как нашим государством, так и отдельными интернет-провайдерами в частности, и о том, как все супер-анонимно и абсолютно бесследно. Так ли это на самом деле, каждый решает для себя сам. Мы же рассмотрим сегодня как поднять VPN клиента на вашем OpenWrt роутере. В качестве примера будем устанавливать VPN-соединение на устройстве TP-Link WR842ND с OpenWrt 18.06.1 используя пакет OpenVPN и VPN сервис FrootVPN

1. Установка необходимых пакетов

Репозитарий OpenWrt имеет несколько вариаций скомпилированного пакета OpenVPN в зависимости от типа используемого шифрования, будь то OpenSSL, mbedTSL либо вовсе без никакого. В нашем примере установим пакет openvpn с поддержкой пакета шифрования OpenSSL.

opkg update

opkg install openvpn-openssl

Он потянет за собой зависимости такие как kmod-tun, liblzo,zlib,libopenssl. Типовой вывод команды ниже:

Installing openvpn-openssl (2.4.5-4) to root...
Downloading ...
Installing kmod-tun (4.9.120-1) to root...
Downloading ...
Installing liblzo (2.10-1) to root...
Downloading ...
Installing zlib (1.2.11-2) to root...
Downloading ...
Installing libopenssl (1.0.2p-1) to root...
Downloading ...
Configuring kmod-tun.
Configuring liblzo.
Configuring zlib.
Configuring libopenssl.
Configuring openvpn-openssl.

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

opkg install luci-app-openvpn

2. Получение файлов конфигурации от провайдера VPN

Авторизируемся на сайте вашего VPN сервиса. И скачиваем файл с настройками для приложения OpenVPN. Обычно он имеет расширение *.ovpn.  Загрузив данный файл на ваш роутер в папку /etc/openvpn/ через WinSCP и открыв директорию через SSH можно теперь вручную проверить как проходит соединение с сервером,у меня например файл называется sweden.ovpn:

cd /etc/openvpn

Узнаем сначала наш текущий внешний IP

wget -qO- http://openwrt.su/ip

Your external IP adress: 91.233.43.254

Далее попробуем подключиться из командной строки:

openvpn sweden.ovpn 

Tue Nov 6 17:20:57 2018 OpenVPN 2.4.5 mips-openwrt-linux-gnu [SSL (OpenSSL)] [LZO] [LZ4] [EPOLL] [MH/PKTINFO] [AEAD]
Tue Nov 6 17:20:57 2018 library versions: OpenSSL 1.0.2p 14 Aug 2018, LZO 2.10

В процессе терминал попросит ввести имя пользователя и пароль

Enter Auth Username: Wrtman
Enter Auth Password: ********

И если все пройдет успешно, то он вам сообщит следующее

Tue Nov 6 17:22:24 2018 TCP/UDP: Preserving recently used remote address: [AF_INET]178.73.195.109:1195
Tue Nov 6 17:22:24 2018 UDP link local: (not bound)
Tue Nov 6 17:22:24 2018 UDP link remote: [AF_INET]178.73.195.109:1195
Tue Nov 6 17:22:25 2018 [server] Peer Connection Initiated with [AF_INET]178.73.195.109:1195
Tue Nov 6 17:22:26 2018 Options error: Unrecognized option or missing or extra parameter(s) in [PUSH-OPTIONS]:5: block-outside-dns (2.4.5)
Tue Nov 6 17:22:26 2018 TUN/TAP device tun0 opened
Tue Nov 6 17:22:26 2018 do_ifconfig, tt->did_ifconfig_ipv6_setup=0
Tue Nov 6 17:22:26 2018 /sbin/ifconfig tun0 46.246.86.3 netmask 255.255.255.224 mtu 1500 broadcast 46.246.86.31
Tue Nov 6 17:22:26 2018 Initialization Sequence Completed

Последняя строка говорит о том, что все прошло успешно. Проверим, изменился ли наш внешний IP:

wget -qO- http://openwrt.su/ip

Your external IP adress: 46.246.86.3

Это значит что IP подменился на шведский VPNшный. Вручную все прошло успешно. 

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

Как правило файл *.ovpn включают в себя не только настройки конфигурации, а также сгенерированные вашим сервисом сертификаты и ключи для подключения. Сертификаты и ключи заключены в конфигурационных файлах в специальные теги типа <ca>код</ca><cert>код</cert><key>код</key>. Желательно их выделить в отдельные файлы. То есть код, который содержится между тегами <ca>код</ca> выделить в отдельный файл ca.crt, аналогично поступить и с <cert>код</cert> в файл cert.crt и <key>код</key> в файл key.key

Получение файлов конфигурации от провайдера VPN

В абсолютном большинстве случаев подключение к VPN-серверу в виде клиента требует авторизации. Поэтому создаем также отдельный файл, например, userpass.txt где первой строкой в обычном текстовом редакторе вводим имя пользователя, а второй строкой пароль для доступа VPN, которые вы придумали при регистрации на сервисе, либо которые вам выдал провайдер VPN отдельно. Таким образом у вас уже должно быть 4 файла: ca.crt, cert.crt, key.key и userpass.txt. Заходим на роутер через WinSCP, заливаем эти файлы в папку etc/openvpn/. Там же у нас лежит *.ovpn файл скаченный ранее, так как с ним мы еще не закончили. 

VPN клиент на OpenWrt

3. Настройка OpenVPN через Luci

Для начала смотрим опции в файле *.ovpn от нашего провайдера. У меня опции выглядят так

cat /etc/openvpn/sweden.ovpn

client
dev tun
resolv-retry infinite
nobind
persist-key
auth-user-pass
auth-nocache
remote-cert-tls server
cipher AES-256-CBC
auth SHA384
server-poll-timeout 3
proto udp
remote se.frootvpn.com 1195
sndbuf 0
rcvbuf 0

Далее переходим в меню Services - OpenVPN и вводим название какое-хотим дать нашему конфигу и выбираем тип Simple client configuration for a routed point-to-point VPN и жмем кнопку ADD. Сразу жмем на Switch to advanced configuration и имея перед глазами верхний список опций - начинаем ставить галочки и выбирать опции из выпадающих списков.

Во вкладке Networking у меня согласно конфигу от провайдера нужно установить: port 1195, dev tun0, nobind и persist_key, установить буферы 

VPN клиент на OpenWrt

Во вкладке VPN собственно ставим галочку что мы client, скармливаем userpass.txt в графе 

VPN клиент на OpenWrt

и переходим во вкладку Cryptography. Именно в этот момент системе как раз и нужно указать на подготовленные ранее файлы ca.crt, cert.crt, key.key, также указать ключи и алгоритмы шифрования, указать чтобы openvpn не держал в кэше данные авторизации auth_nocache, а также установить шифрование на уровне сервера в графе 

VPN клиент на OpenWrt

VPN клиент на OpenWrt

Включаем галочкой наш конфиг, жмем Save & Apply. И Start. Если все прошло успешно - переходим к интерфейсу. 

4. Создаем интерфейс для VPN туннеля

Без интерфейса затея работать как надо не будет. Хоть устройство tun и создалось, ему нужно присвоить интерфейс. Идем в Network - Interfaces - Add new interface. Указываем протокол Unmanaged

Создаем интерфейс для VPN туннеля

Во вкладке Physical Setting выбираем Interface нашего VPN соединения tun0

Создаем интерфейс для VPN туннеля

И сразу создадим зону фаервола на будущее. Save and Apply и перейдем к ее настройке. 

Создаем интерфейс для VPN туннеля

5. Настройка правил фаервола для VPN соединения

Тут на начальном этапе все просто. Input и Forward в Reject, Output в Accept. По умолчанию как и для любой другой зоны откуда приходит интернет. Галочки в Masquerading и MSS clamping. И в конце разрешить перенаправление из зоны LAN. 

 Настройка правил фаервола для VPN соединения

Чтобы в последующем клиенты LAN сети имели возможность прикрываться запущенным VPN клиентом на роутере то нужно еще в зоне LAN также настроить перенаправление в нашу новую VPN зону. Это можно сказать минимальный рабочий набор. 

 Настройка правил фаервола для VPN соединения

6. Базовая маршрутизация через OpenVPN

Как вы сумели заметить по умолчанию весь траффик идет через VPN. И абсолютно все клиенты в локальной сети будут использовать его как шлюз. Если вы добавите в опции настроек OpenVPN во вкладке Networking опцию route_noexec  то наоборот все будут использовать интерфейс по умолчанию, даже если поднят VPN-клиент, до тех пор пока вы прямо не укажите кому куда идти и через что.

В качестве примера попробуем направить весь трафик от компьютера в локальной сети с адресом 192.168.1.3 через VPN, а все остальные клиенты локальной сети будут получать доступ в интернет как обычно. Для этого включаем опцию route_noexec в конфиге openvpn во вкладке Networking

Дальше ставим пакет ip. Он как правило потянет за собой свою полную версию ip-full. 

opkg install ip

Смотрим общую таблицу маршрутизации

route -n

Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.40.1 0.0.0.0 UG 0 0 0 pppoe-wan
46.246.12.64 0.0.0.0 255.255.255.224 U 0 0 0 tun0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 br-lan
192.168.40.1 0.0.0.0 255.255.255.255 UH 0 0 0 pppoe-wan

Смотрим существующие таблицы

cat /etc/iproute2/rt_tables

# reserved values
#
128 prelocal
255 local
254 main
253 default
0 unspec
#
# local
#

Добавляем свою таблицу с именем 10 vpn

vi /etc/iproute2/rt_tables

# reserved values
#
128 prelocal
255 local
254 main
253 default
0 unspec
10 vpn
#
# local
#

Добавляем IP-адрес машины в локальной сети в таблицу vpn

ip rule add from 192.168.1.3 table vpn

Проверяем как добавилось

ip rule list

0: from all lookup local
32765: from 192.168.1.3 lookup vpn
32766: from all lookup main
32767: from all lookup default

Прописываем указание на то, что все, кто включен в таблицу vpn, должны использовать интерфейс нашего VPN соединения tun0

ip route add default dev tun0 table vpn

Ну и сбрасываем кэш

ip route flush cache

После чего локальная машина с IP-адресом 192.168.1.3 будет отправлять и пропускать траффик только через VPN интерфейс tun0. 

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

Если вы хотите получать сообщения c ответами на ваши комментарии - то укажите свой настоящий e-mail. Если же вы тут проездом, чтобы оставить комментарий укажите в поле email no@openwrt.su