Приветствую, уважаемые! Наверняка, многие уже слышали о некоем "Ваергарде", который все хвалят и говорят, как о "супер-пупер" ВПНе... Я тоже слышал и щупал, и дам вам возможность его попробовать самим, даже если у вас нет Микротика. Мои выводы ниже, ваши жду в комментариях. Поехали!
Я сетевой инженер в большой компании, пишу статьи про сетевое оборудование, сетевые технологии и околоАЙТИшные темы. Рассматриваю возможности разного оборудования, вместе с вами продолжаю изучать разный функционал и привожу конкретные примеры того, что сделано и как сделано. Это не призыв к действию и не точный мануал - в моих статьях бывают ошибки, которые я всегда готов обсудить в комментариях. Прошу следовать правилам платформы, не нарушать законодательство РФ, не оскорблять других людей и все будет норм!
Моя тележка - добро пожаловать!
Фактически, появлением данного протокола считается 2015 год, но началом использования является лишь 2020 год, когда его начали встраивать в различные сборки Линукс. Я об этом не буду расписывать, кому интересно можно почитать на Wiki. Там же про протоколы, типы шифрования и авторизации. Для нас же отмечу, что выбора нам не дают совершенно - работает просто, как есть, без малейшей возможности тюнинга. Хорошо это или плохо - давайте разбираться...
Идем на mikrotik.com и скачиваем Cloud Hosted Router (CHR) версии 7.14.1 (последняя на момент публикации статьи), на 6 версии не работает. На хосте HyperV создаем новую виртуальную машину Gen1 (первого поколения) с 1Гб оперативки без динамики, сетевым интерфейсом и в качестве жесткого диска подставляем файлик, который скачали. Чуть подробнее этот процесс я уже описывал в статье Настройка мониторинга "The Dude". Когда запустите виртуалку - она по умолчанию должна получить адрес DHCP - цепляемся к нему винбоксом (admin, без пароля). И приступаем к настройке.
Для начала нам нужно определиться с подсетью для wireguard туннелей. Я предлагаю использовать малоизвестную 100.64.0.0/24. Это тоже локальная подсеть, но ее используют в основном только "гики"... Ну и теперь мы. ;)
Кстати, есть некоторые нюансы в том, какую маску использовать. Если использовать /30, то придется плодить интерфейсы подключения, а разные интерфейсы - это разные порты подключения. В теории, так будет работать стабильнее и правильнее, но в моем конфиге с маской /24 я не ощутил каких-то проблем на 3 одновременно подключенных клиентах. Если у вас есть опыт с бОльшим числом клиентов и проблемами при такой сетке - напишите обязательно.
Далее создаем "серверную" часть, к которой будут подключаться внешние клиенты. Заходим в WireGuard и жмем (+), тут нам нужно только имя, MTU (чем меньше, тем стабильнее будет работать в плохих сетях с фрагментацией пакетов, но не ставьте меньше 1300) и порт (порт UDP, можно замаскировать под телефонию 5060 или днс 53). Я создал дефолтный 13231, но вы сразу можете выбрать то, что вам захочется больше.
Далее переходим ко второму устройству и генерируем публичный ключ на нем. Давайте вначале я разберу на примере моего телефона на Android. Скачиваем на PlayMarket приложение Wireguard и запускаем. Жмем (+) -> Создать с нуля.
Опять вводим имя, в поле адрес будет указываться внутренний адрес туннеля со стороны этого клиента (телефона в данном случае). После генерации ключа, копируем публичный ключ и пересылаем его себе по почте с телефона на комп (или через вотсап/телеграм сообщением самому себе). И возвращаемся к микроту. Переходим в Wireguard'е в раздел "Peers" и создаем новую запись, где выбираем интерфейс, вставляем "Публичный ключ", который переслали с телефона, в поле "Endpoint" вводим адрес туннельного интерфейса со стороны телефона, а в "Allowed Address" прописываем первой строкой наш туннель, а далее я указал весь диапазон внутренних подсетей, какие только могут быть. Можете все использовать, можете порезать более избирательно на 24 маски. Внизу в поле Client config пишется какая-то лабуда - не обращайте на нее внимания, возможно это в качестве примера просто...
Теперь нам нужно обратным маневром перекинуть публичный ключ с микротика на телефон. Идем обратно в раздел WireGuard, кликаем на наше соединение и копируем из поля "Public key" всю строчку.
Вернувшись к телефону, продолжаем настройку. Зайдя в редактирование нашего уже сохраненного полу-соединения, жмем чуть ниже "Добавить пир".
Тут по пунктам: "Публичный ключ", который скопировали с микротика, "Конечная точка" - внешний адрес вашего роутера, на котором сделаете проброс порта внутрь (в формате "44.55.66.77:13231", где 13231 - порт интерфейса wireguard1), "Разрешенные IP" - нужно повторить сети, как на микроте в "Allowed Address" через запятую без пробела: 100.64.0.0/24,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16.
Возвращаемся к микротику и в разделе IP - Addresses добавляем адрес 100.64.0.1/24 нашему туннелю wireguard1.
Теперь нам нужно зайти на внешний роутер и настроить проброс порта udp^13231 на внутренний адрес нашего виртуального микротика. Проброс на микроте делается двумя правилами: в разделе Firewall разрешаем "форвард" udp 13231, в разделе NAT создаем dst-nat правило из внешней во внутреннюю сеть.
/ip firewall filter add action=accept chain=input disabled=yes dst-port=13231 in-interface-list=external protocol=udp
/ip firewall nat add action=dst-nat chain=dstnat dst-address=44.55.66.77 dst-port=13231 protocol=udp to-addresses=192.168.88.22 to-ports=13231
Все, проверяем - должно работать.
Теперь рассмотрим вариант с другим микротиком, у меня под рукой оказался довольно свежий L009, который является логическим развитием серии RB2011. Если вам интересно узнать мое мнение и обзор на данную модель - напишите коммент в этой статье.
На втором микротике (Микрот2) нам нужно, так же, как на виртуальном (МикротВирт), создать интерфейс wireguard, скопировать его публичный ключ и вернуться к МикротВирт. На МикротВирт в разделе "Peers" добавляем новый коннект с публичным ключом Микрот2 и Endpoint, например, 100.64.0.3. Копируем публичный ключ на МикротВирт и идем в раздел "Peers" на Микрот2, где повторяем процесс создания коннекта, только в графе Endpoint ставим свой внешний адрес роутера, который в нашем примере равен 44.55.66.77 и Endpoint port 13231. Не забудьте прописать адрес туннелю на Микрот2 в IP -> Addresses, указав 100.64.0.3/24. Еще одно отличие от телефона - нужно указать маршруты нужных нам сетей. В данной статье я рассмотрю вариант статики, но вообще уже добился работы OSPF. В продакшн еще не ставил, но вроде на тестах все хорошо - маршруты приходят, трафик бегает.
Идем на обоих микротах в раздел IP -> Routes и добавляем статические маршруты внутренних сетей друг напротив друга:
/ip route add dst-address=192.168.88.0/24 gateway=wireguard1
Т.е. на МикротВирт нам нужно прописать локальную сеть Микрот2, которая будет смотреть в интерфейс wireguard1, а на Микрот2, соответственно, локальную сеть МикротВирт. Чтобы роутеры знали у кого какая подсеть скрыта за туннелем.
Должно работать, если нигде не ошиблись. Я первый раз долго провозился потому что на Микрот2 у меня оказался заблокирован порт udp. А когда уже 1 раз добился рабочего конфига, то второй раз делается буквально за минуты. В целом, у меня остались двойственные чувства от данного протокола. С одной стороны конфиг совершенно не перегружен лишним (как, например, ikev2 - кто настраивал, тот поймет), он гораздо проще OVPN и клиенты есть на все платформы: windows, linux, macos, android, ios... Но данная "простота" не позволяет с ним играться в корпоративном сегменте. Нет возможности тонкой настройки, нельзя автоматизировать процесс и написать простые инструкции для пользователей. Администрировать коннекты тоже не получится - единственный способ разграничить Пиры хоть как-то - это комментарий. Если вдруг на удаленном клиенте слетает профиль, то его пир надо переделывать...
Короче, не знаю, поправьте меня в комментах, но, на мой взгляд, - это исключительно либо домашнее решение, либо впн-клиент для подключения пользователей, да и то - они будут приносить свои телефоны/планшеты/ноутбуки вам, потому что сами наверняка накосячат с публичным ключом и пока отправят вам один, уже перегенерят на другой... Не знаю... Вот прям совсем... Решайте сами использовать данный впн или пока еще подождать.
Сегодня как-то так. Если был вам полезен - не побрезгуйте подписаться на канал и поставить лайк. В комментариях всегда готов помочь советом или подискутировать о вечном... Всего вам наилучшего, не болейте!