WireGuard is a communication protocol and free and open-source software that implements encrypted virtual private networks (VPNs), and was designed with the goals of ease of use, high speed performance, and low attack surface. It aims for better performance and more power than IPsec and OpenVPN, two common tunneling protocols. The WireGuard protocol passes traffic over UDP.
Введение
Как позиционируют WireGuard это быстрый VPN нового поколения, в котором реализована современная криптография. Он изначально разрабатывался как более простая и удобная альтернатива существующим VPN.
Ну что, давайте протестируем данный протокол на примере Mikrotik. Возьмем версию прошивки Mikrotik RouterOS 7.1rc2 и протестируем.
Сделаем не просто связность, а реализуем схему: центральный офис + 2 удаленных офиса, все это на "серых" адресах, L2VPN (Ethernet over IP over WireGuard – нужно больше over) и подружим с CISCO. Продолжение написано тут. И должно у нас получиться, что-то вроде этого:
Начало
В данной статье я расскажу, как "поднять" сервер в облаке, установить WireGuard и подключить MikroTik'и к данному серверу как клиенты. И должны получить что-то вот это:
Все IP адреса открыты, как и пароли и ключи. Все делается в EVE-NG ради эксперимента.
Настройка сервера
Для размещения сервера потребуется VPS (VDS). Я буду использовать дешевый виртуальный сервер c операционной системой Ubuntu 20.04. Покупаем виртуальный сервер на любом хостинге. Для экспериментов я выбрал на ruvds.ru – цена около 240р.
Залогинимся на сервер с правами пользователя root и выполним следующие команды:
# устанавливаем Wireguard
apt update && apt upgrade
apt install wireguard
# разрешаем проброс пакетов
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
sysctl -p
# генерируем ключи для сервера:
wg genkey | tee /etc/wireguard/server_privatekey | wg pubkey | tee /etc/wireguard/server_publickey
# смотрим ключи для сервера:
root@ruvds-it403:~#
root@ruvds-it403:~# cat /etc/wireguard/server_publickey
Z2jNGtMYfqxYskx2mh5ekitESbD5C4l84nXreb2ykVg=
root@ruvds-it403:~#
root@ruvds-it403:~# cat /etc/wireguard/server_privatekey
wJrG7cBytw3xhEJGFyOT7CvhsGgfFDVPzVlhUrXWGUo=
root@ruvds-it403:~#
Обязательно перезагрузите сервер!
Создадим конфигурационный файл /etc/wireguard/wg0.conf со следующим содержимым:
root@ruvds-it403:~# nano /etc/wireguard/wg0.conf
[Interface]
Address = 10.7.0.1/24
ListenPort = 51820
PrivateKey = wJrG7cBytw3xhEJGFyOT7CvhsGgfFDVPzVlhUrXWGUo=
Запустим VPN-сервис и добавим его в автозагрузку:
wg-quick up wg0
systemctl enable wg-quick@wg0
Убедимся, что служба запустилась корректно:
root@ruvds-it403:~# wg show wg0
interface: wg0
public key: Z2jNGtMYfqxYskx2mh5ekitESbD5C4l84nXreb2ykVg=
private key: (hidden)
listening port: 51820
root@ruvds-it403:~#
Настройка MikroTik
Задаем имя:
> system identity set name=Mik_OFFICE
Проверяем IP адрес, чтобы зайти через WEB
[admin@Mik_OFFICE] > ip address/print
Flags: D - DYNAMIC
Columns: ADDRESS, NETWORK, INTERFACE
# ADDRESS NETWORK INTERFACE
0 D 192.168.1.196/24 192.168.1.0 ether1
[admin@Mik_OFFICE] >
Качаем новую прошивку и устанавливаем (на все устройства)
Заходим на устройство по WEB и закидываем прошивку в устройство
[admin@Mik_OFFICE] > system/reboot
Ну или так =)
Настройка WireGuard
Далее делаем настройку WireGuard клиента на MikroTik (лучше делать данные настройки из консоли, т.к. через Web у меня не завелось)
Создаем интерфейс wireguard с именем wg0:
interface/wireguard/add name=wg0
Проверяем:
[admin@Mik_OFFICE] >
[admin@Mik_OFFICE] > interface/wireguard/print
Flags: X - disabled; R - running
0 R name="wg0" mtu=1420 listen-port=34529
public-key="zeaqP+pXBqAJDJ2IfXy2bxIiQlfhs+FtNAY43yUkqUs="
[admin@Mik_OFFICE] >
Создаем пир:
/interface/wireguard/peers add allowed-address=10.7.0.1/24 interface=wg0 persistent-keepalive=20 public-key="Z2jNGtMYfqxYskx2mh5ekitESbD5C4l84nXreb2ykVg=" endpoint-address=193.124.115.192 endpoint-port=51820
Проверяем:
[admin@Mik_OFFICE] >
[admin@Mik_OFFICE] > /interface/wireguard/peers/print
Columns: INTERFACE, PUBLIC-KEY, ENDPOINT-ADDRESS, ENDPOINT-PORT
# INT PUBLIC-KEY ENDPOINT-ADDRESS ENDPO
0 wg0 Z2jNGtMYfqxYskx2mh5ekitESbD5C4l84nXreb2ykVg= 193.124.115.192 51820
[admin@Mik_OFFICE] >
[admin@Mik_OFFICE] >
Вешаем IP адрес на wg0:
ip address/add address=10.7.0.2/24 interface=wg0
Настройка сервера для работы с клиентами на MikroTik
Заходим на сервер и добавляем клиента Wireguard на сервер:
root@ruvds-it403:~# nano /etc/wireguard/wg0.conf
[Peer]
#Mik_OFFICE
PublicKey = zeaqP+pXBqAJDJ2IfXy2bxIiQlfhs+FtNAY43yUkqUs=
AllowedIPs = 10.7.0.2/32
Ребутаем сервис:
systemctl restart wg-quick@wg0
Читаем, если не заработало
Если вдруг будут ошибки или не получаться просто ребутните сервер и микротик
Проверяем:
root@ruvds-it403:~# wg show wg0
interface: wg0
public key: Z2jNGtMYfqxYskx2mh5ekitESbD5C4l84nXreb2ykVg=
private key: (hidden)
listening port: 51820
peer: zeaqP+pXBqAJDJ2IfXy2bxIiQlfhs+FtNAY43yUkqUs=
endpoint: 94.19.107.202:34529
allowed ips: 10.7.0.2/32
latest handshake: 21 seconds ago
transfer: 212 B received, 92 B sent
root@ruvds-it403:~#
Пингуем сервер со стороны MikroTik'а и обратно (10.7.0.1, 10.7.0.2)
Аналогичным способом подключаем все оставшиеся MikroTik’и, незабываем редактировать файл /etc/wireguard/wg0.conf и systemctl restart wg-quick@wg0
Пингуем сервер со стороны MikroTik'ов и обратно (10.7.0.1, 10.7.0.2, 10.7.0.3, 10.7.0.4)
В итоге у нас должно получиться, что то того:
Файл /etc/wireguard/wg0.conf
[Interface]
Address = 10.7.0.1/24
ListenPort = 51820
PrivateKey = wJrG7cBytw3xhEJGFyOT7CvhsGgfFDVPzVlhUrXWGUo=
[Peer]
#Mik_OFFICE
PublicKey = zeaqP+pXBqAJDJ2IfXy2bxIiQlfhs+FtNAY43yUkqUs=
AllowedIPs = 10.7.0.2/32
[Peer]
#Mik_1
PublicKey = y+9MMhOZc042PejCyUY/jqlAaf5I5kn6hpuGlTJ1b0E=
AllowedIPs = 10.7.0.3/32
[Peer]
#Mik_2
PublicKey = XiCSEflrWYLvOEqd9e2AD6QEhktwIZ9q5NoNCQJVHUs=
AllowedIPs = 10.7.0.4/32
Проверяем:
root@ruvds-it403:~# wg show wg0
interface: wg0
public key: Z2jNGtMYfqxYskx2mh5ekitESbD5C4l84nXreb2ykVg=
private key: (hidden)
listening port: 51820
peer: zeaqP+pXBqAJDJ2IfXy2bxIiQlfhs+FtNAY43yUkqUs=
endpoint: 94.19.107.202:34529
allowed ips: 10.7.0.2/32
latest handshake: 16 seconds ago
transfer: 180 B received, 92 B sent
peer: XiCSEflrWYLvOEqd9e2AD6QEhktwIZ9q5NoNCQJVHUs=
endpoint: 94.19.107.202:9721
allowed ips: 10.7.0.4/32
latest handshake: 1 minute, 9 seconds ago
transfer: 276 B received, 92 B sent
peer: y+9MMhOZc042PejCyUY/jqlAaf5I5kn6hpuGlTJ1b0E=
endpoint: 94.19.107.202:1363
allowed ips: 10.7.0.3/32
latest handshake: 1 minute, 21 seconds ago
transfer: 276 B received, 92 B sent
root@ruvds-it403:~#
root@ruvds-it403:~#
В итоге у нас получилось вот это:
В следующей статье я напишу как поднять EoIP, VLAN, trunk и все это делать связать между собой, чтобы все это заработало.
P.S.
Это моя первая статься, прошу не судить строго. И да, VPLS тоже будет. Сейчас речь, о том, как быстро сделать L2VPN на базе MikroTik.
Комментарии (31)
alexEtse
10.09.2021 18:02Если б еще у микротов openvpn был не покоцаный - цены б ему не было... Хотя если изначально строить сеть, ориентируясь на микротик, а не встраивать его в уже существующие сети - то это не так критично, наверное.
Речь идёт не о VPN для связи площадок через Интернет, а для удалённого доступа пользователей.
Кстати, о таком применении VPN на микротах что-то планируется рассказать? Чтоб на всяких линкусах/фрибздях/виндах/андроидах работало удалённое подключение к офисной сети, да еще и с натами при этом дружило.
stensilart Автор
10.09.2021 18:06Следующая статья будет как раз посторонние vpn и мы соединим сети, как единое целое. Если будет запрос могу написать статью как поднять тоже самое но на openvpn. Также в данной статье написан как раз обход нат за счёт сервера в облаке
alexEtse
10.09.2021 18:38Нюанс с NAT связан с тем, что некоторые VPN (типа того же ipsec) могут иметь с ним проблемы в ряде случаев (происки РКН не рассматриваем, обычные ситуации), и даже сервер в облаке не всегда поможет, если "ломает" что-то, расположенное ближе к клиенту.
Да конкретно OpenVPN понятен, но насколько я помню (может что за пару лет изменилось), в микротике его фичи достаточно порезаны. Но OpenVPN хорош тем, что работает почти под всеми актуальными клиентскими осями.
Как говорится - если не OpenVPN, то что тогда лучше использовать вместо него для данной цели (не связь площадок, а именно для пользовательских устройств), если мы строим сеть на микротах?
damarus
10.09.2021 19:45+1В mikrotik'е из всего шифрованного лучше всего ikev2. OpenVPN обрезанный и медленный, WireGuard в бета-прошивке, остальное можно вообще не вспоминать.
stensilart Автор
10.09.2021 19:49Также в 7 версии добавили для openvpn выбор udp порта. По идее должно быстрее работать.
damarus
10.09.2021 22:06Там не только в tcp проблема. На мелких/домашних микротиках оно упирается в cpu, т.к. нет аппаратного шифрования. У меня получалось макс 20mpbs выжать при 100% CPU на hAP ac2. При этом ikev2 там нормально работает на 80mbps, при загрузке 20%.
Fasterpast
10.09.2021 23:52Ну почему, к sstp клиенты на винде очень даже хорошо нативно подключаются, и сам сервер очень быстро поднимается при наличии сертификата. По скорости - да, аппаратно шифруется только IpSec, так что...
stensilart Автор
10.09.2021 19:53Мне кажется за wireguard будущее. Как он легко настраивается, меня это сразу поразило, буквально в 2 команды. И мне кажется на нем тоже можно строить и связь клиентов. Надо проверять.
lokkiuni
10.09.2021 21:43IPSec хорош тем, что он есть во всех худо-бедно современных осях из коробки (а значит, в том числе рулится политиками), а всё остальное - это надо прикручивать саморезами…
OpenVPN в RouterOS7 будет/есть полноценный, заодно ещё какой-то проприоритарный протокол добавили.
Вопрос к автору - а почему не использовался CHR? Из соображений цены лицензии, или ещё почему-то?
stensilart Автор
10.09.2021 22:03До того как Вы не сказали про CHR, я даже и не слышал. Мое упущение. Может быть и рассмотрю сделать на нем. Ну а так, просто хотелось пощупать WireGueard и была возможность это сделать в EVE-NG. Спасибо за подсказку.
Meklon
10.09.2021 22:13А как это использовать, если хостеры обычно не дают возможность загрузки кастомных образов?
stensilart Автор
10.09.2021 23:25Простите, не понял вопроса. Вы имеете ввиду, что как будто бы нельзя загрузить кастомный образ для использования его в EVE-NG. Это можно. Если про CHR - то вот это я Вам, к сожалению не подскажу, пока что сам не разбирался.
chesire47
11.09.2021 00:07CHR на EVE-NG - можно, есть инструкции в интернетах.
У меня все заработало на термоядерной связке Windows 10 + VmWare Workstation Pro + EVE-NG(VM) + вложенная виртуализация в виде CHR на EVE-NG
В общем, нет ничего невозможного )
DaemonGloom
12.09.2021 09:56Использую CHR в Google Cloud Platform (оплата только по превышению лимита трафика, уже 2.5 года) и в Oracle (полностью бесплатно, уже 0.5 года). Никаких проблем с созданием данных виртуальных машин не было.
Maxim_Q
10.09.2021 18:58А можно сюда добавить тест скорости работы? Меня интересует какую максимум скорость можно получить без аппаратного ускорения. Если кто-то тестировал скорости wireguard на микротиках напишите что у вас получилось.
stensilart Автор
10.09.2021 19:50Просто я делал в лаборатории (eve-ng) и мне кажется тест будет не корректный. Но везде пишут, что типа скорости намного быстрее openvpn.
dimsoft
10.09.2021 20:58Добавлю в защиту IPSEC - на некоторых, в том числе не очень дорогих микротиках он аппаратный => он будет быстрее всего.
Maxim_Q
10.09.2021 21:45а если сравнить IPSEC и Wireguard на микротике без аппаратного ускорения? Какая будет скорость у Wireguard? Допустим у меня на IPSEC без аппаратного ускорения скорость не выше 30 Мбит/сек.
chesire47
10.09.2021 23:16На практике нет, не быстрее.
WireGuard выдает скорости куда больше.
Точных цифр сейчас не назову, тестировал на днях.
Gre+IPsec Москва-Эстония = 30-40 Mbit/s up/down
WireGuard Москва-Эстония = 100+ Mbit/s up/down
L2tp+mmpe128 Москва-Эстония = кажется что то в районе 80+ Mbit/s u/d, но могу ошибаться, может и быстрее было.
L2tp без шифрования Москва-Эстония = 150+ Mbit/s
Gre без шифрования Москва-Эстония = 150+ Mbit/s
dimsoft
11.09.2021 08:35какие аппаратные платформы ?
chesire47
11.09.2021 08:50Hap ac2 и chr
dimsoft
11.09.2021 09:26для защиты передаваемых данных обязательно использовать IPsec. Что касается оборудования, то предпочтительно использовать роутеры с аппаратной поддержкой шифрования - hEX, RB3011/4011 и все остальные модели на базе процессоров ARM. В этом случае вполне достижима пропускная способность туннеля на уровне 300-400 МБит/с. На остальных моделях роутеров (MIPSBE, SMIPS) вы получите не более 30-40 МБит/с. (с)
AcidVenom
11.09.2021 17:59https://wiki.mikrotik.com/wiki/Manual:IP/IPsec#Hardware_acceleration
Не вводите людей в заблуждение.
Tarakanator
13.09.2021 11:02Gre+IPsec Москва-Эстония = 30-40 Mbit/s up/down
Это с включением аппаратного шифрования? тогда что-то мало. Если без включения, то смысл?
chesire47
13.09.2021 11:28На сколько я знаю, аппаратное шифрование работает там, где оно приминимо, и его нельзя выключить. По крайней мере я никогда не задавался целью отключения )
Gre вообще нестабильная штука, мы его особо не используем. Почему в моем кейсе маленькая скорость - да черт его знает, по идее должен выдавать побольше.
Самое адекватное что есть - l2tp+IPsec, там и статус виден и скорость более менее приличная. Скорость зависит от модели роутера, см. тесты IPsec у конкретной модели.
В дальнейшем наверное перейду на WireGuard. А пока довольствуюсь l2tp с дефолтным mppe128, мне для открытия сайтиков достаточно, да и в целом мне кажется этого выши крыши. Если у вас не Супер Энтерпрайз, который гоняет по туннелям какие-то нешифрованные данные, тогда да, IPsec или что то получше чем mppe128 обязателен, в остальных случаях - кто будет ловить и дешифровать твои данные? )
Tarakanator
13.09.2021 13:22+1Выключить нельзя, но можно выставить параметры ipsec, которые не поддерживаются при аппаратном шифровании.
Зайди в winbox в ipseс installed SA, открой любой, там написано hardware AEAD. Написано обычным шрифтом или бледным? если бледным, то ускорение выключено.
Ну у меня gre работает без нареканий.
у меня тоже hap ac2. я посмотрел что gre+ipsec тянет больше 100мбит и успокоился т.к. канал у меня 100мбит. Сам скорость не проверял.Ну у меня конечно не супер энтерпрайз, но почему бы не сделать как надо сразу?
WireGuard вроде хорош, но он пока только в бета версии прошивки микротика. И всё равно медленнее ipsec.
amarao
Мне кажется, сюда надо пригласить сотрудника yandex'а, т.к. они в последнее время проявляют большой интерес к устройствам Mikrotik.
RiddickABSent
some time later
amarao
Если микротик будет доставлять и дальше столько клиентских запросов как доставлял недавно, то да, купить микротик, чтобы починить кое-что, может быть не самым дорогим вариантом.