Найти в Дзене
Кибер Лис

Свой VPN сервер c DWG WireHole — сборка Docker WireGuard VPN, PiHole и Unbound. Инструкция по быстрой и легкой настройке VPN сервера

Оглавление

Данная инструкция устарела. Новую версию инструкции читайте тут https://kiberlis.ru/dwg-docker-wireguard/

В данном кейсе мы будем использовать арендованный VPS сервер с установленной Ubuntu 20.04 (я выбрал провайдера Fornex)

Также я очень рекомендую гигабитный VPS от aeza.

Если данная инструкция для вас сложна и вам не хватает опыта, воспользуйтесь этой ссылкой - Docker Wireguard VPN с веб интерфейсом, DWG-UI для новичков на VPS от aeza.net

Памятка по безопасности вашего VPS сервера:

Памятка по безопасности VPS, VDS сервера Ubuntu, Debian - Кибер Лис

Что такое WireHole?

WireHole — это сборка Docker WireGuard, PiHole и Unbound с использованием Docker Compose для быстрого и легкого воссоздания инфраструктуры вашего VPN сервера. Установка и настройка подобной конфигурации вручную, без использования WireHole отнимет у вас много времени и сил.

Для подключения к VPN используется бесплатный WireGuard клиент доступный для Windows, MacOS, IOS, Android, Linux.

С помощью WireHole вы сможете разворачивать собственные полные или разделенные туннели WireGuard VPN с возможностями блокировки рекламы и трекеров (через Pihole) и собственным DNS с дополнительными параметрами конфиденциальности (через Unbound).

1. Подготовка системы:

Первым делом меняем список репозиториев на стандартные для Ubuntu 20.04 и обновляем систему.

Для этого используем команду в консоли при SSH подключении. (Использую SSH клиент PuTTY)

Полностью удаляем содержимое файла и вставляем эти строки для использования стандартного репозитория

Для Ubuntu 20.04:

Далее обновляем систему:

2. Установка WireHole:

Быстрая установка

Ручная установка - рекомендуется (мануал от IAmStoxe)

В ответных командах терминала будут QR-коды, которые вы можете использовать (если хотите) для настройки WireGuard на своем телефоне.

-2

На этом этапе установка завершена и вы уже можете использовать свой WireHole для VPN подключения закрыв консоль

Скачать конфигурационные файлы клиента для подключения к WireGuard вы можете через SFTP при помощи FileZilla или другого SFTP клиента.

Конфигурации расположены в папках Peer1, Peer2 и т.д. по пути /user/wirehole/wireguard (вместо *user* ваше имя пользователя linux)

-3

Файл с расширением .conf используется в основном для подключения с ПК и содержит текстовую информацию для подключения клиента WireGuard. Также его можно использовать для импорта тунелей из файла.

Файл с расширением .png это сохраненные QR коды для быстрого подключения клиента WireGuard с мобильного устройства.

3. Добавление новых клиентов WireGuard

Для добавления новых клиентов WireGuard на сервер необходимо набрать следующую команду:

далее найдите следующую строку - PEERS= и внесите изменение количества клиентов или укажите их названия через запятую без пробелов (рекомендуется)

Далее нужно перезапустить docker-compose для применения новой конфигурации командой:

В каталоге /wirehole/wireguard создадутся новые папки peer

Дополнительную информацию по созданию новых конфигураций для подключения клиентов (Peer) вы найдете в пункте 4.4. и 4.8

4. Тонкая настройка и документация WireHole (readme.md)

Вся информация из данного пункта переведена и позаимствована со страницы WireHole на GitHab у разработчика IAmStoxe

4.1. Рекомендуемая конфигурация / Раздельный туннель:

Измените AllowedIps на 10.2.0.0/24 для вашего WireGuard клиента, чтобы туннелировать только веб-панель и трафик DNS. (веб-панель PiHole по умолчанию открывается только при активном подключении к WireGuard)

4.2. Панель управления PiHole

При активном соединении WireGuard перейдите по адресу http://10.2.0.100/admin.

Пароль по умолчанию отсутствует, если вы не установили его в docker-compose.yml.

-4

4.3. Настройка динамического DNS (DDNS)

Если вы используете поставщика DDNS (используется если на сервере постоянно меняется IP адрес), вы можете отредактировать файл docker-compose.yml в разделе «wireguard». Вот выдержка из файла.

Вам нужно раскомментировать # - SERVERURL, чтобы он читался как - SERVERURL без #  , а затем изменить my.ddns.net на ваш URL-адрес DDNS.

4.4. Настройка / параметры

Образы контейнеров настраиваются с использованием параметров, передаваемых во время выполнения (например, приведенных ниже), многие параметры вы можете найти и отредактировать в файле 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= - Требуется для клиентского режима.

4.5. Переменные из файлов (Docker secrets)

Вы можете установить любую переменную среды из файла, используя специальный префикс FILE__.

Образец:

Будет установлена переменная среды PASSWORD на основе содержимого файла /run/secrets/mysecretpassword.

4.6. Umask для запуска приложений

Существует возможность переопределить параметры прав доступа к файлам umask по умолчанию для служб, запускаемых в контейнерах, с помощью необязательного параметра -e UMASK=022. Имейте в виду, что umask не является chmod, он вычитает из разрешений на основе значения, которое он не добавляет. Пожалуйста, прочитайте здесь, прежде чем обращаться за поддержкой.

4.7. Идентификаторы пользователя/группы

При использовании томов (флаги -v) могут возникнуть проблемы с правами доступа между ОС сервера (хоста) и контейнером. Этого можно избежать, позволяя указать PUID пользователя и PGID группы.

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

В этом случае PUID=1000 и PGID=1000, чтобы найти пользователя, используйте идентификатор пользователя, как показано ниже:

4.8. Добавление клиентов WireHole

Если для переменной среды PEERS установлено число или список строк, разделенных запятой, контейнер будет работать в режиме сервера, и будут сгенерированы необходимые серверные и одноранговые/клиентские конфигурации. QR коды конфигураций однорангового/клиентского узла будут выведены в журнал докера. Конфигурации также будут сохранены в текстовом формате и в виде изображения png в каталоге /wirehole/wireguard/peerX, если PEERS является переменной или целым числом, или /wirehole/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 wirehole && docker-compose up) будут созданы новые конфигурации.

Для того чтобы позже добавить новые конфигурации клиентов, вы увеличиваете переменную среды PEERS или добавляете названия пиров через запятую без пробелов (PEERS=DELL,OP8T,XXXXXXX,mikrotik) в файле docker-compose.yml и воссоздаете контейнер путем перезапуска docker-compose (cd wirehole && 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)

4.9. Изменение используемого провайдера DNS для Unbound

По умолчанию Unbound использует DNS вашего сервера. Если вы решите использовать Cloudflare или любой другой DNS, вы можете изменить используемого DNS-провайдера в unbound.conf.

Найдите forward-zone, раскомментируйте и измените IP-адреса для выбранного вами провайдера DNS.

ПРИМЕЧАНИЕ. Все, что следует после #  , является комментарием к строке. Это означает, что система не использует данные строки и если удалить знаки #  , то будет использоваться указанный DNS-провайдер (по умолчанию указан CloudFlare).

4.10. Доступные DNS-провайдеры

Хотя на самом деле вы можете использовать любого вышестоящего провайдера, которого хотите, команда pi-hole.net предоставляет фантастический анализ вместе со всей необходимой информацией о некоторых наиболее популярных провайдерах здесь: https://docs.pi-hole.net/guides/upstream-dns-providers/

Провайдеры, для которых у них есть информация:

  1. Google
  2. OpenDNS
  3. Level3
  4. Comodo
  5. DNS.WATCH
  6. Quad9
  7. CloudFlare DNS

4.11. Установка записи DNS для pihole

  1. Войти в админку pihole (http://10.2.0.100/admin/)
  2. Перейдите в «Local Records».
  3. Заполните форму, как на картинке ниже
-5

Если ваш DNS правильно настроен на используемом вами устройстве, и вы подключены к WireGuard, теперь вы можете перейти на http://pi.hole/admin, и он должен привести вас прямо к интерфейсу администратора pihole.

4.12. Системная информация

Доступ к оболочке WireGuard внутри контейнера (после выполнения данной команды вы можете использовать стандартные запросы к WG):

Доступ к оболочке PiHole:

Доступ к оболочке Unbound:

Для мониторинга логов контейнера в реальном времени:

Номер версии контейнера:

Номер версии образа:

4.13. Обновление WireHole

Образы LinuxServer, как правило, являются статическими, версионными и требуют обновления образа целиком и воссоздания контейнера для обновления приложений внутри.

Примечание. Обновление приложений внутри контейнера по НЕ поддерживается.

Ниже приведены инструкции по обновлению контейнеров:

Через Docker Compose

Обновить все образы:

или обновить один образ:

Обновить все контейнеры Docker Compose по мере необходимости:

или обновить один контейнер:

Вы также можете удалить старые висящие образы:

Через автообновление Watchtower (используйте, только если не помните исходные параметры)

Извлеките последний образ по его тегу и замените его теми же переменными за один прогон:

Вы также можете удалить старые висящие образы:

Примечание. Watchtower не рекомендуется в качестве решения для автоматического обновления существующих контейнеров Docker. На самом деле обычно автоматические обновления не рекомендуются. Однако это полезный инструмент для одноразового ручного обновления контейнеров, где вы забыли исходные параметры. В долгосрочной перспективе LinuxServer.io настоятельно рекомендует использовать Docker Compose.

4.14. Рекомендации по работе с сетью

Если вы планируете использовать Wireguard как удаленно, так и локально, скажем, на своем мобильном телефоне, вам необходимо подумать о маршрутизации. Большинство брандмауэров не будут правильно маршрутизировать порты, перенаправленные на вашем интерфейсе WAN, в локальную сеть по умолчанию. Это означает, что когда вы вернетесь домой, даже несмотря на то, что вы видите сервер Wireguard, обратные пакеты, вероятно, будут потеряны.

Это не является конкретной проблемой Wireguard, и есть два общепринятых решения: отражение NAT (настройка вашего пограничного маршрутизатора/брандмауэра таким образом, чтобы он правильно преобразовывал внутренние пакеты) или DNS с разделением горизонта (настройка вашего внутреннего DNS для возврата частного, а не общедоступный IP-адрес при локальном подключении).

Оба этих подхода имеют как положительные, так и отрицательные стороны, однако их настройка выходит за рамки данного документа, поскольку схема сети и оборудование у всех будут разными.

5. Примечания

1. Как добавить новые конфигурации клиентов?

см. пункты инструкции №3 и №4.8

2. Могу ли я собрать варианты ARM на x86_64?

Варианты ARM могут быть собраны на оборудовании x86_64 с использованием multiarch/qemu-user-static.

После регистрации вы можете определить файл dockerfile для использования с -f Dockerfile.aarch64.

3. Где я могу получить дополнительные черные списки для PiHole?

Список hosts от Schakal - рекомендуется использовать https://schakal.ru/hosts/alive_hosts_ru_com.txt

Большая коллекция черных списков

4. Часто занесенные в белый список домены

Список сообщества Pi-Hole

WhiteList anudepND

5. Почему вы используете Unbound / Какая польза от использования Unbound?

Официальный сайт PiHole: что дает это руководство?

6. Если происходят обрывы сети WireGuard и не проходит проверку DNSLeak (отключаем systemd-resolv на 53 порту)

Если у вас часто пропадает соединение WireGuard, то вам необходимо для начала удостовериться работает ли у вас Unbound (собственный ДНС сервер)

Для этого перейдите на сайт https://dnsleak.com/ и нажмите Start

Если у вас наблюдается такая картинка (нет зеленого замочка) и IP Address отличается от DNS IP и Hostname, то значит что Unbound у вас не работает и вы читаете дальше (возможная причина неисправности ниже).

-6

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

-7

Если тест https://dnsleak.com/ не пройден наберите команду:

В ответной части появятся используемые соединения сервера и их порты

-8

Если у вас есть строка udp 127.0.0.53:53 7835/systemd-resolv, то вам необходимо отключить этот резолвер для корректной работы Unbound в Ubuntu и избежания конфликта на 53 порту.

Наберите команды:

Наберите команду и убедитесь что резолвер отключен:

Наберите команды для пересоздания резолва:

Перезагрузите сервер командой:

Огромное спасибо am0led за предоставления кейса с ошибкой и за помощь в её устранении

7. Увеличиваем размер памяти под 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 буферы.

Наберите команду:

Добавьте строки в любое место файла:

нажмите Ctrl+X, затем Y, затем Enter

Перезагрузите сервер командой:

8. Настройка WireGuard клиента для Mikrotik с полной маршрутизацией трафика.

Настройка клиента Wireguard на Mikrotik RouterOS для подключения к VPS, VDS серверу или готовой конфигурации - Кибер Лис

Чат взаимопомощи в Telegram:

https://t.me/+2jP_7jlscboyMzMy

-9

Тэги: #VPn сервер #wireguard #pihole #unbound #wirehole #vpn #безопасность #безопасность в сети #vps сервер #интернет

Рекомендуем почитать
Документы, вакансии и контакты