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. 

Комментарии  

alex
+5 # alex 08.03.2019 22:34
спасибо за подробное описание!
Ответить | Ответить с цитатой | Цитировать
Wrtman
+3 # Wrtman 09.03.2019 12:55
Всегда пожалуйста :-)
Ответить | Ответить с цитатой | Цитировать
Aboltus
0 # Aboltus 20.11.2019 11:41
А почему обязательно создавать unmanaged интерфейс? Почему нельзя в зону VPN добавить сразу tun0 (выбрать пользовательский)?
Ответить | Ответить с цитатой | Цитировать
Alex
+1 # Alex 20.05.2019 13:02
Блин, огромное спасибо, вечером буду настраивать, ибо видел много мануалов, пробовал много прошивок, настраивал, подключался, пинг шёл с роутера до всех нужных адресов, но при раздаче дальше ничего не работало, вся проблема была в 4, 5 и 6 пунктах.
нигде не видел более подробного описания
Ответить | Ответить с цитатой | Цитировать
byvenn
0 # byvenn 20.05.2019 20:02
Большое спасибо. А можно еще и описать настройку openvpn сервера из luci.?
Ответить | Ответить с цитатой | Цитировать
Sandrick
0 # Sandrick 29.09.2019 22:27
Очень добротное описание!
Есть проблемка, ныне FrootVPN выдает ovpn без приватного ключа и сертификата... только CA и TLS.
Вроде раскидал куда чего нужно, Ip'шник подменяется, но соединения при поднятом VPN'e нет.
Ответить | Ответить с цитатой | Цитировать
Wrtman
+1 # Wrtman 29.09.2019 23:44
Роутер не имеет доступа или клиент уже конечный? Если подмена происходит, то значит надо копать фаервол и маршрутизацию.
Ответить | Ответить с цитатой | Цитировать
Diavolik5596
0 # Diavolik5596 21.08.2020 12:26
Здраствуйте. Как ви разобрали файл ovpv? пробовал по разному не работает.
Ответить | Ответить с цитатой | Цитировать
Sandrick
0 # Sandrick 30.09.2019 14:17
Соединения нет ни у роутера, ни у компов сети. Примечательно - openwrt.su пингуется и traceroute отрабатывает, когда ip подменяется (чего иногда не происходит - раз на раз не приходится), но ни google ни другие сервисы не доступны.
Интересный еще момент выяснился, временами выскакивает в логах "write UDP: Operation not permitted (code=1)"
Попробую еще вечерком отключить полностью ipv6, возможно в этом проблема...
Ответить | Ответить с цитатой | Цитировать
Sandrick
+4 # Sandrick 01.10.2019 22:36
Проблема была в DNS.
Решение:
В /etc/config/dhcp
Закомментировать в разделе config dnsmasq строчку
option localservice '1'
Добавить в разделе config dnsmasq:
option localservice '0'
option noresolv '1'
list server '8.8.8.8'
list server '8.8.4.4'
Ответить | Ответить с цитатой | Цитировать
titan
+1 # titan 18.02.2021 16:28
Цитирую Sandrick:
Проблема была в DNS.
Решение:
В /etc/config/dhcp
Закомментировать в разделе config dnsmasq строчку
option localservice '1'
Добавить в разделе config dnsmasq:
option localservice '0'
option noresolv '1'
list server '8.8.8.8'
list server '8.8.4.4'

Цитирую Sandrick:
Проблема была в DNS.
Решение:
В /etc/config/dhcp
Закомментировать в разделе config dnsmasq строчку
option localservice '1'
Добавить в разделе config dnsmasq:
option localservice '0'
option noresolv '1'
list server '8.8.8.8'
list server '8.8.4.4'


Огромное спасибо, я перелопатил кучу материала а найти никак не мог в чем проблема. У меня работало 50/50 чтото открывало, а чтото нет.
Ответить | Ответить с цитатой | Цитировать
нужна помощь
0 # нужна помощь 08.02.2020 14:34
Подскажите сделал все по инструкции, а также использовал гайд support.privatetunnel.com/kb/article/1-how-do-i-connect-to-privatetunnel-using-openwrt/

Но подмены адреса не происходит сервис работает в логах есть ошибки at Feb 8 14:30:57 2020 daemon.notice openvpn(PrivateTunnel)[6555]: Attempting to establish TCP connection with [AF_INET]185.217.1.75:443 [nonblock] Sat Feb 8 14:30:57 2020 daemon.info hostapd: wlan1: STA 64:89:f1:44:bb:c7 IEEE 802.11: associated (aid 5) Sat Feb 8 14:30:57 2020 daemon.notice hostapd: wlan1: AP-STA-CONNECTED 64:89:f1:44:bb:c7 Sat Feb 8 14:30:57 2020 daemon.info hostapd: wlan1: STA 64:89:f1:44:bb:c7 WPA: pairwise key handshake completed (RSN) Sat Feb 8 14:30:57 2020 daemon.info hostapd: wlan1: STA 64:89:f1:44:bb:c7 IEEE 802.11: authenticated Sat Feb 8 14:30:58 2020 daemon.notice openvpn(PrivateTunnel)[6555]: TCP connection established with [AF_INET]185.217.1.75:443 Sat Feb 8 14:30:58 2020 daemon.notice openvpn(PrivateTunnel)[6555]: TCP_CLIENT link local: (not bound) Sat Feb 8 14:30:58 2020 daemon.notice openvpn(PrivateTunnel)[6555]: TCP_CLIENT link remote: [AF_INET]185.217.1.75:443 Sat Feb 8 14:30:58 2020 daemon.err openvpn(PrivateTunnel)[6555]: Connection reset, restarting [0] Sat Feb 8 14:30:58 2020 daemon.notice openvpn(PrivateTunnel)[6555]: SIGUSR1[soft,connection-reset] received, process restarting Sat Feb 8 14:30:58 2020 daemon.notice openvpn(PrivateTunnel)[6555]: Restart pause, 5 second(s) Sat Feb 8 14:31:03 2020 daemon.notice openvpn(PrivateTunnel)[6555]: TCP/UDP: Preserving recently used remote address: [AF_INET]185.217.1.75:1194 Sat Feb 8 14:31:03 2020 daemon.notice openvpn(PrivateTunnel)[6555]: Socket Buffers: R=[163840->163840] S=[163840->163840] Sat Feb 8 14:31:03 2020 daemon.notice openvpn(PrivateTunnel)[6555]: UDP link local: (not bound) Sat Feb 8 14:31:03 2020 daemon.notice openvpn(PrivateTunnel)[6555]: UDP link remote: [AF_INET]185.217.1.75:1194 Sat Feb 8 14:32:03 2020 daemon.err openvpn(PrivateTunnel)[6555]: TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) Sat Feb 8 14:32:03 2020 daemon.err openvpn(PrivateTunnel)[6555]: TLS Error: TLS handshake failed Sat Feb 8 14:32:03 2020 daemon.notice openvpn(PrivateTunnel)[6555]: SIGUSR1[soft,tls-error] received, process restarting Sat Feb 8 14:32:03 2020 daemon.notice openvpn(PrivateTunnel)[6555]: Restart pause, 5 second(s)

видимо что-то не так с настройками Firewall
Цель сделать так, что все клиенты которые вонткнуты в роутер и подключены по wifi использовали VPN. Прошу помощи.
Ответить | Ответить с цитатой | Цитировать
Egor
+2 # Egor 17.03.2020 11:16
Спасибо, огроменное, самая толковая статья главное что по GUI Люси объяснена настройка
Ответить | Ответить с цитатой | Цитировать
Dimon
0 # Dimon 18.03.2020 13:34
Спасибо за толковую статью, все получилось. Но есть пара проблем.
1. После разрыва соединения с VPN сервером хост начинает ходить в инет напрямую, что крайне нежелательно. Можно с этим что-то сделать?
2. После повторного подключения к VPN хост все равно продолжает ходить в инет напрямую, что тоже не хорошо :-)
Ответить | Ответить с цитатой | Цитировать
Руслан
0 # Руслан 29.09.2020 16:44
Все получилось спасибо. А как сделать так чтоб клиент одной подсети определялся ip адрес в другой как 192.168.*.* а не 10.8.0.*
Ответить | Ответить с цитатой | Цитировать
twohalfone
0 # twohalfone 27.11.2020 04:03
Посоветовал бы посмотреть дополнительно тут - тоже интересный подход. protonvpn.com/support/how-to-set-up-protonvpn-on-openwrt-routers/
так же используйте Kill switch, чтоб роутер отрубало от инета когда впн падает.
Было хорошо если автор описал как это делать.
В целом капать надо в сторону iptables - примерно так
iptables -I FORWARD -i br0 -o $WAN_IF -j REJECT --reject-with icmp-host-prohibited

iptables -I FORWARD -i br0 -p tcp -o $WAN_IF -j REJECT --reject-with tcp-reset

iptables -I FORWARD -i br0 -p udp -o $WAN_IF -j REJECT --reject-with udp-reset
Ответить | Ответить с цитатой | Цитировать
Костя
-3 # Костя 17.08.2021 16:48
Ріже дуже сильно швидкість якщо за роутером роутер
Ответить | Ответить с цитатой | Цитировать
Михаил
0 # Михаил 11.09.2022 16:24
Коллеги, добрый день.

Уже три дня настраиваю связку mikrotik как openvpn server и tplink openwrt как openvpn client.

Подключение клиента к серверу происходит и в зависимости от настройи tap или tun на сервере и клиенте появляется нужный интерфейс.
И на этом интерфейсе назначается ip адрес который выдает сервер.
А вот дальше есть проблема. А именно с клиента не пингуется сервер и с сервера не пингуется клиент..

Я проверил все что только мог и даже в качестве сервера сделал виртуалку на openwrt и на ней все работает, но как только я делаю сервер на микротике, то клиент адрес от сервера получает, а пинга нет.
Я и разные версии микротиков использовал и разные ротоколы udp tcp, всегда один результат, клиент получает адрес, но пинг не идет.
Единственное пока , что не нашел, это что принцепи связка с микротом рабочая или нет.
Буду признателен за любые рекомендации.
Ответить | Ответить с цитатой | Цитировать
Arianne
0 # Arianne 23.12.2022 02:01
It's awesome to pay a visit this site and reading the views of all friends regarding this article,
while I am also keen of getting knowledge.

Here is my blog - пакеты строительные
Ответить | Ответить с цитатой | Цитировать
Merissa
0 # Merissa 23.12.2022 05:49
Your method of telling everything in this paragraph is actually fastidious, all be capable of
easily know it, Thanks a lot.

Here is my page: Polipropilenovye-Meshki04.Ru
Ответить | Ответить с цитатой | Цитировать
Alphonso
0 # Alphonso 24.12.2022 16:53
Hey There. I found your blog using msn. This is a
very well written article. I will make sure to
bookmark it and return to read more of your useful information. Thanks for the post.
I will definitely comeback.

Visit my web site мусорные мешки для строительного мусора
Ответить | Ответить с цитатой | Цитировать
Dakota
0 # Dakota 05.01.2023 21:32
I'm extremely pleased to find this website. I want to to thank you
for ones time for this fantastic read!! I definitely really liked every bit of it and I have you
saved as a favorite to see new information on your site.



Feel free to visit my web site :: упаковочная клейкая лента
Ответить | Ответить с цитатой | Цитировать
Lorrine
0 # Lorrine 06.01.2023 08:14
Keep on working, great job!

my homepage :: polipropilenovye-meshki01.ru/
Ответить | Ответить с цитатой | Цитировать
Beatris
0 # Beatris 07.01.2023 19:52
Hi there! I could have sworn I've been to this blog before but after checking through some of the post I realized it's new to me.
Anyways, I'm definitely glad I found it and I'll be bookmarking and checking back frequently!


Here is my webpage; Polipropilenovye-Meshki05.ru/
Ответить | Ответить с цитатой | Цитировать
Rashad
0 # Rashad 09.01.2023 20:45
Hi! I just wanted to ask if you ever have any issues with hackers?
My last blog (wordpress) was hacked and I ended up losing months of hard work due to no data backup.
Do you have any methods to stop hackers?

Take a look at my blog post :: стрейч лента
для упаковки
Ответить | Ответить с цитатой | Цитировать
Robt
0 # Robt 10.01.2023 03:33
Hi there! Would you mind if I share your blog with my twitter group?
There's a lot of folks that I think would really enjoy
your content. Please let me know. Thank you

Here is my site ... клейкая лента упаковочная
Ответить | Ответить с цитатой | Цитировать
Kent
0 # Kent 10.01.2023 08:57
Thanks for some other excellent article. Where else could anybody get that
kind of information in such a perfect manner of writing?
I've a presentation next week, and I am on the search for such information.

Here is my webpage скотч для
коробок
Ответить | Ответить с цитатой | Цитировать
Keenan
0 # Keenan 10.01.2023 22:36
I for all time emailed this web site post page to all my associates, since
if like to read it then my contacts will too.

Look at my web blog - скотч профессиональный
Ответить | Ответить с цитатой | Цитировать
Elden
0 # Elden 10.01.2023 23:01
Hi! I've been following your web site for a while now and finally
got the bravery to go ahead and give you a shout out from Houston Tx!
Just wanted to say keep up the fantastic work!

My blog - мешок мусорный
Ответить | Ответить с цитатой | Цитировать
Fidel
0 # Fidel 10.01.2023 23:20
I am truly pleased to read this webpage posts which includes plenty of useful facts,
thanks for providing such information.

Here is my web-site мешок мусорный
Ответить | Ответить с цитатой | Цитировать

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

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