- Что такое DWG?
- Основные контейнеры и пакеты DWG:
- Подготовка системы
- Установка и удаление сборки DWG
- Сборки DWG без веб-интерфейса управления Wireguard
- Установка сборки DWG-CLI от DigneZzZ
- Установка сборки WireHole от IAmStoxe
- Сборки DWG с веб-интерфейсом управления Wireguard
- Установка сборки DWG-UI от DigneZzZ
- Добавление новых клиентов WireGuard
- Тонкая настройка и документация DWG (readme.md)
- Рекомендуемая конфигурация / Раздельный туннель:
- Панель управления Adguard Home или PiHole
- Настройка динамического DNS (DDNS)
- Настройка / параметры
- Переменные из файлов (Docker secrets)
- Umask для запуска приложений
- Идентификаторы пользователя/группы
- Добавление клиентов WireHole (только для сборок без UI)
- Изменение используемого провайдера DNS для Unbound
- Доступные DNS-провайдеры
- Установка записи DNS для pihole
- Системная информация
- Обновление контейнеров DWG
- Рекомендации по работе с сетью
- Примечания
- Как добавить новые конфигурации клиентов?
- Могу ли я собрать варианты ARM на x86_64?
- Где я могу получить дополнительные черные списки для PiHole?
- Часто занесенные в белый список домены
- Почему вы используете Unbound / Какая польза от использования Unbound?
- Если происходят обрывы сети WireGuard и не проходит проверку DNSLeak (отключаем systemd-resolv на 53 порту)
- Увеличиваем размер памяти под UDP (актуально практически всем)
- Настройка WireGuard клиента для Mikrotik с полной маршрутизацией трафика.
- VPN туннель в локальную сеть
В данном кейсе мы будем использовать арендованный VPS сервер с установленной Ubuntu 22.04. Также инструкция подходит для Ubuntu 20.04 и Debian 11. Для VPS я выбрал провайдера Aeza, ранее использовал Fornex.
Для покупки VPS от аеза используйте мою реферальную ссылку и вы получите бонус 15% к пополнению баланса.
Fornex очень хороший и стабильный провайдер, но Aeza имеет перед ним ряд преимуществ таких как скорость 1-10 гигабит вместо 100 мегабит, и более современные процессоры.
Обсуждение темы DWG VPN на форуме opeNode.ru
Если данная инструкция для вас сложна и вам не хватает опыта, воспользуйтесь этой ссылкой — Docker Wireguard VPN с веб интерфейсом, DWG-UI для новичков на VPS от aeza.net
Что такое DWG?
DWG (Docker WireGuard) — это различные сборки Docker контейнеров WireGuard VPN в комбинации c Unbound (DNS сервер), PiHole, AdGuard Home, WG Easy и другими полезными пакетами в различных комбинациях, для быстрого и легкого воссоздания инфраструктуры вашего VPN сервера. Установка и настройка подобных конфигураций вручную, без использования Docker контейнеров отнимет у вас много времени и сил.
Для подключения к VPN используется бесплатный WireGuard клиент доступный для Windows, MacOS, IOS, Android, Linux.
С помощью DWG вы сможете разворачивать собственные полные или разделенные туннели WireGuard VPN с возможностями блокировки рекламы и трекеров (через Pihole или AdGuard Home) и собственным DNS сервером Unbound с дополнительными параметрами конфиденциальности. В дальнейшем могут появиться сборки с новым функционалом.
Основные контейнеры и пакеты DWG:
1) WireGuard — это быстрый, современный и безопасный протокол виртуальной частной сети (VPN), который разработан для защиты интернет-трафика. Он был создан Джейсоном Доненфельдом и впервые был выпущен в 2016 году.
WireGuard использует современные криптографические протоколы и алгоритмы, такие как Curve25519, ChaCha20 и Poly1305, чтобы обеспечить высокий уровень безопасности и скорость передачи данных. Он также предлагает простой и легковесный дизайн, который обеспечивает простоту в использовании и настройке.
WireGuard является открытым исходным кодом и доступен для многих операционных систем, включая Linux, Windows, macOS, Android и iOS. Он получил широкую популярность среди пользователей VPN, которые ценят его скорость и безопасность.
2) Unbound — это реализация резолвера DNS, которая обеспечивает безопасное и быстрое разрешение имен DNS, по сути данная программа предоставляет возможность создания собственного DNS сервера.
При использовании VPN соединения, Unbound может быть использован для улучшения безопасности и конфиденциальности пользователей. Он может быть использован вместе с VPN для создания частной DNS-зоны, которая обрабатывает запросы на DNS-резолвинг напрямую на устройстве пользователя, вместо отправки их на общедоступный DNS-сервер.
Использование Unbound с VPN может помочь защитить пользователя от утечки DNS-запросов, которые могут раскрыть информацию о посещенных им ресурсах. Кроме того, Unbound может уменьшить время задержки при резолвинге DNS-запросов, так как он может кэшировать запросы на локальном устройстве, что обеспечивает быстрый доступ к часто посещаемым сайтам.
В целом, использование Unbound с VPN может улучшить безопасность, конфиденциальность и скорость обработки запросов на DNS-резолвинг.
3) Pihole и Adguard Home — это два популярных инструмента для блокировки рекламы и нежелательного контента в сети Интернет. Они работают как DNS-серверы и фильтруют трафик, блокируя запросы к рекламным и вредоносным сайтам.
Pihole — это бесплатный и имеющий открытый исходный код инструмент, который можно установить на свой локальный сервер. Adguard Home имеет также бесплатный и открытый исходный код, но предоставляет возможность использовать его как самостоятельное приложение или в качестве Docker-контейнера.
В совокупности с VPN Wireguard оба этих инструмента могут быть полезны, но выбор зависит от ваших потребностей и предпочтений.
Pihole имеет более широкое сообщество пользователей и большую базу данных фильтров, что может помочь в блокировке большего количества нежелательного контента. Однако, установка Pihole может быть сложнее для новичков, чем установка Adguard Home. Также все списки блокировок из Pihole абсолютно совместимы с Adguard Home.
Adguard Home, с другой стороны, имеет более простой и удобный пользовательский интерфейс, а также может работать на многих платформах, включая Windows, MacOS, Linux, Android и iOS. Кроме того, Adguard Home может работать в режиме DNS-over-HTTPS (DoH) и DNS-over-TLS (DoT), что делает его более безопасным и защищенным.
В целом, выбор между Pihole и Adguard Home зависит от ваших потребностей и удобства использования. Однако, оба инструмента могут быть эффективными при использовании с VPN Wireguard, так как они обеспечивают дополнительный уровень защиты и конфиденциальности при использовании Интернета.
4) WG Easy — это инструмент для настройки и управления VPN-сервером, основанном на протоколе WireGuard. Он облегчает установку и настройку сервера WireGuard, а также управление клиентскими подключениями к VPN.
WG Easy предоставляет простой веб-интерфейс для настройки сервера, который позволяет быстро создавать и управлять пользователями и их ключами доступа. Кроме того, он предоставляет скрипты для автоматической генерации конфигурационных файлов клиента и упрощения подключения к VPN-серверу WireGuard.
WG Easy является открытым исходным кодом и может быть установлен на большинство дистрибутивов Linux. Он позволяет легко создавать и управлять безопасными VPN-подключениями с использованием WireGuard.
С его помощью вы можете создавать конфигурационные файлы, добавлять или удалять клиентов и управлять соединениями.
Подготовка системы
Первым делом обновляем список репозиториев Ubuntu 22.04 и обновляем систему.
Также я советую заранее позаботиться о безопасности вашего сервера и прочитать мою памятку по безопасности: Памятка по безопасности VPS, VDS сервера Ubuntu, Debian — Кибер Лис
Для обновления системы используем команду в консоли при SSH подключении. (Я использую SSH клиент Tabby, иногда PuTTY)
Обновляем репозитории и пакеты:
apt update -y &&
apt upgrade -y
Устанавливаем Docker:
#Установка Docker
curl -fsSL https://get.docker.com -o get-docker.sh &&
sh get-docker.sh
# Запускаем и включаем службу Docker
systemctl start docker &&
systemctl enable docker
Устанавливаем Docker Compose:
# Установка docker-compose
curl -L --fail https://raw.githubusercontent.com/linuxserver/docker-docker-compose/master/run.sh -o /usr/local/bin/docker-compose &&
chmod +x /usr/local/bin/docker-compose
Установка и удаление сборки DWG
Выберете одну из интересующих вас сборок DWG исходя из описания и совершите установку сборки Docker WireGuard согласно её описанию.
Ссылки на другие интересные сборки в комментариях приветствуются, и могут попасть в данный список сборок DWG.
Если вы ранее использовали какую-либо сборку Wireguard в контейнерк Docker вам необходимо удалить все контейнеры старой сборки DWG перед установкой новой (контейнеры wireguard, unbound, adguardhome и т.п.) .
Для удаления контейнеров Docker, следуйте этой процедуре:
Выведете список всех контейнеров в вашей системе:
docker ps -a
Остановите запущенные контейнеры по одному, если они работают, с помощью команды:
docker stop <название_контейнера_или_id>
Удалите контейнеры по одному с помощью команды:
docker rm <название_контейнера_или_id>
Если вы хотите остановить и удалить все контейнеры Docker, то можете использовать следующую команду:
docker stop $(sudo docker ps -q) &&
docker rm $(sudo docker ps -a -q)
Проверьте, что контейнеры успешно удалены, используя команду:
docker ps -a
Вы должны увидеть список всех контейнеров Docker, которые находятся на вашей системе. Если вы больше не видите контейнера, который вы только что удалили, значит, удаление прошло успешно.
Также обязательно удалите старые сети docker командой:
docker network prune
Для удаления старых файлов сборки используйте команду:
rm -R папка_сборки
Сборки DWG без веб-интерфейса управления Wireguard
DWG-CLI от DigneZzZ
Установка сборкиДанная сборка включает в себя Docker контейнеры WireGuard, AdGuard Home и Unbound.
Контейнер c Unbound предоставляет собственный DNS сервер с кэшированием DNS и дополнительными параметрами конфиденциальности.
Контейнер c AdGuard Home (более современный аналог чем PiHole) используется для блокировки рекламы, аналитических трекеров и редактирования списка используемых DNS серверов к которым обращается Unbound. Имеет очень полезную функцию параллельных запросов, DNS которой нет в PiHole.
Контейнер с WireGuard используется непосредственно для запуска серверной части Wireguard VPN
Для установки данной сборки введите следующие команды:
# wireadguard
git clone https://github.com/DigneZzZ/dwg-cli.git &&
cd dwg-cli &&
docker-compose up
Для установки этой же сборки скриптом со всеми зависимостями введите эту команду:
apt update && apt install curl sudo git -y && curl -Of https://raw.githubusercontent.com/DigneZzZ/dwg-cli/main/setup.sh && chmod +x setup.sh && ./setup.sh
Чтобы получить параметры по созданным конфигам:
cd dwg-cli &&
chmod +x peer.sh && ./peer.sh
Что установится при использовании скрипта:
- Сначала установится Git, чтобы можно было скопировать репозиторий
- Docker — последняя версия
- Docker-compose — последняя версия
- Wireguard — интерактивный режим введения количества пользователей (имена\количество)
- AdGuard Home — интерактивный режим создания пользователя и пароля (можно оставить стандартным)
- Unbound — все в стоке
- apache2-utils — необходим для генерации хэш-паролей
- ssh.sh — скрипт для смены порта SSH подключения
- ufw.sh — скрипт для установки UFW Firewall.
- peer.sh — выводит список пиров и выводит настройки
В ответных командах терминала будут QR-коды, которые вы можете использовать (если хотите) для настройки клиента WireGuard на своем телефоне.

На этом этапе установка завершена и вы уже можете использовать свою сборку DWG для VPN подключения закрыв консоль
Скачать конфигурационные файлы клиента для подключения к WireGuard вы можете через SFTP при помощи FileZilla или другого SFTP клиента.
Конфигурации расположены в папках Peer1, Peer2 и т.д. по пути /user/dwg-cli/wireguard (вместо *user* ваше имя пользователя linux)
Файл с расширением .conf используется в основном для подключения с ПК и содержит текстовую информацию для подключения клиента WireGuard. Также его можно использовать для импорта туннелей из файла.
Файл с расширением .png это сохраненные QR коды для быстрого подключения клиента WireGuard с мобильного устройства.
Данные для входа в панель управления AdGuard Home (по умолчанию):
# Логин и пароль AGH по умолчанию могут отличаться, всегда проверяйте документацию сборки на GitHub
http://10.2.0.100 или http://agh.local
login: admin
password: admin
# или такой логин-пароль
login: admin
password: 12345678
# Скрипт для смены пароля AGH
bash <(wget -qO- https://raw.githubusercontent.com/DigneZzZ/dwg/main/change.sh)
WireHole от IAmStoxe
Установка сборкиЭто самая первая сборка wireguard в Docker.
Данная сборка включает в себя докер контейнеры WireGuard, PiHole и Unbound. Основное отличие данной сборки от сборки из пункта 2.1. это использование менее функционального PiHole вместо AgGuard Home.
Ранее я пользовался данной сборкой, сейчас же использую сборку из пункта 2.1. Все настройки сборки Wirehole идентичны сборке WireAdGuard от nubortg.
Для установки сборки Wirehole введите следующие команды:
# wirehole
git clone https://github.com/nubortg/wirehole.git &&
cd wirehole &&
docker-compose up
Сборки DWG с веб-интерфейсом управления Wireguard
DWG-UI от DigneZzZ
Установка сборкиДанная сборка включает в себя докер контейнеры WireGuard, AdGuard Home, Unbound и веб интерфейс для управления клиентами Wireguard — WG Easy.
Подробную инструкцию и ветку разработчика сборки вы найдете на форуме openode.ru
1. Скопируйте следующую команду для копирования установочных файлов из репозитория GIT и запуска shell скрипта установки сборки:
# DWG-UI - сборка с WG Easy
apt update && apt install curl sudo git -y && curl -Of https://raw.githubusercontent.com/DigneZzZ/dwg-ui/main/setup.sh && chmod +x setup.sh && ./setup.sh
Что установится:
- Сначала установится Git, чтобы можно было скопировать репозиторий
- Docker — последняя версия
- Docker-compose — последняя версия
- Wg-easy — интерактивный режим введения пароля для веб
- AdGuard Home — интерактивный режим создания пользователя и пароля (можно оставить стандартным)
- Unbound — все в стоке
- apache2-utils — необходим для генерации хэш-паролей
- ssh.sh — скрипт для смены порта SSH подключения
- ufw.sh — скрипт для установки UFW Firewall.
- Напомнит установить ufw-docker и сам закроет доступ извне! ВНИМАНИЕ! Запускать только после того как создадите для себя клиента в WireGUARD!!!
2. Закройте панель управления WG Easy от внешнего доступа по этой инструкции согласно диалогу в установочном скрипте или вручную: https://openode.ru/topic/39-zakryvaem-dostup-k-wireguard-ui-izvne/#comment-67
WG Easy станет доступен только из при активном соединении VPN с вашим Wireguard сервером
Адреса веб-интерфейсов:
WG-Easy web-ui:
yo.ur.ip.xx:51821 #вместо yo.ur.ip.xx введите IP своего сервера, пароль введите тот что присвоили при установке
Доступ в web-ui из сети WG:
http://10.2.0.3:51821
AdGuard HOME:
http://10.2.0.100/
Логин: admin
Пароль: admin
# Скрипт для смены пароля AGH
bash <(wget -qO- https://raw.githubusercontent.com/DigneZzZ/dwg/main/change.sh)


Добавление новых клиентов WireGuard
Для добавления новых клиентов WireGuard в сборках без WG Easy необходимо набрать следующую команду:
sudo nano /root/название_сборки/docker-compose.yml
далее найдите следующую строку — PEERS= и внесите изменение количества клиентов или укажите их названия через запятую без пробелов (рекомендуется)
- PEERS=DELL,OP8T,XXXXXXX,mikrotik
- PEERS=N #вместо N введите необходимое количество подключаемых клиентов WireGuard
Далее нужно перезапустить docker-compose для применения новой конфигурации командой:
cd название_сборки &&
docker-compose up
В каталоге /название_сборки/wireguard создадутся новые папки peer
Дополнительную информацию по созданию новых конфигураций для подключения клиентов (Peer) вы найдете в пункте 4.4. и 4.8
Тонкая настройка и документация DWG (readme.md)
Большая часть информации из данного пункта переведена и позаимствована со страницы WireHole на GitHab у разработчика IAmStoxe. Также полностью актуальна для сборок без WG Easy, и частично актуальна для сборок с WG Easy.
Рекомендуемая конфигурация / Раздельный туннель:
Измените AllowedIps на 10.2.0.0/24 для вашего WireGuard клиента, чтобы туннелировать только веб-панель и трафик DNS. (веб-панель AdGuard Home или PiHole по умолчанию открываются только при активном подключении к WireGuard)
Панель управления Adguard Home или PiHole
Данные входа для AGH по умолчанию:
# Логин и пароль AGH по умолчанию могут отличаться, всегда проверяйте документацию сборки на GitHub
http://10.2.0.100
login: Admin
password: 12345678
# Скрипт для смены пароля AGH
bash <(wget -qO- https://raw.githubusercontent.com/DigneZzZ/dwg/main/change.sh)
Данные входа для PiHole по умолчанию:
#При активном соединении WireGuard перейдите по адресу http://10.2.0.100/admin
login: Admin
password: Без пароля
Пароль по умолчанию для PiHole отсутствует, если вы не установили его в docker-compose.yml.


Настройка динамического DNS (DDNS)
Если вы используете поставщика DDNS (используется если на сервере постоянно меняется IP адрес), вы можете отредактировать файл docker-compose.yml в разделе «wireguard». Вот выдержка из файла.
Вам нужно раскомментировать # — SERVERURL, чтобы он читался как — SERVERURL без # , а затем изменить my.ddns.net на ваш URL-адрес DDNS.
wireguard:
# ...
environment:
# ...
- SERVERURL=my.ddns.net #optional - Для использования DDNS раскомментируйте эту строку
# ...
# ...
Настройка / параметры
Образы контейнеров настраиваются с использованием параметров, передаваемых во время выполнения (например, приведенных ниже), многие параметры вы можете найти и отредактировать в файле docker-compose.yml или конфигурационных файлах сервера VPN в папке wirehole. Эти параметры разделены двоеточием и обозначают соответственно <внешний>:<внутренний>. Например, -p 8080:80 сделает порт 80 изнутри контейнера доступным с IP-адреса хоста на порту 8080 за пределами контейнера.
- -p 51820/udp — порт WireGuard
- -e PUID=1000 — для UserID — см. пояснение ниже
- -e PGID=1000 — для GroupID — см. пояснение ниже
- -e TZ=America/Los_Angeles — используемый часовой пояс, по умолчанию America/Los_Angeles
- -e SERVERURL=wireguard.domain.com — внешний IP или доменное имя для хоста докеров. Используется в режиме сервера. Если установлено значение auto, контейнер попытается автоматически определить и установить внешний IP-адрес.
- -e SERVERPORT=51820 — внешний порт для хоста докера. Используется в режиме сервера
- -e PEERS=1 — количество пиров, для которых нужно создать конфигурации. Требуется для режима сервера. Может быть и список имен: myPC,myPhone,myTablet…
- -e PEERDNS=auto — DNS-сервер задается в конфигурациях одноранговых/клиентских узлов (можно указать 8.8.8.8). Используется в режиме сервера. По умолчанию используется автоматический режим, который использует DNS хоста док-станции wireguard через включенную переадресацию CoreDNS.
- -e INTERNAL_SUBNET=10.13.13.0 — Внутренняя подсеть для wireguard, сервера и пиров (изменяйте только в случае конфликта). Используется в режиме сервера.
- -e ALLOWEDIPS=0.0.0.0/0 — IP-адреса/диапазоны, к которым одноранговые узлы смогут получить доступ с помощью VPN-подключения. Если не указано, значение по умолчанию: ‘0.0.0.0/0, ::0/0’ Это приведет к тому, что ВЕСЬ трафик будет направляться через VPN, если вы хотите раздельное туннелирование, установите только те IP-адреса, которые вы хотели бы использовать (туннель и IP-адрес рабочей группы сервера, например 10.13.13.1).
- -v /config — Содержит все соответствующие файлы конфигурации.
- -v /lib/modules — Папка модулей хоста Maps.
- —sysctl= — Требуется для клиентского режима.
Переменные из файлов (Docker secrets)
Вы можете установить любую переменную среды из файла, используя специальный префикс FILE__.
Образец:
-e FILE__PASSWORD=/run/secrets/mysecretpassword
Будет установлена переменная среды PASSWORD на основе содержимого файла /run/secrets/mysecretpassword.
Umask для запуска приложений
Существует возможность переопределить параметры прав доступа к файлам umask по умолчанию для служб, запускаемых в контейнерах, с помощью необязательного параметра -e UMASK=022. Имейте в виду, что umask не является chmod, он вычитает из разрешений на основе значения, которое он не добавляет. Пожалуйста, прочитайте здесь, прежде чем обращаться за поддержкой.
Идентификаторы пользователя/группы
При использовании томов (флаги -v) могут возникнуть проблемы с правами доступа между ОС сервера (хоста) и контейнером. Этого можно избежать, позволяя указать PUID пользователя и PGID группы.
Убедитесь, что все каталоги томов на хосте принадлежат тому же пользователю, которого вы указали, и любые проблемы с разрешениями исчезнут, как по волшебству.
В этом случае PUID=1000 и PGID=1000, чтобы найти пользователя, используйте идентификатор пользователя, как показано ниже:
$ id username
uid=1000(dockeruser) gid=1000(dockergroup) groups=1000(dockergroup)
Добавление клиентов WireHole (только для сборок без UI)
Если для переменной среды PEERS установлено число или список строк, разделенных запятой, контейнер будет работать в режиме сервера, и будут сгенерированы необходимые серверные и одноранговые/клиентские конфигурации. QR коды конфигураций однорангового/клиентского узла будут выведены в журнал докера. Конфигурации также будут сохранены в текстовом формате и в виде изображения png в каталоге /название_сборки/wireguard/peerX, если PEERS является переменной или целым числом, или /название_сборки/wireguard/peer_X, если вместо целого числа был предоставлен список имен.
Советую прописывать конфигурации Peer в docker-compose.yml не числом пиров, а названиями пиров через запятую (PEERS=DELL,OP8T,XXXXXXX,mikrotik)
Переменные SERVERURL, SERVERPORT, INTERNAL_SUBNET и PEERDNS являются необязательными переменными, используемыми для режима сервера. Любые изменения этих переменных среды вызовут перегенерацию серверных и одноранговых конфигураций. Конфигурации одноранговых/клиентских узлов будут воссозданы с существующими закрытыми/открытыми ключами. Для создания клиентских конфигураций с нуля внесите изменения в файл docker-compose.yml, удалите одноранговые папки с ключами (peerX, peer_X) и после перезапуска docker-compose (cd название_сборки && docker-compose up) будут созданы новые конфигурации.
Для того чтобы позже добавить новые конфигурации клиентов, вы увеличиваете переменную среды PEERS или добавляете названия пиров через запятую без пробелов (PEERS=DELL,OP8T,XXXXXXX,mikrotik) в файле docker-compose.yml и воссоздаете контейнер путем перезапуска docker-compose (cd название_сборки && docker-compose up, также см. пункт 3).
Чтобы снова отобразить QR-коды активных клиентских конфигураций, вы можете использовать следующую команду и вывести их в качестве аргументов: docker exec -it wireguard /app/show-peer 1 4 5 или docker exec -it wireguard /app/show-peer myPC myPhone myTablet (имейте в виду, что QR-коды также хранятся в формате PNG в папке конфигурации).
Шаблоны, используемые для серверных и одноранговых конфигов, сохраняются в /config/templates. Опытные пользователи могут изменить эти шаблоны и принудительно создать конфигурацию, удалив файл /config/wg0.conf и перезапустив контейнер.
(Эта часть документации была адаптирована из docker-wireguard)
Изменение используемого провайдера DNS для Unbound
По умолчанию Unbound использует DNS вашего сервера. Если вы решите использовать Cloudflare или любой другой DNS, вы можете изменить используемого DNS-провайдера в unbound.conf.
Найдите forward-zone, раскомментируйте и измените IP-адреса для выбранного вами провайдера DNS.
ПРИМЕЧАНИЕ. Все, что следует после # , является комментарием к строке. Это означает, что система не использует данные строки и если удалить знаки # , то будет использоваться указанный DNS-провайдер (по умолчанию указан CloudFlare).
forward-zone:
name: "."
forward-addr: 1.1.1.1@853#cloudflare-dns.com
forward-addr: 1.0.0.1@853#cloudflare-dns.com
forward-addr: 2606:4700:4700::1111@853#cloudflare-dns.com
forward-addr: 2606:4700:4700::1001@853#cloudflare-dns.com
forward-tls-upstream: yes
Доступные DNS-провайдеры
Хотя на самом деле вы можете использовать любого вышестоящего провайдера, которого хотите, команда pi-hole.net предоставляет фантастический анализ вместе со всей необходимой информацией о некоторых наиболее популярных провайдерах здесь: https://docs.pi-hole.net/guides/upstream-dns-providers/
Провайдеры, для которых у них есть информация:
- OpenDNS
- Level3
- Comodo
- DNS.WATCH
- Quad9
- CloudFlare DNS
Установка записи DNS для pihole
- Войти в админку pihole (http://10.2.0.100/admin/)
- Перейдите в «Local Records».
- Заполните форму, как на картинке ниже
Если ваш DNS правильно настроен на используемом вами устройстве, и вы подключены к WireGuard, теперь вы можете перейти на http://pi.hole/admin, и он должен привести вас прямо к интерфейсу администратора pihole.
Системная информация
Доступ к оболочке WireGuard внутри контейнера (после выполнения данной команды вы можете использовать стандартные запросы к WG):
docker exec -it wireguard /bin/bash
Доступ к оболочке PiHole:
docker exec -it pihole /bin/bash
Доступ к оболочке Unbound:
docker exec -it unbound /bin/bash
Для мониторинга логов контейнера в реальном времени:
docker logs -f wireguard
Номер версии контейнера:
docker inspect -f '{{ index .Config.Labels "build_version" }}' wireguard
Номер версии образа:
docker inspect -f '{{ index .Config.Labels "build_version" }}' ghcr.io/linuxserver/wireguard
Обновление контейнеров DWG
Образы LinuxServer, как правило, являются статическими, версионными и требуют обновления образа целиком и воссоздания контейнера для обновления приложений внутри.
Примечание. Обновление приложений внутри контейнера по НЕ поддерживается.
Ниже приведены инструкции по обновлению контейнеров:
Через Docker Compose
Обновить все образы:
docker-compose pull
или обновить один образ:
docker-compose pull wireguard
Обновить все контейнеры Docker Compose по мере необходимости:
docker-compose up -d
или обновить один контейнер:
docker-compose up -d wireguard
Вы также можете удалить старые висящие образы:
docker image prune
Через автообновление Watchtower (используйте, только если не помните исходные параметры)
Извлеките последний образ по его тегу и замените его теми же переменными за один прогон:
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower \
--run-once wireguard
Вы также можете удалить старые висящие образы:
docker image prune
Примечание. Watchtower не рекомендуется в качестве решения для автоматического обновления существующих контейнеров Docker. На самом деле обычно автоматические обновления не рекомендуются. Однако это полезный инструмент для одноразового ручного обновления контейнеров, где вы забыли исходные параметры. В долгосрочной перспективе LinuxServer.io настоятельно рекомендует использовать Docker Compose.
Рекомендации по работе с сетью
Если вы планируете использовать Wireguard как удаленно, так и локально, скажем, на своем мобильном телефоне, вам необходимо подумать о маршрутизации. Большинство брандмауэров не будут правильно маршрутизировать порты, перенаправленные на вашем интерфейсе WAN, в локальную сеть по умолчанию. Это означает, что когда вы вернетесь домой, даже несмотря на то, что вы видите сервер Wireguard, обратные пакеты, вероятно, будут потеряны.
Это не является конкретной проблемой Wireguard, и есть два общепринятых решения: отражение NAT (настройка вашего пограничного маршрутизатора/брандмауэра таким образом, чтобы он правильно преобразовывал внутренние пакеты) или DNS с разделением горизонта (настройка вашего внутреннего DNS для возврата частного, а не общедоступный IP-адрес при локальном подключении).
Оба этих подхода имеют как положительные, так и отрицательные стороны, однако их настройка выходит за рамки данного документа, поскольку схема сети и оборудование у всех будут разными.
Примечания
Как добавить новые конфигурации клиентов?
см. пункты инструкции №3 и №4.8
Могу ли я собрать варианты ARM на x86_64?
Варианты ARM могут быть собраны на оборудовании x86_64 с использованием multiarch/qemu-user-static.
docker run --rm --privileged multiarch/qemu-user-static:register --reset
После регистрации вы можете определить файл dockerfile для использования с -f Dockerfile.aarch64.
Где я могу получить дополнительные черные списки для PiHole?
Список hosts от Schakal — рекомендуется использовать https://schakal.ru/hosts/alive_hosts_ru_com.txt
Большая коллекция черных списков
Часто занесенные в белый список домены
Почему вы используете Unbound / Какая польза от использования Unbound?
Официальный сайт PiHole: что дает это руководство?
Если происходят обрывы сети WireGuard и не проходит проверку DNSLeak (отключаем systemd-resolv на 53 порту)
Если у вас часто пропадает соединение WireGuard, то вам необходимо для начала удостовериться работает ли у вас Unbound (собственный ДНС сервер)
Для этого перейдите на сайт https://dnsleak.com/ и нажмите Start
Если у вас наблюдается такая картинка (нет зеленого замочка) и IP Address отличается от DNS IP и Hostname, то значит что Unbound у вас не работает и вы читаете дальше (возможная причина неисправности ниже).
Однако в новых сборках DWG отличных от Wirehole в DNS IP может быть прописан адрес сервера CloudFlare или Adguard (смотрите строчку с названием сервера в DNS LEAK). Связано это с тем что DNS от CloudFlare имеет шифрование и многие пользователи считают его более безопасным чем использование только DNS вашего VPS сервера. Т.е. ваш собственный DNS сервер перенаправляет DNS на указнные сервера в Adguard Home или конфигурационном файле Unbound и в конечном итоге использует их.

Должно быть так:

Если тест https://dnsleak.com/ не пройден наберите команду:
apt install net-tools &&
netstat -plnut
В ответной части появятся используемые соединения сервера и их порты

Если у вас есть строка udp 127.0.0.53:53 7835/systemd-resolv, то вам необходимо отключить этот резолвер для корректной работы Unbound в Ubuntu и избежания конфликта на 53 порту.
Наберите команды:
sh -c 'echo DNSStubListener=no >> /etc/systemd/resolved.conf' &&
systemctl restart systemd-resolved.service
Наберите команду и убедитесь что резолвер отключен:
ss -tulpn | grep :53
Наберите команды для пересоздания резолва:
systemctl stop systemd-resolved.service &&
rm -f /etc/resolv.conf &&
ln -s /run/systemd/resolve/resolv.conf /etc/resolv.conf &&
systemctl start systemd-resolved.service
Перезагрузите сервер командой:
reboot now
Огромное спасибо am0led за предоставления кейса с ошибкой и за помощь в её устранении
Увеличиваем размер памяти под UDP (актуально практически всем)
Актуально если у вас возникает подобная ошибка при запуске Docker WireHole:
unbound[1:0] warning: so-rcvbuf 1048576 was not granted. Got 425984. To fix: start with root permissions(linux) or sysctl bigger net.core.rmem_max(linux) or kern.ipc.maxsockbuf(bsd) values.
Для исправления ошибки вам необходимо увеличить размер памяти под UDP буферы.
Наберите команду:
nano /etc/sysctl.conf
Добавьте строки в любое место файла:
net.core.rmem_max=1048576
net.core.rmem_default=1048576
net.ipv4.udp_mem=8388608 12582912 16777216
нажмите Ctrl+X, затем Y, затем Enter
Перезагрузите сервер командой:
reboot now
Настройка WireGuard клиента для Mikrotik с полной маршрутизацией трафика.
VPN туннель в локальную сеть
В данном пункте инструкции мы настроим серверную часть VPN-туннеля в локальную сеть ротуера с помощью «WireGuard» и обеспечим доступ из интернета к узлам LAN с различных устройств. Протестировано со сборками DWG-CLI и Wirehole.
Вы сможете свободно подключаться к устройствам из локальной сети роутера при включенном VPN Wireguard на устройстве вне локальной сети.

Если вы используете обычный WireGuard без Docker (WG), то для того чтобы сервер WireGuard и его клиенты видели локальную сеть роутера, вам нужно внести корректировки в файл wg0.conf на вашем VPS сервере.
Для сборок с веб интерфейсом, т.е. DWG-UI предположительно необходимо редактировать файл wg0.json. Сам лично не имею опыта проброса локалки именно для сборок DWG-UI, если нашли способ поделитесь в комментариях.
Найдите правила PostUp и PostDown в файле wg0.conf и удалите из них свой локальный интерфейс сервера (в моем случае -o eth0) чтобы правило masquerade работало для всех доступных интерфейсов.
Было:

Стало:

Также найдите строки содержащие Peer вашего Роутера в wg0.conf и добавьте IP адрес вашей локальной сети роутера в AllowedIPS (в моем случае 192.168.88.0/24)

Сохраните изменения в файле wg0.conf и перезапустите Wireguard на вашем VPS сервере.
Если вы используете DWG без веб-интерфейса Wireguard, то вам НЕ нужно редактировать файл wg0.conf, так как он все равно перезапишется докером. Вам необходимо отредактировать шаблон по созданию файла сервера Wireguard – server.conf (находится в папке wirehole/wireguard/templates).
Только в шаблоне server.conf вы можете прописать статичную конфигурацию Peer, отличающуюся от других клиентов Peer создаваемых докером (нельзя прописывать адрес локальной сети всем пирам в AllowedIPs). Также необходимо удалить название статичного Peer роутера из docker-compose.yml чтобы докер не задвоил вам конфигурацию для вашего роутера.
Измените правила PostUp и PostDown по аналогии с голым WireGuard.
Добавьте строки конфигурации Peer вашего роутера в конец файла server.conf, их можно скопировать из файла сгенерированного докером (папка wirehole/wireguard/peer_mikrotik)

Удалите название Peer роутера из docker-compose.yml и перезапустите докер.
Генерирование новых конфигов в WireHole происходит согласно содержимому файлов docker-compose.yml и server.conf, peer.conf (wirehole/wireguard/templates) при любом изменении в docker-compose.yml и перезапуска докера (cd wirehole && docker-compose up).
Также советую прописывать конфигурации Peer в docker-compose.yml не числом пиров, а названиями пиров через запятую (PEERS=DELL,OP8T,XXXXXXX,mikrotik)
Собрал на Aeza по пункту 2.2.1.
Кажется, с ним пониже скорость чем с 2.1.2
Мне только кажется или у этого есть основания? ._.
Это нормально что по инструкции Dignezz мой впн утекает в dns leak?
У вас нет утечки DNS Leak, просто unbound дополнительно ссылается на DNS сервера указанные в AdguardHome
Спасибо, все работает.
Хотел узнать, как удалять определеных клиентов ? Есть ли возможность ограничивать конфиг клиента/ QR code на определённое время (допустим на месяц)?
Определенных клиентов очень легко удалять через web интерфейс WG-Easy, эта возможность есть в сборке DWG-UI. В DWG-CLI клиенты удаляются через файл docker-compose.yml и данное действие описано в инструкции. Касательно ограничения конфига клиента на определенное время такая возможность отсутствует, доступно только полное удаление конфига.
Установил по инструкции на Debian 11
2.2. Сборки DWG с веб-интерфейсом управления Wireguard
2.2.1. Установка сборки DWG-UI от DigneZzZ
Не пойму, как сделать VPN туннель в локальную сеть.
Если в файле wg0.conf делать изменения, то он перезаписывается, а шаблон server.conf не могу найти, не вижу каталога и пути wirehole/wireguard/templates.
Подскажите, где искать.
Путь wireguard/templates актуален только для сборок без UI. Для сборок с GUI я еще не пробовал расшаривать локальную сеть, редактировать надо wg0.js
Здравствуйте, можно ли сделать так чтоб WireGuard работал через http proxy? Для меня это очень важный вопрос.
Спасибо!
Можно. На https://openode.ru/ попроси. Скорее всего сразу сборку готовую выкатят с proxy
Здравствуйте. Воспользовался 2.2.1. Установка сборки DWG-UI от DigneZzZ
В adguardhome пишется, что реклама блокируется, по факту как видел банеры, так и виже. Отдельно добавил все фильтра из faq adguardhome, не помогло. Включаю выключаю защиту adguard — разницы нет. В https://checkadblock.ru со всеми фильтрами не блокируется гифка и баннер. Самое интересное, что adguard расширение все блочит) Что мне делать, подскажите пожалуйста. Уже 2 раза переустановил, но толку ноль.
Ответил на форуме https://openode.ru/topic/116-dwg-ui/?do=findComment&comment=589&_rid=82
Если кратко, то нужно ознакомиться с моим сообщением на форуме, так как могут быть завышенные требования к AGH. Если же AGH не работает совсем, то будем разибираться дальше на форуме, возможно стоит сменить виртуальную машину или написать в поддержку хостера.
Если же AGH работает и вы хотите заставить его блокировать еще больше рекламы, то советую поэкспериментировать с черными списками DNS. Мне обычно хватает списков от Шакала https://4pda.to/forum/index.php?showtopic=275091&view=findpost&p=89665467
Здравствуйте!
Использовал Вашу статью ещё на дзене и поднял летом 2022 года WireHole (+ настройка fail2ban)
до сих пор отлично служит
периодически обновляю через docker-compose pull
но у меня идет утечка DNS (никакие настройки в браузере и сетевом адаптере не делал — да и не сказано про это нигде)
не могу понять из-за чего
в pi.hole прописаны Upstream DNS Servers (10.2.0.200, дефолт)
в файле конфигурации тоже стандарт DNS = 10.2.0.100
не знаете в чем может быть проблема?
Напишите в личку в телеграме или в чат. Можете сразу прислать скриншоты команды docker ps, также посмотрите есть ли ошибки при запуске контейнеров docker, если есть тоже присылайте скрины.
Предполагаю что Unbound не работает. Также пришлите скрины с dnsleak.com, возможно у вас прописан DNS от CloudFlare, но навряд ли, так как по умолчанию его прописали (раскомментировали) в unbound.conf только в новых сборках
Решили проблему
Я забыл что у меня GoodbyeDPI установлен 🤦♂️
Было бы классно, если бы вы еще добавили инструкции, или команды по смены паролей для Wg-easy и Adguard Home, если забыл дефолтные при установке сменить)
Сделаем. Скрипт для смены паролей уже есть, при первой возможности опишу. Пароль wg-easy можно сменить через docker-compose.yml и перезапуск контейнера docker, пароль AGH менять сложнее, потому лучше конечно использовать готовый скрипт для смены пароля.
Добрый день! Это как раз то что я искал, но есть один нюанс, но хочу сменить дефолтные подсети на 172…..
Удаляю контейнеры и подсесть , в компос файле прописываю новые сети и создаю новые контейнеры. Итог WG работает в новых подсетях если поменять в конфиге ДНС на 1.1.1.1 А соответственно unbound и AdGuard не работают, пробовал менять только подсеть WG но и в этом случае даже на старых подсетях unbound и AdGuard не работают. В чем может быть проблема?
У вас используется фаервол типа ufw? Скорее всего порты AGH и Unbound не открыты, хотя это странно если использовать скрипт DWG-UI так как он имеет проверку открытых портов
Какую сборку DWG используете? Также можете написать в чат и прислать туда скриншоты
ufw я намеренно отрубил дабы не мешал моим эксперементам))
Сборку использую эту: Сборки DWG с веб-интерфейсом управления Wireguard.
Благодарю, за совет с чатом)) его я и не заметил)