Зачем/для чего нужен WireGuard
Ситуаций когда может пригодится свой VPN на самом деле вагон и маленькая тележка. Вот некоторые из них:
- Мы подключились со смартфона к публичной/открытой wifi сети и не хотим стать жертвой MITM атаки
- Для организации виртуальной локальной сети между клиентами подключенными к VPN
- Контент который мы хотим посмотреть недоступен для нашего региона
- Контент который мы хотим посмотреть заблокирован в стране в которой мы находимся
- Какие то специальные акции и предложения для определённой страны/города/региона
- Просто хотим скрыть свой настоящий ip адрес или местонахождение
- В некоторых случаях помогает улучшить Ping и Delay в играх
- Другое...
Обладая большим количеством разных серверов, есть соблазн поставить такой VPN на каждый из них. Тем более что это очень просто и быстро. К тому же клиенты под Wireguard есть на Windows / Linux / Mac / Android / ios
Необходимые требования
Чтобы всё получилось нам понадобится:
- Сервер с Root доступом. Рекомендую вот этот
- Установленный Docker + Docker-Compose
- Фаил Docker-Compose от linuxserver любо из моего репозитория на гитхабе (см ниже)
- 10 - 15 минут времени
Подготовка
Я привык хранить докер контейнеры со всей нужной для их работы информацией в отдельных директориях, а не где то там в var. Создадим специальную папку для wireguard, а так же юзера с нужным id'шником. И дадим этому юзеру права на только что созданную папку
Если помимо пользователя Root у вас нет никаких других пользователей, то желательно создать нового, т.к. это лучше для безопасности вашего сервера.
Добавим пользователя [необязательный шаг]
Установим ему пароль [необязательный шаг]
Создадим директории
Назначим пользователя владельцем этой директорий
Установка
Я долго думал как лучше предоставить фаил docker-compose. Пришёл к выводу - что лучше оставлю сразу 2 ссылки. Дело в том что прогресс не стоит на месте и может случиться так, что фаил который я предоставлю устареет через какое то время. Для такого случая я оставлю ссылку на официальный докер хаб где всегда можно найти актуальный docker-compose фаил
Переходим в директорию /app/vpn/wireguard
Создаём фаил docker-compose.yaml
И наполняем его содержимым из выбранного вами варианта.
1) Мой Docker-Compose фаил на github
2) Официальный докер хаб LinuxServer/Wireguard где всегда можно найти актуальную версию docker-compose фаила
Рассмотрим основные параметры:
- PUID=1000 - ID пользователя от которого запускаем контейнер. Если вы создавали пользователя с айдишником 1337 то вписываем сюда 1337.
- PGID=1000 - ID группы от которой запускаем контейнер. Если вы создавали пользователя с айдишником 1337 то вписываем сюда 1337.
Если у Вас уже есть пользователь, его UID и GID можно узнать введя в терминале команду id будучи залогиненным за этого пользователя. - TZ=Europe/London - Таймзона например Europe/Netherlands
- SERVERURL=auto - Если у нас есть домен можем вписать его сюда для удобства либо оставляем значение по умолчанию
- SERVERPORT=51820 - Порт на котором будет висеть wireguard. Не забываем разрешить в фаерволле
- PEERS=1 - Количество создаваемых конфигов. Хорошая практика 1 конфиг = 1 клиент, а не сажать 10 клиентов на 1 конфиг. При подключении каждый клиент будет иметь уникальный ip в виртуальной подсети
- PEERDNS=auto - Можно вписать кастомные днс или например 1.1.1.1 или оставить значение auto
- INTERNAL_SUBNET=10.13.13.0 - Внутренняя виртуальная сеть
- ALLOWEDIPS=0.0.0.0/0 - Диапазоны ip к которым пиры могут обращаться через VPN тунель. По стандарту все ip.
Если вы хотите только создавать тунель и при этом не хотите менять свой ip адрес на ip адрес сервера VPN, то тогда тут необходимо вписать маску сети, например 10.0.0.0/8 или 10.13.13.0/24 - /app/vpn/wireguard/config:/config - Место для хранения данных докер контейнера
- PERSISTENTKEEPALIVE_PEERS=all - Для каких пиров устанавливать постоянное рукопожатие через каждые 25 секунд. Я обычно ставлю all, либо можно поставить вот так 1,4,laptop и т.д.
- LOG_CONFS=false - Отображать или нет сгенерированные QR-коды в логе docker.
С настройками разобрались. Стартуем контейнер:
При запуске будут созданы конфиги в папке /app/vpn/wireguard/config
Именно эти конфиги мы используем в клиенте wireguard
Параметр PersistentKeepalive
PersistentKeepalive в WireGuard является настройкой, позволяющей поддерживать постоянное активное соединение между двумя узлами (например, между клиентом и сервером). Эта опция полезна в случаях, когда сетевое оборудование или программное обеспечение между узлами может закрывать неактивные соединения.
Когда опция PersistentKeepalive включена и установлена определенная частота, WireGuard автоматически отправляет пакеты "keepalive" между узлами для поддержания активного состояния соединения. Это позволяет избежать закрытия соединения между узлами, даже если они не обмениваются актуальными данными.
Частота PersistentKeepalive определяется в секундах и указывается в конфигурационном файле для каждого узла. Например, PersistentKeepalive = 25 означает, что WireGuard будет отправлять пакеты "keepalive" каждые 25 секунд.
PersistentKeepalive особенно полезен в ситуациях, когда маршрутизаторы или брандмауэры на сетевом пути между узлами имеют ограничения на время бездействия и могут закрывать неактивные соединения. Использование PersistentKeepalive помогает поддерживать активное соединение и предотвращает проблемы с нестабильным соединением в таких случаях.
Однако следует учитывать, что использование PersistentKeepalive может потреблять небольшой объем дополнительного трафика, поскольку пакеты "keepalive" отправляются регулярно даже при отсутствии актуальных данных для передачи. Поэтому рекомендуется выбирать разумную частоту, чтобы избежать излишней нагрузки на сеть.
Для того чтобы задействовать работу этого механизма необходимо просто добавить строку
в секцию [Peer] вашего желаемого конфига(пира). Теперь связь будет ещё более стабильна.
Статистика
Мы можем посмотреть статистику в которой можно увидеть кто сейчас подключен к туннелю и какой ему присвоен ip. Там же можно увидеть статистику по трафику. Чтобы посмотреть статистику - выполняем:

Чтобы каждый раз не вводить команду и смотреть статистику в реальном времени, обновляемую каждую секунду, воспользуйтесь данной командой
Управление конфигами
Бывают ситуации, когда нужно изменить количество конфигов - например добавить. Для этого необходимо сначала изменить параметр PEERS= в docker-compose.yaml а затем выполнить:
Имейте в виду что будут перегенерированы все конфиги включая старые. Это одновременно является минусом - все старые конфиги перестанут работать и придётся на каждом клиенте опять закачивать конфиг. И плюсом - если по какой то причине наши конфиги попали туда куда не планировалось, то там они тоже перестанут работать
QR код для мобильного приложения
Если мы планируем использовать VPN на смартфоне, то есть отличная функция которая упростит жизнь. С её помощью мы можем получить все настройки для клиента wireguard при помощи QR кода. Выполняем:
QR код будет выведен на экран прямо в терминале - гораздо удобнее чем заливать вручную конфиг на телефон.
Подключение
Официально wireguard имеет клиенты почти под все OS. То есть на Windows / Linux / Mac / BSD / Android / iOS и другие. Я буду рассматривать подключение с помощью клиента под windows
Переходим на официальный сайт Wireguard в раздел install. Скачиваем клиент, устанавливаем его. После того как установили открываем и добавляем наш конфиг (он же peer) и нажимаем подключить:

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

Как установить свой порт
Некоторые пользователи предпочитают поднимать vpn wireguard на нестандартном порту. Для того чтобы это сделать понадобится изменить 1 параметр в docker-compose.yml
Переходим в папку с wireguard
Редактируем фаил docker-compose.yml
Теперь меняем порт для хоста(выделен цветом) на любой другой.
- 51820:51820/udp
После чего обязательно перезагружаем контейнер wireguard
Для примера я поменял стандартный порт на 5182. Теперь необходимо сменить этот порт в самом подключении. Покажу на примере мобильного приложения. Обратите внимание что порт надо поменять в двух местах!

После внесения этих изменений у вас всё заработает.

Mission completed!
Почему-то не создает директорию с пирами. При попытке вывести сообщение PEER 1 is not active
ОтветитьУдалитьПроверил, там всё ок - что то не так делаете. Будьте внимательнее!
УдалитьПриветствую! Спасибо за инструкцию, все работает отлично. Но подскажи такой момент, пожалуйста, если я например хочу изменить один peer, чтобы он перестал работать на устройстве, где был подключен и сформировать новый QR - это возможно?
ОтветитьУдалитьПривет, не знаю у меня не было такой необходимости, поэтому только все сразу перегенерировать
Удалитьsudo docker-compose up -d --force-recreate
если задать папку для хранения конфигов wireguard и использовать в PEERS список пиров, то при удалении/добавлении пиров из docker-compose.yml и пересоздании контейнера, старые конфиги будут работать дальше.
Удалитьспасибо за статью. подскажите пожалуйста как перенаправить правильно трафик этого контейнера через другой контейнер? использовал network_mode: "service:мойВпнКонтейнер", удалил из конфига wireguard секцию с портами и прописал их в "мойВпнКонтейнер" в виде ports: - 51820:51820/udp. по qr коду подключаюсь нормально, рукопожатия идут, но к интернету доступа нет
ОтветитьУдалитьПривет, может дело в DNS ?
УдалитьОтправить комментарий