Openwrt как настроить vpn

OpenWRT.su

Open.Wireless.Super and LEDE

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 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:

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

Your external IP adress: 91.233.43.254

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

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:

Your external IP adress: 46.246.86.3

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

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

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

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

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

Для начала смотрим опции в файле *.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, установить буферы sndbuf 0 и rcvbuf 0.

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

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

Сохраняем все, применяем.

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

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

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

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

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

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

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

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

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

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

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

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

opkg install ip

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

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

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

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

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

# 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

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

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.

Комментарии

Огромное спасибо, я перелопатил кучу материала а найти никак не мог в чем проблема. У меня работало 50/50 чтото открывало, а чтото нет.

Но подмены адреса не происходит сервис работает в логах есть ошибки 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. Прошу помощи.

Источник

Оцените статью