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)


  1. amarao
    10.09.2021 17:21
    +1

    Мне кажется, сюда надо пригласить сотрудника yandex'а, т.к. они в последнее время проявляют большой интерес к устройствам Mikrotik.


    1. RiddickABSent
      10.09.2021 20:11

      some time later

      Яндекс покупает Mikrotik


      1. amarao
        10.09.2021 20:33
        +1

        Если микротик будет доставлять и дальше столько клиентских запросов как доставлял недавно, то да, купить микротик, чтобы починить кое-что, может быть не самым дорогим вариантом.


  1. alexEtse
    10.09.2021 18:02

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

    Речь идёт не о VPN для связи площадок через Интернет, а для удалённого доступа пользователей.

    Кстати, о таком применении VPN на микротах что-то планируется рассказать? Чтоб на всяких линкусах/фрибздях/виндах/андроидах работало удалённое подключение к офисной сети, да еще и с натами при этом дружило.


    1. stensilart Автор
      10.09.2021 18:06

      Следующая статья будет как раз посторонние vpn и мы соединим сети, как единое целое. Если будет запрос могу написать статью как поднять тоже самое но на openvpn. Также в данной статье написан как раз обход нат за счёт сервера в облаке


      1. alexEtse
        10.09.2021 18:38

        Нюанс с NAT связан с тем, что некоторые VPN (типа того же ipsec) могут иметь с ним проблемы в ряде случаев (происки РКН не рассматриваем, обычные ситуации), и даже сервер в облаке не всегда поможет, если "ломает" что-то, расположенное ближе к клиенту.

        Да конкретно OpenVPN понятен, но насколько я помню (может что за пару лет изменилось), в микротике его фичи достаточно порезаны. Но OpenVPN хорош тем, что работает почти под всеми актуальными клиентскими осями.

        Как говорится - если не OpenVPN, то что тогда лучше использовать вместо него для данной цели (не связь площадок, а именно для пользовательских устройств), если мы строим сеть на микротах?


        1. damarus
          10.09.2021 19:45
          +1

          В mikrotik'е из всего шифрованного лучше всего ikev2. OpenVPN обрезанный и медленный, WireGuard в бета-прошивке, остальное можно вообще не вспоминать.


          1. stensilart Автор
            10.09.2021 19:49

            Также в 7 версии добавили для openvpn выбор udp порта. По идее должно быстрее работать.


            1. damarus
              10.09.2021 22:06

              Там не только в tcp проблема. На мелких/домашних микротиках оно упирается в cpu, т.к. нет аппаратного шифрования. У меня получалось макс 20mpbs выжать при 100% CPU на hAP ac2. При этом ikev2 там нормально работает на 80mbps, при загрузке 20%.


          1. Fasterpast
            10.09.2021 23:52

            Ну почему, к sstp клиенты на винде очень даже хорошо нативно подключаются, и сам сервер очень быстро поднимается при наличии сертификата. По скорости - да, аппаратно шифруется только IpSec, так что...


        1. stensilart Автор
          10.09.2021 19:53

          Мне кажется за wireguard будущее. Как он легко настраивается, меня это сразу поразило, буквально в 2 команды. И мне кажется на нем тоже можно строить и связь клиентов. Надо проверять.


        1. lokkiuni
          10.09.2021 21:43

          IPSec хорош тем, что он есть во всех худо-бедно современных осях из коробки (а значит, в том числе рулится политиками), а всё остальное - это надо прикручивать саморезами…

          OpenVPN в RouterOS7 будет/есть полноценный, заодно ещё какой-то проприоритарный протокол добавили.

          Вопрос к автору - а почему не использовался CHR? Из соображений цены лицензии, или ещё почему-то?


          1. stensilart Автор
            10.09.2021 22:03

            До того как Вы не сказали про CHR, я даже и не слышал. Мое упущение. Может быть и рассмотрю сделать на нем. Ну а так, просто хотелось пощупать WireGueard и была возможность это сделать в EVE-NG. Спасибо за подсказку.


          1. Meklon
            10.09.2021 22:13

            А как это использовать, если хостеры обычно не дают возможность загрузки кастомных образов?


            1. stensilart Автор
              10.09.2021 23:25

              Простите, не понял вопроса. Вы имеете ввиду, что как будто бы нельзя загрузить кастомный образ для использования его в EVE-NG. Это можно. Если про CHR - то вот это я Вам, к сожалению не подскажу, пока что сам не разбирался.


              1. chesire47
                11.09.2021 00:07

                CHR на EVE-NG - можно, есть инструкции в интернетах.

                У меня все заработало на термоядерной связке Windows 10 + VmWare Workstation Pro + EVE-NG(VM) + вложенная виртуализация в виде CHR на EVE-NG

                В общем, нет ничего невозможного )


            1. DaemonGloom
              12.09.2021 09:56

              Использую CHR в Google Cloud Platform (оплата только по превышению лимита трафика, уже 2.5 года) и в Oracle (полностью бесплатно, уже 0.5 года). Никаких проблем с созданием данных виртуальных машин не было.


    1. be52
      11.09.2021 06:49

      В микротик завезли поддержку докера, так что теперь и опенвпн нормальный, и plex и самба ядреная и что угодно.


      1. JPEGEC
        11.09.2021 07:30

        А аппаратную поддержку шифрования тоже завезли?


  1. Maxim_Q
    10.09.2021 18:58

    А можно сюда добавить тест скорости работы? Меня интересует какую максимум скорость можно получить без аппаратного ускорения. Если кто-то тестировал скорости wireguard на микротиках напишите что у вас получилось.


    1. stensilart Автор
      10.09.2021 19:50

      Просто я делал в лаборатории (eve-ng) и мне кажется тест будет не корректный. Но везде пишут, что типа скорости намного быстрее openvpn.


      1. dimsoft
        10.09.2021 20:58

        Добавлю в защиту IPSEC - на некоторых, в том числе не очень дорогих микротиках он аппаратный => он будет быстрее всего.


        1. Maxim_Q
          10.09.2021 21:45

          а если сравнить IPSEC и Wireguard на микротике без аппаратного ускорения? Какая будет скорость у Wireguard? Допустим у меня на IPSEC без аппаратного ускорения скорость не выше 30 Мбит/сек.


        1. 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


          1. dimsoft
            11.09.2021 08:35

            какие аппаратные платформы ?


            1. chesire47
              11.09.2021 08:50

              Hap ac2 и chr


              1. dimsoft
                11.09.2021 09:26

                для защиты передаваемых данных обязательно использовать IPsec. Что касается оборудования, то предпочтительно использовать роутеры с аппаратной поддержкой шифрования - hEX, RB3011/4011 и все остальные модели на базе процессоров ARM. В этом случае вполне достижима пропускная способность туннеля на уровне 300-400 МБит/с. На остальных моделях роутеров (MIPSBE, SMIPS) вы получите не более 30-40 МБит/с.  (с)


                1. AcidVenom
                  11.09.2021 17:59

                  https://wiki.mikrotik.com/wiki/Manual:IP/IPsec#Hardware_acceleration

                  Не вводите людей в заблуждение.


          1. Tarakanator
            13.09.2021 11:02

            Gre+IPsec Москва-Эстония = 30-40 Mbit/s up/down

            Это с включением аппаратного шифрования? тогда что-то мало. Если без включения, то смысл?


            1. chesire47
              13.09.2021 11:28

              На сколько я знаю, аппаратное шифрование работает там, где оно приминимо, и его нельзя выключить. По крайней мере я никогда не задавался целью отключения )

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

              Самое адекватное что есть - l2tp+IPsec, там и статус виден и скорость более менее приличная. Скорость зависит от модели роутера, см. тесты IPsec у конкретной модели.

              В дальнейшем наверное перейду на WireGuard. А пока довольствуюсь l2tp с дефолтным mppe128, мне для открытия сайтиков достаточно, да и в целом мне кажется этого выши крыши. Если у вас не Супер Энтерпрайз, который гоняет по туннелям какие-то нешифрованные данные, тогда да, IPsec или что то получше чем mppe128 обязателен, в остальных случаях - кто будет ловить и дешифровать твои данные? )


              1. Tarakanator
                13.09.2021 13:22
                +1

                Выключить нельзя, но можно выставить параметры ipsec, которые не поддерживаются при аппаратном шифровании.
                Зайди в winbox в ipseс installed SA, открой любой, там написано hardware AEAD. Написано обычным шрифтом или бледным? если бледным, то ускорение выключено.
                Ну у меня gre работает без нареканий.
                у меня тоже hap ac2. я посмотрел что gre+ipsec тянет больше 100мбит и успокоился т.к. канал у меня 100мбит. Сам скорость не проверял.

                Ну у меня конечно не супер энтерпрайз, но почему бы не сделать как надо сразу?
                WireGuard вроде хорош, но он пока только в бета версии прошивки микротика. И всё равно медленнее ipsec.