Настройка wireguard vpn между двумя роутерами keenetic

Время на прочтение
7 мин

Количество просмотров 37K

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

Вы узнаете, как:

  • настроить на VPS сервере WireGuard

  • организовать связь через WireGuard между двумя домашними сетями без публичных IP

  • организовать выход с клиентских устройств в интернет без границ, если ваш VPS находится на иностранной площадке

Список сокращений

сокращение

расшифровка

WG

WireGuard

Конечно, разных статей про WG много — тем не менее, когда мне понадобилось решить комплексную задачу, те статьи, которые я находил, мне не помогали. Рискну предположить, что так происходило потому, что в большинстве статей приводится рецепт без объяснения механики происходящего, поэтому шаг влево или вправо делает инструкцию бесполезной. Я хочу ликвидировать этот пробел и дать читателю в руки не только инструкцию, но и понимание, как это работает, чтобы он имел возможность реализовать что-то из того, что нигде не описано.

Для начала опишу задачу, которая у меня возникла и которая была успешно решена. Исходной отправной точкой была идея связать два сетевых сегмента — на даче и в квартире, чтобы можно было админить одну сетку из другой и наоборот. Так сложилось, что среда оказалась гетерогенной — дома стоит роутер Keenetic Viva, доступ к его админке есть из интернета благодаря технологиям Keenetic, а вот на даче стоит MirkoTik RB3011, и у местного провайдера нет услуг типа публичного IP. Идея витала давно, но драйвером реализации стало то, что классный VPN Windscribe перестал работать через моего провайдера совсем. Я решил арендовать VPS за рубежом, настроить VPN для членов семьи, и заодно связать две сетки — как вишенка на торте. Целевая архитектура выглядит так:

Был арендован VPS сервер у провайдера Fornex[ссылка удалена модератором], в качестве отправной статьи для настройки WireGuard была использована статья на 1cloud. Далее идём по порядку — я использовал рутовый аккаунт, поэтому команды без sudo.

Устанавливаем WG:

apt install -y wireguard

Переходим в каталог /etc/wireguard и все всё делаем там. Пока всё согласно инструкции — генерим ключевую пару для сервера:

wg genkey | tee /etc/wireguard/privatekey | wg pubkey | tee /etc/wireguard/publickey

В результате у нас появятся два ключа — закрытый и публичный, они будут использоваться для подключений к WG серверу. Теперь пришло время вернуться к изучению матчасти — как работает WG, какими сущностями оперирует и к чему это всё приводит. Упрощённо схема работы WG выглядит так:

Данная схема описывает следующие факты и соображения:

  • В результате запуска WG сервера поднимается отдельный сетевой интерфейс на хосте.

  • Конфигурация WG сервера применяется к сетевому интерфейсу.

  • Для каждого клиентского соединения на стороне сервера настраивается свой peer, он же пир.

  • Защищённый канал устанавливается между двумя пирами.

  • Сервер не настраивает параметры клиентских пиров, он настраивает только свои пиры.

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

Сначала разберём поток пакетов из квартирной сети в сеть дачи и обратно. Предположим, что у нас есть следующие параметры:

подсеть квартиры, Keenetic

192.168.0.0/24

подсеть дачи, MikroTik

192.168.88.0/24

IP адрес VPS

x.x.x.x

подсеть VPN

10.0.0.0/24

Касательно подсети VPN — можно задать любую подсеть из числа внутренних, непубличных адресов. Я у себя выбрал такую, у вас может быть любая, соответствующая критерию внутренней.

Пойдём по шагам.

  • Настроить сервер WG для приёма подключений клиентских пиров.

  • Настроить в Keenetic передачу пакетов в соединение VPN.

  • Настроить клиентский пир WG на Keenetic, чтобы всё, что приходит на этот пир, отправлялось в канал WG.

  • Настроить серверный пир WG для Keenetic, чтобы всё, что приходит из сети 192.168.0.0/24 в канал WG, отправлялось в сеть 192.168.88.0/24.

  • Настроить клиентский пир WG на MiroTik, чтобы всё, что приходит на этот пир, отправлялось в канал WG.

  • Настроить серверный пир WG Mikrotik, чтобы всё, что приходит из сети 192.168.88.0/24 в канал WG, отправлялось в сеть 192.168.0.0/24.

Начнём с настройки сервера WG, для этого нам понадобится ключ, сформированный ранее в /etc/wireguard с именем privatekey.

Для начала настроим интерконнект между двумя сетями — квартира и дача. Прежде, чем это сделать, надо сгенерировать ключевые пары для пиров квартиры и дачи, т.е. для их роутеров:

wg genkey | tee /etc/wireguard/keenetic_privatekey | wg pubkey | tee /etc/wireguard/keenetic_publickey
wg genkey | tee /etc/wireguard/mikrotik_privatekey | wg pubkey | tee /etc/wireguard/mikrotik_publickey

Сформируем файл в каталоге /etc/wireguard с именем wg0.conf и следующим содержанием:

[Interface] 
PrivateKey = <здесь privatekey> # Приватный ключ из файла privatekey. 
Address = 10.0.0.1/24 #Адрес VPN-сервера в частной сети. 
ListenPort = 51830 #Порт, который будет слушать VPN-сервер. 
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT 
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT 
[Peer] 
PublicKey = <keenetic_publickey> #Публичный ключ роутера Keenetic 
AllowedIPs = 192.168.0.0/24, 10.0.0.2 
[Peer] PublicKey = <mikrotik_publickey> #Публичный ключ роутера Mikrotik 
AllowedIPs = 192.168.88.0/24, 10.0.0.3

Параметр AllowedIPs как раз определяет, какой адрес источника пакетов будет передан в шифрованный канал. В настройках пира для каждого роутера записана подсеть другого роутера — плюс IP адрес пира, которой образуется в результате его подключения, чтобы с VPS сервера можно было достутчаться до хостов во внутренних сетках. Т.е. когда коннектится Keenetic, его пир имеет адрес 10.0.0.2, и пакеты из 192.168.0.0 и с 10.0.0.2 будут отправляться в шифрованный канал. С MikroTik — зеркально.

Теперь надо настроить сервис WG на VPS. На Ubuntu это делается командами:

systemctl enable wg-quick@wg0.service
systemctl start wg-quick@wg0.service

Эти команды стартуют сервис WG с настройками из указанного конфиг файла, т.е. wg0.conf. Далее надо настроить WG клиенты на роутерах. Начнём с Keenetic.

Не буду тут писать про то, как добавить WG в Keenetic — этой информации полно. После добавления в разделе Internet -> Other connections появится раздел WireGuard, где мы и настроим нужные параметры. Нажмём Add Connection и заполним нужные параметры пира на роутере:

параметр

значение

Name

название соединения, заполняем на своё усмотрение

use for accessing internet

не крыжим, иначе весь траффик уйдёт на VPN, а нам это не надо

Private key

используем данные из файла keenetic_privatekey

Address

10.0.0.2/24 — это IP адрес роутера Keenetic в сети VPN

Listen port

вообще любой

DNS

я использовал 8.8.8.8

Peer name

любой

Public key

данные из файла publickey самого сервера

Endpoint

<x.x.x.x:ListenPort> — используйте IP адрес VPS и порт, заданный в wg0.conf

Allowed IPs

0.0.0.0/0 — всё, что приходит на пир, отправляем в VPN

Persistent keepalive

15 — интервал опроса живости интерфейса в секундах

После этого у роутера Keenetic установится соединение с VPN сервером. Далее надо настроить MikroTik. Тут надо отметить, что поддержка WireGuard в MikroTik появилась только с седьмой версии RouterOS, но апгрейд выходит пока за рамки данной статьи и я предполагаю, что вы смогли проапгрейдиться.

Открываем вкладку в WebFig с названием WireGuard и заполняем параметры — это настройки пира на роутере:

параметр

значение

Name

любое

Listen Port

любое, у меня 51380

Private Key

содержимое файла mikrotik_privatekey

Переходим во вкладку Peers, потом Add New, заполняем параметры пира:

параметр

значение

Interface

Name из предыдущего шага

Public Key

содержимое publickey сервера

Endpoint

x.x.x.x — IP адрес VPS сервера

Endpoint Port

Listen Port из wg0.conf

Allowed Address

0.0.0.0/0

Вот мы и настроили связь между двумя сетями.

Дальше по списку — настройка VPN соединений для выхода, скажем, телефонов, в свободный интернет. Я потратил кучу времени и нервов, и итог получился следующий. Почему так — станет понятно из материала дальше по тексту. По итогу вывод получился следующий — нельзя настроить на одном интерфейсе выход в интернет клиентских устройств и связь между сетями

Поэтому, если я и кто-то из семьи хотим выходить в свободный интернет через VPS сервер, на него придётся добавить новые интерфейсы. Почему же так получается?

Предположим, что на телефон установлено приложение WireGuard, настроены ключи и т.д. Устанавливаем коннект с сервером, и телефон отправляет пакет на зарубежный интернет сервер, скажем, google.com. Пакет отправляется пиром телефона на пир сервера, в интерфейс wg0. В результате правильной настройки пакет с этого интерфейса форвардится на интерфейс eth1, подвергается маскараду и натированию, и уходит в большой мир. Сервер google.com отвечает на наш пакет, он приходит на eth1 и форвардится на wg0, попадая на пир сервера, и тут мы натыкаемся на проблему. В настройках серверного пира указано, пакеты с каких IP адресов или сетей должны уходить в канал. Сервера google.com там сейчас нет, поэтому ответ на телефон просто не вернётся и соединение не будет установлено. Хорошо, добавим в настройки серверного пира для телефона 0.0.0.0/0, все пакеты будут уходить на телефон — профит. После рестарта интерфейса wg0 мы с удивлением обнаружим, что наш VPS сервер больше недоступен — не пингуется, не коннектится по ssh и текущий терминал вообще завис, потому что теперь весь трафик уходит в пир, даже тот, который для него не предназначен. Именно поэтому организовать на одном интерфейсе желаемую схему нельзя. Ещё одни грабли, на которые я наступил — в рамках одного интерфейса невозможно сделать так, чтобы пакеты уходили в несколько пиров — пакет уходит в тот пир, для которого есть подходящий параметр Allowed IPs.

Но создать новые интерфейсы довольно просто. В папке /etc/wireguard копируем wg0.conf в wg1.conf, и создаём новую ключевую пару:

wg genkey | tee /etc/wireguard/user1_privatekey | wg pubkey | tee /etc/wireguard/user1_publickey

Редактируем wg1.conf

[Interface]
PrivateKey =  <здесь тот же серверный private key> # Приватный ключ из файла privatekey.
Address = 10.0.1.1/24 #Адрес VPN-сервера в частной сети.
ListenPort = 51831 #Порт, который будет слушать VPN-сервер.
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE #Команды, который будут выполнять при поднятии сервера
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE #Команды, который будут выполнять при выключении сервера
[Peer]
PublicKey =  <публичный ключ user1> #Публичный ключ user1
AllowedIPs = 10.0.1.0/24

Для того, чтобы данная конфигурация заработала, необходимо настроить IP forwarding на сервере — иначе пакеты из интерфейса wg1 не будут форвардиться в eth0, т.е. в интернет, и обратно:

echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf

Итак, какие ключевые изменения получил конфиг по сравнению с интерфейсом обмена между сетями?

Во-первых, изменился Address, там теперь другая подсеть VPN — 10.0.1.0/24. Соотвественно, и AllowedIPs тоже изменился — все пакеты из этой подсети надо отправлять в peer.

Изменился ListenPort — сервер WG будет принимать соединения для этого интерфейса на другом порту.

Изменились команды PostUp и PostDown — для доступа в интернет недостаточно правил форвардинга, надо ещё и поднимать NAT и masquerade, но это тема совсем другой статьи.

На этом пока всё, настроена интеграция дачной и квартирной сети, и VPN выход в интернет через один и тот же VPS. За кадром пока осталась генерация QR кодов для настройки клиентов — думаю, с этим проблем быть не должно, отмечайте в комментариях, возникают ли проблемы на этом этапе, чтобы было понятно, надо ли обновить мануал.

рассвет, москва, деревья, мгу, мосфильмовскаяСегодня случилось страшное. Мой провайдер MosLine, без каких-либо объявлений или предупреждений сменил мне публичный IPv4 адрес на частный. В результате отключились две важные для меня функции: связь нескольких разрозненных локальных сетей и туннелирование IPv6 (использовался 6in4 вариант туннелирования, когда требуется наличие «белого» IPv4 адреса), поскольку MosLine (вкупе с его дочерней Optic-Inet) так и не научился раздавать своим клиентам IPv6. Собственно, отключение вбило очередной гвоздик в гробик провайдера, так как я уже сейчас могу получить минимум вдвое более быстрый канал через мобильную сеть и вдвое дешевле (см. статью о современных средствах добычи мобильного интернета). И единственные две вещи, которые меня останавливают от перехода на более дешевого альтернативного провайдера, так это необходимость перекраивания внутренней локальной инфраструктуры, а также необходимость инвестирования в новое оборудование. Ну и ping на мобильной сети не такой комфортный, как на оптике. И пока я раздумываю над сменой провайдера, необходимо закрыть хотя бы первую функцию, а именно связать разрозненные локальные сети в единое информационное пространство. Благо, у меня есть несколько VPS-серверов, которые можно оперативно использовать для решения этой проблемы.

Итак, в качестве инфраструктуры у меня используются роутеры, или как говорят англоязычные специалисты «рутеры», Keenetic. Может быть, данные роутеры не самые продвинутые в плане настроек, но они не кушают мозг в процессе эксплуатации (один раз настроил и работает годами), а при самой настройке нет необходимости бегать кругами вокруг роутера, курить трубку и бить в бубен исполняя тотемный танец по призыву коллективного разума с вопросом «а почему не работает». На стороне VPS, как водится, у меня крутится разновидность Linux.

Локальные сети еще издревле соединялись между собой через сети общего пользования посредством VPN-технологии. За десятилетия развития VPN появилось несметное некоторое количество вариантов VPN-протоколов и соответствующего программного обеспечения. Традиционно для VPN используются такие варианты VPN-протоколов, как IPSec/L2TP, PPTP или OpenVPN. Но в последнее время все больше набирает популярность такой протокол для организации VPN как WireGuard. Создатели WireGuard позиционируют свое решение как быстрое, современное и безопасное решение для организации виртуальных частный сетей. И судя по тестам, заявления совсем не беспочвенные. WireGuard работает весьма шустро, кушает очень мало ресурсов и поддерживается актуальными системами (как на Linux, так и на Windows, Android и т. п.), что позволяет соединять вместе различные устройства, работающие под разными операционными системами. Но помимо легковесности и безопасности у WireGuard есть еще одно преимущество, его довольно-таки просто установить и настроить.

В сети существует множество инструкций о том, как установить WireGuard в виде любого сетапа, на любое устройство и для любых целей. Не буду их повторять, но порекомендую, исключительно для облегчения и ускорения процесса, воспользоваться WireGuard installer. Скрипт устанавливает WIreGuard на основные Linux дистрибутивы и позволяет осуществлять простую настройку как сервера, так и облегчает добавление новых пиров к серверу. В принципе, для WireGuard существует около двух десятков установщиков, поэтому не обязательно, особенно если есть силы, использовать указанный выше скрипт-инсталлятор. Вполне можно обойтись другим решением или установить все руками с начала и до конца.

Итак, скачав скрипт, дав ему права и, наконец, запустив wireguard-install.sh, а затем ответив на несколько примитивных вопросов или просто понажимав Enter, можно наконец выдохнуть. По умолчанию, скрипт добавляет одного клиента (пира). Для добавления нового или удаления старых клиентов (пиров) необходимо запустить скрипт еще раз. Ну или отредактировать текстовой конфигурационный файл. Он, как правило, располагается в /etc/wireguard и называется аналогично названию WireGuard интерфейса, обыкновенно это wg0.conf. Данный файл можно редактировать текстовым редактором, однако, для того, чтобы изменения вступили в силу, следует перезапустить WireGuard. Остановка и последующий запуск осуществляются через команду wg-quick [down|up] wg0. Где wg0 как раз название интерфейса/имя конфигурационного файла.

Вообще, в рамках WireGuard нет такого понятия как сервер и клиент. Есть понятие пиры. Так подняв «сервер» на VPS и прописав в нем «клиента» я просто создал возможность для соединения этих устройств. Но никто из них не будет являться сервером, в классическом понимании. Разделение в WireGuard на относительный «сервер» и потенциального «клиента» лишь в том, кто сам пытается соединиться (клиент), а кто просто ожидает соединения (сервер).

При создании клиентов через скрипт, он выводит на экран могучий QR-код, который можно использовать, чтобы подцепить настройки подключения, например, мобильным телефоном. Параллельно настройки клиента складываются в каталог, откуда запускается скрипт, в файл с именем wg0-client-S21.conf. В данном случае в имени зашифровано название интерфейса wg0, и наименование клиента S21. Вся эта же информация копируется и в основной конфигурационный файл wg0.conf (тот, который в /etc/wireguard). Если потребуется внести изменения в конфигурацию, то редактировать нужно именно wg0.conf, так как «клиентские» файлы нужны исключительно для импорта в клиентские инсталляции.

Пробежимся по основному конфигурационному файлу, который сгенерировал для моей инсталляции скрипт. Файл сформирован для интерфейса wg0. Разумеется, все ключи, как приватные, так и публичные, удалены из файла, равно как и публичные IP-адреса.

[Interface]
Address = 10.66.66.1/24,fd42:42:42::1/64
ListenPort = 53569
PrivateKey = Частный ключ 1
PostUp = iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

### Client Dacha
[Peer]
PublicKey = Публичный ключ 2а
PresharedKey = Совместно используемый ключ 2
AllowedIPs = 10.66.66.2/32,192.168.0.0/24,fd42:42:42::2/128

### Client S21
[Peer]
PublicKey = Публичный ключ 3а
PresharedKey = Совместно используемый ключ 3
AllowedIPs = 10.66.66.3/32,fd42:42:42::3/128

В рассматриваем примере есть три секции, соответственно одна Interface для задания настроек «серверной» части WireGuard для конкретного интерфейса и две секции Peer для «клиентов-пиров». Авторами WireGuard предполагается, что система настолько простая, что никакая документация для нее не нужна. Поэтому ее особо и нет. Однако, не все настолько проницательны и готовы перелопатить 4000 строк исходного кода, чтобы разобраться, что к чему. Поэтому в сети появилась неофициальная документация по WireGuard. Я же попробую вкратце пробежаться по всем приведенным параметрам, с дополнительными комментариями там, где они нужны, так как из-за отсутствия официальной документации иногда не просто сообразить какой параметр куда вставлять, чтоб наконец заработало.

Итак, в секции Interface задаются параметры настроек для «серверной части» WireGuard. В параметре Address перечисляются через запятую внутренние адреса интерфейса в нотации CIDR. Тут следует обратить внимание на то, что используется не только внутренний IP-адрес внутри виртуальной частной сети (VPN) в пространстве IPv4, но и в адресном пространстве IPv6. Обратите внимание, что в обоих случаях /24 и /64 назначается целая подсеть. Для IPv4 в эту подсеть можно уместить до 254 адресов, а для IPv6 их будет уже 18.446.744.073.709.551.616 штук, такова особенность IPv6, адресов там невообразимо много. Еще одно замечание, обе подсети относятся к «частным» пулам адресов. Кстати, Address может быть указан и для единственного адреса, а не для сети. В этом случае никакой маршрутизации по сети, к которой относится указанный адрес, производиться не будет. Следующий параметр ListenPort означает порт, который интерфейс «слушает» и принимает входящие соединения. Если не указать порт, то соответственно никто подключиться к интерфейсу извне не сможет, однако, возможность маршрутизации останется.

PrivateKey – частный ключ, который не сообщается ни одному из пиров. Этот ключ используется только на стороне «сервера». При задании ключей можно обратить внимание, что они все оканчиваются на символ ‘=’.

PostUp и PostDown команды выполняемые после включения и отключения интерфейса соответственно. Здесь указываются именно команды в том виде, в котором они будут переданы интерпретатору операционной системы. Команды могут быть перечислены через точку с запятой или же можно указать несколько параметров PostUp и PostDown. В моем примере скриптом-установщиком сгенерированы команды маршрутизации посредством iptables. Соответственно при «поднятии» интерфейса эти правила применяются, а после отключения удаляются. Таким образом сохраняется стабильность сетевого трафика и сетевые пакеты не будут улетать в неизвестном направлении.

Помимо перечисленных параметров в конфигурационном файле могут применяться и другие параметры. PreUp и PreDown параметры аналогичны PostUp и PostDown, но выполняются перед действием «поднятия» или отключения интерфейса. Параметр DNS применяется для передачи подключаемым пирам адресов DNS-серверов посредством DHCP-протокола. Но обычно, клиенты прописывают DNS-сервера на своей стороне и игнорируют DNS-сервера предлагаемые со стороны сервера. Серверов можно указать несколько, через запятую, равно как и использовать не только IPv4, но и IPv6 адреса.

MTU устанавливает максимальный размер величины единичного пакета или фрейма с данными. Как правило, данный параметр устанавливается автоматически, базируясь на настройках подключаемого пира или уже используемой маршрутизации в системе. При настройке секции Interface можно использовать еще один параметр Table. Он указывает на используемую таблицу маршрутизации в операционной системе, что полезно в случае сложного сетевого окружения на крупных узлах.

При настройке секции Peer в WireGuard присутствует правило хорошего тона: каждую секцию предварять строкой комментария с наименованием пира. Когда пиров или клиентов становится много, то понять кто из них кто становится очень не просто. При генерации пиров через скрип-инсталлятор, он каждую секцию Peer предваряет символами комментария ### и последующим наименованием пира. Несмотря на наименования пиров в файле конфигурации, в самом WireGuard, например, при выводе статистики соединений, эти наименования никак не будут отражаться, что, разумеется, не так удобно. Опознать нужный пир можно только по адресу или же по публичному ключу.

PublicKey – публичный ключ для клиента, данные передаваемые клиенту шифруются этим ключом, следует обратить внимание, что в конфигурационных файлах пиров-клиентов этот ключ другой. PresharedKey – еще один уровень защиты применяемый для шифрования канала. Этот ключ смешивается вместе с парой открытого и закрытого ключей и необходим как последний аргумент в защите зашифрованного канала. Если злоумышленник каким-то образом вытащит приватный ключ, то он все равно не сможет расшифровать поток данных, так как ему потребуется узнать и PresharedKey. Однако, этот параметр опциональный, если его не указать, то «совместно используемый ключ» будет состоять из нулей. Разумеется, PresharedKey должен идентичен на стороне сервера и на стороне клиента.

AllowedIPs – список IP-адресов в CIDR нотации, т.е. это могут быть не только адреса конечных машин, но и сетей. Адрес может быть указан из IPv4 или IPv6 адресного пространства. Этот список определяет адреса, которые будут маршрутизироваться непосредственно в этот пир. При запуске интерфейса выполняется команда добавления маршрута на подобии ip route add …. Параметр довольно-таки важный, особенно важно обратить на него внимание, если требуется маршрутизировать целую сеть, которая находится за устройством пира. В рассматриваемом примере для пира Dacha указано целых три адреса, а именно:

  • 10.66.66.2/32 – адрес машины в подсети создаваемой VPN. 10.66.66.1 это адрес собственно сервера WireGuard, а 10.66.66.2 это адрес роутера Keenetic.
  • 192.168.0.0/24 – адрес сети за пиром (роутером Keenetic), я хочу, чтобы WireGuard сервер прокидывал туда пакеты, которые будут попадать на его интерфейс.
  • fd42:42:42::2/128 – адрес машины в подсети создаваемой VPN, но в адресном пространстве IPv6.

С использованием смекалки и параметра AllowedIPs можно городить весьма странные и запутанные конфигурации для маршрутизирования пакетов. Иногда сообразить руками все пересечения сетей и адресов проблематично, но в этом случае можно воспользоваться специализированными калькуляторами, например, от Pro Custodibus-а.

EndPoint – в настройках сервера он не указан, так как все мои клиенты находятся на «серых», непубличных IPv4 адресах и к ним извне невозможно подключиться. Указывается в виде адрес:порт, допускается использование как доменного имени, так и IPv4 или IPv6 адреса. А поскольку на стороне сервера мы только слушаем, то и параметр PersistentKeepalive, определяющий периодическую проверку соединения в секундах и его переинициализацию в случае потери связи, благополучно отсутствует.

Вот, собственно, и все настройки, которые доступны на сервере. На клиенте, в общем-то доступны все те же настройки, так как в WireGuard нет такого понятия как клиент или сервер, есть только пиры. При добавлении пира через скрипт-инсталлятор на VPS-сервере он не только добавляет его в файл для настройки пира, но и в общий конфигурационный файл интерфейса WireGuard (тот самый wg0.conf). Посмотрим на него повнимательнее (это конфигурация пира Dacha).

[Interface]
PrivateKey = Частный ключ 2
Address = 10.66.66.2/32,fd42:42:42::2/128
DNS = 8.8.8.8,1.1.1.1

[Peer]
PublicKey = Публичный ключ 2б
PresharedKey = Совместно используемый ключ 2
Endpoint = адрес:53569
AllowedIPs = 0.0.0.0/0,::/0

При генерации настроек пира скрипт создает уникальные пары ключей, а именно «Частный ключ 2» и «Публичный ключ 2б». Они нигде не фигурируют в общем конфигурационном файле интерфейса wg0.conf. Более того, сгенерированные файлы настроек пиров можно вообще удалить после импорта настроек в клиентов. Дополнительно следует обратить внимание на то, что «Совместно используемый ключ 2» он одинаков как со стороны настроек клиента, так и со стороны настроек сервера.

В секции Interface присутствует всего три параметра:

  • PrivateKey – содержит частный ключ пира, он отличается от серверного ключа.
  • Address – содержит уникальный в разрезе создаваемой VPN адрес пира. Прошу обратить внимание, что тут указывается именно адрес конкретной машины, роутера, телефона, устройства в общем, а не сети.
  • DNS – те сервера DNS, которые будут использоваться для разрешения мнемонических адресов в цифровые, вполне можно не указывать, особенно, если вы не планируете использовать VPN для выхода в интернет.

В секции Peer уже четыре параметра:

  • PublicKey – публичный ключ. Следует обратить внимание, что этот ключ отличается от ключа в настройках сервера.
  • PresharedKey – совместно используемый ключ для улучшения защиты от угона компрометации ключей шифрования. Здесь он совпадает с тем, что указаны в настройках сервера.
  • EndPoint – публичный адрес и порт сервера, на котором он принимает подключения VPN. Может быть IPv4, IPv6 или мнемоническим адресом, типа vpn.microsoft.ucoz.net.
  • AllowedIPs – действует аналогично серверной настройке. В примере указаны ‘0.0.0.0/0’ и ‘::/0’, что означает, что весь трафик с пира должен быть отправлен в VPN-туннель. Если мы хотим, чтобы по туннелю «бегали» пакеты только к подключенным сетям, а весь трафик в Интернет уходил по обычному пути, то тут следует установить что-то типа ‘10.66.66.0/24,192.168.78.0/24,192.168.13.0/24’ или аналогичное, в зависимости от того, какие частные сети подключены к VPN. Более того, поскольку в качестве основных клиентов у меня выступают Keenetic-и, то там маршрутизация WireGuard работает несколько иным способом и это поле теряет свою актуальность при настройке WireGuard на Keenetic-ах.

В примере выше отсутствует такой важный для клиентской части параметр, как PersistentKeepalive (он описан в серверной части). WireGuard относится к так называемым Stateless (или скорее Connection-less) системам, системам, в данном контексте, которые не беспокоятся о состоянии VPN-канала, не поддерживают его в постоянно подключенном состоянии. Так, подключившись однажды и не передавая никакой трафик, система будет думать, что VPN-канал установлен и находится в полном рабочем состоянии. Даже в статистике WireGuard пир будет обозначен как живой, правда последняя активность на нем была, ну скажем 148 часов тому назад. Вот тут и помогает настройка PersistentKeepalive, которую нужно устанавливать на пире, который будет подключаться к серверу. В нашем случае это Keenetic без публичного IP-адреса. Обычно параметр PersistentKeepalive устанавливают равным нескольким десяткам секунд. Именно с этой периодичностью WireGuard со стороны пира, подключающегося к серверу (по сути, он тоже пир, только сам никуда не подключается), будет проверять работоспособность канала и если она нарушена, то будет инициализировать его восстановление.

С серверной настройкой все сделано, теперь очередь за Keenetic-ом. В современных версиях операционной системы для Кинетиков есть возможность установки дополнительных модулей. Для установки WireGuard необходимо выбрать соответствующий компонент в настройках операционной системы роутера. После чего применить настройки. Компонент скачается и установится.

Следующим шагом будет создание интерфейса подключения к «серверу». Подключения через WireGuard настраиваются и создаются на страничке «Другие подключения» в группе «Интернет». В соответствующей части страницы жмем «Добавить подключение» и тут у нас появляется форма для добавления нового интерфейса и заодно пира (или нескольких) для подключения.

Интерфейс настройки WireGuard на Keenetic

Интерфейс настройки WireGuard на Keenetic

Приведу расшифровку полей интерфейса настройки подключения у Keenetic:

  1. Название интерфейса. Следует сделать его понятным, поскольку в дальнейшем он будет использоваться еще в других местах.
  2. Если поставить галку, то весь трафик с роутера во вне будет уходить в установленный туннель. Для соединения локальных сетей не ставим.
  3. Поле для ввода приватного ключа. Генерировать новую пару не стоит, так как эту работу уже проделал скрипт-инсталлятор. Нужно скопировать «Частный ключ 2» из сгенерированного на сервере файла для данного пира и нажать на кнопку «Установить частный ключ».
  4. Вводим адрес данного устройства в сети VPN. Опять же, берем его с сгенерированного на сервере файла. Обязательно указываем модификатор /32, отображающий, что это конкретное устройство, а не подсеть. Используем только IPv4 адрес, так как WireGuard для Keenetic еще не научился работать с IPv6 (и это печально на самом деле).
  5. Указываем имя пира, к которому роутер будет подключаться для установления связи. Пиров можно задавать несколько, но это имеет смысл, если роутер выступает в качестве сервера.
  6. Указываем «Публичный ключ 2б» из файла.
  7. Указываем «Совместно используемый ключ 2» из файла.
  8. Указываем адрес и порт, к которому подключаемся для создания VPN-туннеля. Параметр Endpoint из файла.
  9. Оставляем как есть 0.0.0.0/0.

Дополнительные параметры настройки подключения: порт прослушивания оставляем пустым, так как мы не планируем получать подключения к Keenetic-у, наоборот, он сам будет подключаться к серверу. DNS сервера можно указать, можно не указывать. Они нужны только в случае, если VPN будет использоваться для выхода в Internet. Размер MTU можно оставить пустым, если, конечно, специально нет задачи его изменить. «Подстройка TCP MSS» оставляем включенной.

В поле «Разрешенные подсети», кроме 0.0.0.0/0 правильнее было бы перечислить все сети из AllowedIPs серверного конфигурационного файла (wg0.conf или аналогичного), но в реализации WireGuard для Keenetic это поле не вызывает включение маршрутизации до этих адресов и сетей при «поднятии» туннеля с сервером. Маршрутизация настраивается отдельно. Об этом ниже.

Если сейчас все сохранить и включить ползунком подключение к серверу VPN, то все подключится. Вот только работать не будет. Для включения полной работоспособности нужно настроить «Межсетевой экран» и маршрутизацию.

Настройка межсетевого интерфейса на Keenetic для VPN

Настройка межсетевого интерфейса

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

Настройка маршрутизации на Keenetic

Настройка маршрутизации на Keenetic

Следующим этапом необходимо включить маршрутизацию пакетов к удаленным сетям. Так как у нас не планируется пускать весь трафик через VPN, то следует определиться, к каким сетям следует включить маршрутизацию. В рассматриваемом сетапе необходимо включить маршрут к самой сети VPN, а именно 10.66.66.0/24. Иначе, даже ping работать не будет. Роутер получит ICMP-запрос на ping, обработает его, но ответный пакет отправит не через VPN, а по маршруту по умолчанию, т.е. провайдеру. При задании маршрута адрес сети/устройства можно указывать в формате CIDR, можно только традиционным путем с указанием отдельной маски. Адрес шлюза указывать нет необходимости, так как мы выбираем целиком интерфейс, созданный для подключения к WireGuard VPN. Галочка «Добавлять автоматически» делает ровно то, что делает PostUp/PostDown на сервере: если интерфейс включен, то включается маршрут, если он отключен, то маршрут аналогично отключается.

В приведенном примере в качестве пиров-клиентов у меня указан только смартфон и один роутер Keenetic. В действительности пиров-Keenetic-ов с локальными сетями за ними несколько больше. И на каждом из них следует прописать отдельный маршрут к удаленной сети с прохождением через настроенный WireGuard интерфейс. Иначе роутер не будет отправлять пакеты по VPN, хотя все сети к этой сети подключены. При изменении настроек файрволла (межсетевого экрана) и маршрутизации необходимо учитывать, что на кинетиках данные настройки иногда не включаются моментально, а им требуется некоторое время, прежде чем они заработают.

Как проверять соединение? Самыми обычными средствами, а именно посредством ping и traceroute (tracert). Пинговать следует как со стороны сервера, так и со стороны клиента. Для начала пингуются адреса сервера и клиента в локальной сети VPN-а, в нашем случае это 10.66.66.1 и 10.66.66.2. Затем пингуются устройства, находящиеся внутри подключаемой локальной сети, начать можно с адреса роутера в этой локальной сети, в нашем случае это 192.168.0.1. В сложных случаях понять, что не так, может помочь трассировка, тогда становится понятно, где проблема, если пакет, вместо того чтобы двигаться в туннель, вдруг уходит провайдеру интернета. Одной из интересных и часто встречающихся проблем является ошибка ping: sendmsg: Destination address required. Возникает она, как правило, при забывчивости настройки AllowedIPs на стороне сервера для конкретных клиентов.

Насколько сильно WireGuard грузит сервер? Вопрос очень интересный. Разрабатывался WireGuard не только как простой в использовании инструмент для создания VPN, но еще и весьма быстрое, не требовательное к ресурсам решение. Но, а как оно в реальных условиях? На двухпроцессорном VPS нагрузка при копировании файла между двумя пирами на скорости 80 Мбит составляла порядка 10%. Дополнительный расход памяти на работу WireGuard при активных сетевых операциях зафиксировать не удалось. Другими словами, нагрузка на процессор есть, но она минимальна, тем более что в реальности трафик через VPN не настолько велик и тем более, не постоянен.

Что означает «Последнее рукопожатие» в интерфейсе WireGuard на Keenetic? WireGuard VPN для своей работы использует протокол UPD, в отличии от TCP, в нем не гарантирована доставка пакетов от одного адресата до другого. Пакеты могут не доходить, могут теряться, могут доходить разными маршрутами и, как следствие, в неверном порядке. Все это ведет к тому, что нарушается целостность VPN-соединения. WireGuard автоматически исправит эти нарушения, но ситуация может потребовать переустановления связи. Более того, при нормальной работе, когда не нарушается обмен пакетами, пиры в автоматическом режиме через случайные промежутки времени обмениваются новыми парами ключей шифрования. Делается это специально для усложнения расшифровки зашифрованного потока данных. Обе эти операции приводят к сбросу счетчика последнего рукопожатия.

PS. Кстати, в мире существует еще одно интересное решение для организации VPN в сложных условиях, например, когда нет административных прав на сервере или требуется проходить через довольно строгие NAT и FireWall. Имя ему SoftEther VPN, но для решения моей задачи он излишне тяжеловат.



В данной заметке я расскажу, как организовать соединение с вашей локальной сетью за роутером Keenetic, если у вас уже настроен выход в интернет через WG сервер с роутера и телефона.

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

Помимо защиты ваших интернет соединений VPN может обеспечить соединение с вашей домашней сетью. Таким образом я организую свое небольшое облако. Файлы из моей домашней сети всегда доступны, где бы я не был.

Как я уже говорил у вас уже должен быть настроен Wireguard сервер, роутер и телефон должны выходить через этот сервер в интернет. Я же расскажу, как с телефона попасть в локальную сеть за роутером с использованием Wireguard, и при этом не потерять VPN выход в интернет. Для этого нужно будет использовать консоль роутера Keenetic.

Спонсор поста

Настройка Keenetic

Если доступа в консоль нет, то его надо включить. Для этого перейдите в раздел “Управление” -> “Пользователи и доступ”. Проверьте что установлен порт управления по SSH и активирован пункт “Подключения к командной строке по SSH”.

Настройка доступа к Keenetic

Также убедитесь, что у вас есть пользователь, у которого есть права входа через SSH. На той же странице у вас есть список пользователей. Зайдите в редактор прав пользователя, и убедитесь что у него активирован пункт “Доступ к командной строке (TELNET и SSH)”.

Настройка прав доступа пользователя Keenetic

Теперь заходим в консоль управления роутером.

ssh username@192.168.0.1
(config)>

Первым делом нам надо узнать, какой интерфейс был присвоен нашему соединению на роутере. Если это ваше первое соединение с Wireguard, то скорее всего это Wireguard0. Но давайте убедимся в этом.

Для этого необходимо ввести interface Wire и нажать Tab:

(config)> interface Wire

    Usage template:
        interface {name}

    Choose:
        Wireguard
        Wireguard0

Чтобы точно убедиться выведите информацию об интерфейса.

(config)> show interface Wireguard0

    id: Wireguard0
    index: 1
    type: Wireguard
    description: vpn-example
    interface-name: Wireguard0
    link: up
    connected: yes
    state: up
    mtu: 1324
    tx-queue-length: 50
    address: 10.66.67.2
    mask: 255.255.255.255
    uptime: 5
    global: no
    security-level: public

        wireguard:
           public-key: PUBLIC_KEY
          listen-port: 48951
               status: up

                 peer:
               public-key: PUBLIC_KEY
                    local: 37.112.97.194
               local-port: 48951
                      via: PPPoE0
                   remote: 3.64.232.61
              remote-port: 54161
                  rxbytes: 92
                  txbytes: 180
           last-handshake: 5
                   online: yes

По названию и адресу понимаем, что это нужное соединение.

Keenetic Wireguard

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

(config)> interface Wireguard0
Core::Configurator: Done.
(config-if)> ip access-group _WEBADMIN_Wireguard0 in
Network::Acl: Input "_WEBADMIN_Wireguard0" access list added to "Wireguard0".
(config-if)> system configuration save
Core::ConfigurationSaver: Saving configuration...

Теперь надо добавить статический маршрут до сети Wireguard.

(config)> ip route 10.66.67.0 255.255.255.0 Wireguard0 auto
Network::RoutingTable: Added static route: 10.66.67.0/24 via Wireguard0.

Не забудьте заменить значения на свои. 10.66.67.0 на свою подсеть Wireguard, а Wireguard0 на свой интерфейс.

Настройка сервера WG

Теперь нужно настроить сервер Wireguard. Для этого нужно отредактировать файл конфигурации, обычно он лежит в папке /etc/wireguard/wg0.conf. Зайдите под root.

su
nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.66.67.1/24,fd42:42:43::1/64
ListenPort = 54161
PrivateKey = PRIVATE_KEY
PostUp = iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables $
PostDown = iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6table$

### Client router
[Peer]
PublicKey = PUBLIC_KEY
PresharedKey = PRESHARED_KEY
AllowedIPs = 10.66.67.2/32,fd42:42:43::2/128,192.168.1.0/24

### Client phone
[Peer]
PublicKey = PUBLIC_KEY
PresharedKey = PRESHARED_KEY
AllowedIPs = 10.66.67.3/32,fd42:42:43::3/128

У нас тут все стандартно. Два пира, один из них роутер, второй телефон. Для роутера необходимо указать в AllowedIPs вашу локальную сеть, в данном случае 192.168.1.0/24.

После этого отключим и включим WG соединение.

wg-quick down wg0
[#] ip link delete dev wg0
[#] iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
wg-quick up wg0
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 10.66.67.1/24 dev wg0
[#] ip -6 address add fd42:42:43::1/64 dev wg0
[#] ip link set mtu 8921 up dev wg0
[#] ip -4 route add 192.168.0.0/24 dev wg0
[#] iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

После этого у вас должен появится доступ к локальной сети роутера с телефона через Wireguard VPN. По аналогии можно настроить доступ к локальной сети для остальных устройств.

Устанавливаем и настраиваем личный сервер с ВПН на роутере Кинетик. Подключаемся к собственному роутеру с сервером в любой точке мира.

Настраиваем свой VPN-сервер на Keenetic

Сервер позволяет подключить к другой сети, роутеру (все лучшие VPN для роутеров любой фирмы), или маршрутизатору Keenetic. Это обеспечивает возможность удаленного доступа через смартфон, планшет или с любого другого устройства, даже если пользователь находится не дома.

Вход в настройки и включение DDNS

Подключить к локальной сети Keenetic можно двумя способами:

  • Кабелем через локальный порт;
  • По Wi-Fi.

Для использования интерфейса в браузере нужно ввести IP-адрес роутера (192.168.1.1) или адрес сайта — my.keenetic.net. Остается авторизоваться в системе, используя логин и пароль (если не были изменены, то их можно найти на коробке с устройством).

Смысл сервера – в доступе к нему извне. Подключение производится через внешний адрес маршрутизатора. Однако есть нюансы. Провайдеры выдают два адреса:

  • Белый динамический;
  • Серый статический.

Обязательно, чтобы провайдер выдал внешний фиксированный (белый) адрес. Если нет – на новых прошивках KeenDNS есть возможность подключиться к статистическому IP. Создается облачный DDNS, работающую напрямую или через облако. При взаимодействии с последними сборками прошивки:

  • Перейдите в параметр «Доменное имя» и вводим любое название, нажимаем «Зарегистрировать».
  • Если имя не занято – роутер уведомит об этом и выдаст 3 поддомена (можно выбрать любой).
  • Для серого IP перейдите в «Общие настройки» и активируйте «Keenetic Cloud».
  • На экране появится диалоговое окно – дождитесь, пока оборудование загрузит SSL-сертификаты. Затем выберите «Режим работы»: через облако – для серого IP, прямой доступ – для белого адреса.

Если на роутере старая прошивка, то с серым IP ничего не сделать. Можно только подключиться к другому провайдеру или купить новую модель Keenetic. Для пользователей с белым IP – нужно аналогично настроить DDNS:

  • Зайдите в параметр «Интернет», затем в «DDNS».
  • Изучите список серверов. В стандартном варианте доступны: Dyn, No-Ip и DNS-Master.
  • Зайдите на сайт этих серверов, зарегистрируйте и сформируете DDNS.
  • Зайдите обратно в настройки и введите параметры DDNS.

Настройка WireGuard-сервера

Из-за особенностей протокола обозначения «клиент» и «сервер» становятся условными. Возможность организовать WireGuard-туннель появилась в версии ПО KeeneticOS 3.3 — функция работает только на новых устройствах. Подключение работает в формате «Site-To-Site VPN». Если у одного из интернет-центров есть белый IP — лучше настроить его как сервер. WireGuard можно использовать только для связи двух сетей (обычно роутеров) в одну локальную.

Другой важный нюанс – настройка производится на обоих устройствах сразу. К примеру, параметры сервера обозначены с компьютера, а клиента – со смартфона (лучшие VPN для телефона смотрите отдельно). При этом можно организовать туннель между роутерами в разных точках мира. Например, если подключается связь к серверу VPN-сервиса.Для настройки зайдите в компоненты и добавьте WireGuard. Затем:

  • В названии укажите имя английскими буквами. Для примера: на одном устройстве (сервере) – Sev, на другом (клиенте) – CL. Оба должны быть открыты.
  • Кликните на «Генерацию пары ключей».
  • В строке с адресом впишите IP-туннель с bitmask (допускается указание любого спектра из частного диапазона). Если проще, частные адреса – это те, что действуют внутри локальной сети и не доступны в интернете. Для примера возьмем 172.16.82.1/24, номер порта – 16632 (через него и будет оформляться подключение устройств, роутер сам его откроет). Нажмите на «Добавить».
  • В роутере CL добавьте подключение с названием Sev и кликните на «Генерация пары ключей», затем сразу на «Сохранить публичный ключ в буфер обмена».
  • Вернитесь в параметре сервера, где появится страница с настройкой пиров. Введите туда данные (при этом нельзя закрывать настройки клиента): имя пира (как в клиенте), публичный ключ – из буфера обмена; разрешенные подсети (спектр локальных адресов клиента – в данном случае 172.16.82.2), настройка маски — /32. При этом нужно не забыть указать о спектре локальных клиентских сетей (192.168.100.0/24). В периодичности проверке аёктивности подключения выберите 15 секунд.

Теперь остается настроить межсетевой экран. Откройте параметр подключение и сформулируйте правило для доступа извне. Далее:

  • Разрешайте все настройки.
  • Пропишите статический адрес для туннеля в разделе с маршрутизацией: тип маршрута – до сети, адрес – пул маршрутизатора CL, маска подсети — 255.255.255.0, в интерфейсе выберите подключение Sev.
  • Вернитесь в созданное подключение и сохраните ключ – он понадобится для клиента.
  • Перейдите в настройки CL и в параметре адреса укажите туннель 172.16.82.2 и маску /24.
  • Добавьте пир с именем как на сервере, вставьте ключ из буфера обмена, укажите внешний адрес или тот, что создан с DDNS, затем после знака «:» введите порт сервера. В разрешенных подсетях вбейте туннель 172.16.82.1/32 и укажите спектр локальных устройств. Проверка активности – аналогично на 15 секунд.
  • В межсетевом экране добавьте те же настройки, что и на сервере.
  • Создайте статистический маршрут как на сервере, но в адреса введите изначальный пул Sev, а в интерфейсе CL.

Если конфигурация проделана правильно, то в разделе «WireGuard» на роутерах в графе «Пир» будет зеленый кружек и указано название второго устройства.

Читайте также:

Настройка OpenVPN-сервера

Вначале нужно установить компоненты OpenVPN (приведено в инструкции по настройки сервера PPTP/SSTP). Режим работы протокола определяется его файлом конфигурации. Рассмотрим самый простой вариант соединения двух роутеров с использованием общего секретного ключа.

  • Создайте секретный ключ (нужно скачать и установить OpenVPN с сайта). В примере используется сборка 2.4.6-I602 для Win.
  • Перезагрузите ПК. В директории, в которую установлен OpenVPN, найдите файл командной строки bin – откройте его от имени администратора и введите команду: Openvpn.exe —genkey —secret static.key.
  • Откройте файл с ключом в Блокноте и скопируйте из него текст, вставив его в места настройки файлов конфигурации обоих устройств.
  • Перейдите к параметрам первого роутера. Нажмите «Другие подключения» и добавьте соединение с протоколом «OpenVPN».
  • В графе с именем введите название подключения, а в строке конфигурации вставьте содержимое файла конфигурации и сохраните настройки.
  • Аналогично проделайте настройку второго роутера, но используйте конфигурацию клиента.

Также на стороне устройства-сервера в веб-интерфейсе нужно выполнить команду:

  • Interface OpenVPN0 no ip global
  • Interface OpenVPN0 security-level private

Для разрешения трафика между двумя роутерами с приватной безопасностью используется команда no isolate-private. Если сервер будет использован для доступа к Интернету, то понадобится использовать Ip nat 10.1.0.2 255.255.255.255. Проделанные настройки сохраняются командой system configuration save.

Остается открыть порт для соединения по протоколу: сформулируйте правило в Межсетевом экране для параметра «Провайдер» или для того, которое используется для выхода в интернет.

В правиле фильтрации, в графе «Действие» нужно выдать разрешение, а в строке «Протокол», значении «UDP» и «Номер порта назначение» выбрать 1194. На этом простейший вариант настройки соединения по OpenVPN. Для проверки сети можно провести диагностику через системный журнал.

Настройка PPTP/SSTP-сервера

Для работы сервера потребуются дополнение «PPTP VPN-сервер». Зайдите на страницу «Общие настройки» в графе «Обновление и компоненты», затем кликните на «Изменить набор компонентов». В окне «Приложения» найдите строку «VPN-сервер PPTP» и кликните по ссылке. Настройте сервер:

  • Графа «Множественный вход» позволяет организовать несколько одновременных подключения при использовании одинаковых данных. Это влияет на безопасность и усложняет мониторинг, но упрощает использование.
  • Пункт «Только с шифрованием» — оставьте галочку, иначе трафик не будет защищен;
  • «NAT для клиентов» — настройка доступа сервера в Интернет.
  • «Доступ к сети» — выбрать «Домашнюю сеть», если к ней подразумевается подключение.
  • «Начальный IP-адрес» — стандартный пул адресов для клиентов (не должны пересекаться с сервером, потому лучше изменить параметр);
  • Спектр адресов — до 10;
  • «Пользователи» — допускается создание разных учетных записей.

Подключить к серверу в качестве клиента можно через другой роутер, смартфон на базе Android (список лучших VPN для Андроид) или компьютер на базе Windows (смотрите все лучшие VPN для ПК с Windows).

Для настройки SSTP-сервера используется аналогичное дополнение — «SSTP VPN-сервер». В этом случае кроме активной службы KeenDNS, нужно выбрать имя в домене keenetic: .link, .pro или .name и выдать доступ извне при помощи протокола HTTPS:

  • Зайти в «Пользователи и доступ».
  • Открыть «Удаленный доступ» и разрешить настройку по протоколам «HTTP и HTTP» или «Только HTTPS».

В остальном настройка SSTP-сервера производится по аналогии с PPTP-сервером. Для подключения роутера к VPN-сервису:

  • Перейдите на страницу «Другие подключения».
  • Откройте раздел «VPN-подключения» и выберите «Добавить подключение».
  • В «Параметры VPN» найдите графу «Тип» и выберите значение «PPTP».
  • В «Имя подключения» впишите название соединения, а в качестве имени укажите доменное имя или IP-адрес сервера.
  • В разделе «Имя пользователя» и «Пароль» введите информацию об открытом профиле.

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

Настройка L2TP/IPsec-сервера и клиентский сервис

Установите компонент «VPN-сервер L2TP/IPsec» по инструкции выше. При регистрации сервера в параметре «Общий ключ IPsec» введите ключ безопасности. Настройте параметры соединения по аналогии с PPTP/SSTP-сервером. Подключение клиентов также производится по стандартному алгоритму: единственное, в «Параметры VPN» в поле «Тип» нужно выбрать «L2TP/IPsec».

Проверка работоспособности VPN на Keenetic

Для проверки VPN зайдите в настройки маршрутизатора, откройте параметр «Пользователя» — там есть вся информация о подключениях, клиентах и обмене трафика. В случае с OpenVPN выполните пинг обоих концов туннеля. Для сервера используйте команду:

  • ping 10.1.0.1
  • ping 10.1.0.2

Для клиента:

  • ping 192.168.1.1
  • ping 192.168.2.1

Если вы подключили Keenetic в качестве клиента к серверу VPN, то проверить работоспособность соединения вы можете на сайте ExpressVPN или NordVPN — система автоматически укажет, если защита трафика отсутствует. Также встроенные технологии укажут на утечку DNS.

Настройка роутера Keenetic в качестве Wireguard сервера 1

Keenetic Wireguard

Поддержка WireGuard VPN реализована для актуальных моделей Keenetic, начиная с выпусков KeeneticOS версии 3.3

Подготовка

Для начала добавляем в роутер Keenetic поддержку wigreguard

Управление -> Общие настройки -> Изменить набор компонентов
Настройка роутера Keenetic в качестве Wireguard сервера 2

В строке поиска вводим Wireguard и устанавливаем компонент

Настройка роутера Keenetic в качестве Wireguard сервера 3

Настройка Wireguard сервера

Переходим к настройкам Wireguard-сервера.

Интернет -> Другие подключения -> Добавить подключение

Создаем новое подключение

Selectel — ведущий провайдер облачной инфраструктуры и услуг дата-центров

Компания занимает лидирующие позиции на рынке на рынке выделенных серверов и приватных облаков, и входит в топ-3 крупнейших операторов дата-центров в России.

Настройка роутера Keenetic в качестве Wireguard сервера 4

Называем его, к примеру WG-S (Wireguard server)

Задаем следующие параметры

Название: WG-S (любое название)
Жмем на кнопку "Генерация пары ключей", публичный ключ понадобится далее
Адрес: 172.16.31.1/24 - наш терминальный ip Wireguard сервера
Порт: к примеру 12345
Настройка роутера Keenetic в качестве Wireguard сервера 5

Чуть ниже будет кнопка “Добавить пир”, нажимаем её и задаем параметры пира

Имя пира: любое понятное имя
Публичный ключ: получим при настройки клиента, чуть ниже
Разрешенные подсети: 172.16.31.2/32 - терминальный ip wireguard клиента
Проверка активности: я ставлю 25 сек
Настройка роутера Keenetic в качестве Wireguard сервера 6

Настройка Wireguard клиента

Запускаем Wireguard на ПК и создаем новый туннель

Название: придумываем удобное название
Публичный ключ: генерится сам. Копируем его и вставляем в шаге выше
PrivateKey: генерится сам
Address: 172.16.31.2/32 - терминальный ip-адрес клиента

PublicKey: публичный ключ сервера
AllowedIPs: 172.16.31.1/32, 192.168.0.0/24 - разрешаем терминальный ip-адрес сервера и сетку в удаленном офисе
Endpoint: ip:port wireuard серевера (к примеру 8.8.8.8:12345)
PersistentKeepalive: 25 сек, проверка активности
Настройка роутера Keenetic в качестве Wireguard сервера 7

На этом настройка VPN клиента и сервера завершена.

Настройка межсетевого экрана

Переходим в пункт меню

Сетевые правила -> Межсетевой экран

Выбираем вкладку с названием нашего Wireguard (WG-S) и жмем “Добавить правило”

Настройка роутера Keenetic в качестве Wireguard сервера 8

Задаем удобное описание, меняем протокол на IP и включаем правило

Настройка роутера Keenetic в качестве Wireguard сервера 9

На этом настройка завершена.
Включаем Wireguard сервер на роутере Keenetic, коннектимся клиентом и проверяем доступность удаленных машин.

У блога появился новый хостинг от компании Selectel.
Нашли интересную или полезную информацию в блоге? Хотели бы видеть на нем еще больше полезных статей? Поддержи автора рублем.

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

  • Настройка адсл роутера ростелеком краснодар
  • Настройка wifi роутера с сим картой
  • Настройка wifi роутера xiaomi ac1200
  • Настройка windows 7 для интернета через роутер
  • Настройка wifi роутера для игр