Wireguard VPN, Yggdrasil, ALFIS DNS и AdGuard

На написание этой статьи спровоцировала вот эта статья, с кучей странностей, и необязательных действий. Если коротко, то автор не понимает зачем он ставит те или иные программы, а именно - Unbound и dnsproxy. Но так как кроме исправления недочётов той статьи хочется добавить чего-то полезного, мы несколько расширим возможности подключающихся к серверу клиентов.

Во-первых, несколько слов об Yggdrasil. Это одноранговая сеть с адресами IPv6, которая по сути может считаться новым слоем сети Интернет. При установке и настройке у вас появляется новый сетевой интерфейс, который является окном в этот новый слой. Всё так же, как с обычным протоколом IPv6 - вы можете использовать его для удалённого подключения к своим устройствам без реального IPv4, для удалённого администрирования, размещения там каких-то ресурсов, например того же Nextcloud. Всё это находится как бы в глобальном пространстве общей приватной сети. Кто-то там разместил прокси-серверы для Telegram, которые нельзя заблокировать, кто-то выход в "большой" Интернет через сеть Tor. Там же есть несколько серверов для общения, вроде Mattermost, IRC и XMPP. Статей по настройке и использованию на Хабре уже достаточно.

Но что такое ALFIS? В сообществе криптохакеров ;) сети Yggdrasil есть некоторое количество никому не доверяющих людей, которые очень хотели иметь независимость от глобальной системы доменных имён, и мне пришлось написать систему, которая решает проблему синхронизации базы данных доменов без ненужного оверхеда. Как известно, проблема Треугольника Зуко не решалась полностью, до появления блокчейна. Но блокчейны бывают разные, и чаще всего обладают серьёзными недостатками вроде огромного размера блокчейна, потребности больших мощностей и так далее. Таким образом, собрав все требования в одном месте, приложив несколько месяцев работы, я представил сообществу ALFIS - блокчейн минимального размера, и не растущий постоянно, который обеспечивает работу десяти альтернативных доменных зон.

Что такое AdGuard, а точнее AdGuard Home, я рассказывать много не хочу. Если кратко, то это фильтрующий DNS сервер для малых сетей. Фильтрует лучше, чем всякие PiHole и подобные проекты, содержит свой очень крутой список правил, правила в котором сложнее, чем в обычных списках, и тем самым требуют меньше оперативной памяти и т.п. Например, там можно банить хосты по маске, вроде *.adserver.com.

Небольшой дисклеймер, чтобы было понятно почему я предлагаю настраивать Wireguard и Yggdrasil именно так, а не иначе. Ведь можно сделать по-другому, например установить только Yggdrasil, а где-нибудь на VPS поднять для себя прокси, и к тому прокси подключаться через Yggdrasil. Это тоже вариант. Но надо будет настраивать в каждом ПО использование прокси-сервера, а все сборки Yggdrasil под Android сейчас падают при отключении сети из-за ошибки в go-mobile. Так что, лучше на клиентах вроде Android OS, где одновременно может быть запущен только один VPN-интерфейс, просто установить и настроить только Wireguard. Он-то и будет обеспечивать ваше устройство и блокировкой рекламы, и выходом в Интернет без блокировок и перехвата трафика, и в "Интернет будущего" - Yggdrasil :)

Установка Yggdrasil на сервер

Я предлагаю устанавливать ПО именно в таком порядке, сначала Yggdrasil, потом Wireguard, потом AdGuard Home. Чуть дальше поймёте почему.

Устанавливать лучше всего по официальным гайдам. На официальной странице есть всё, что нужно: https://yggdrasil-network.github.io/installation.html

Если у вас возникнут трудности, то придерживайтесь этих шагов:

  1. Установить пакет Yggdrasil

  2. Прописать 1-2 публичных пира в конфиг /etc/yggdrasil.conf

  3. Включить службу, запустить службу (либо сразу systemctl enable --now yggdrasil)

  4. Через пару секунд попробуйте попинговать один из адресов 302:db60::53 или 302:7991::53.

  5. Если не справились, то можно зайти в русскоязычный чат в Телеграм и спросить там помощи: https://t.me/Yggdrasil_ru

Установка Wireguard на сервер

Как и автор предыдущей статьи, я предлагаю воспользоваться скриптом для установки Wireguard, но только другим, который обладает очень удобной особенностью - он спрашивает через какие интерфейсы выходить в сеть, и позволяет выбрать интерфейс Yggdrasil для хождения в IPv6 :)

  1. wget https://raw.githubusercontent.com/Nyr/wireguard-install/master/wireguard-install.sh

  2. chmod +x wireguard-install.sh

  3. ./wireguard-install.sh

В процессе установки ответьте на вопросы о сетевых интерфейсах, и выберите интерфейс tun0 когда скрипт спросит про IPv6. Таким образом, этот скрипт пропишет нужные правила в ваш фаирволл (ip6tables), чтобы вы смогли получать доступ к узлам в Yggdrasil.

В принципе, уже сейчас вы можете запустить этот скрипт ещё раз, и выбрав пункт "Add a new client" создать конфиг для первого клиента. Вы можете отсканировать показанный QR-код приложением Wireguard на Android, и сразу же подключиться и проверить связь и ваш IP-адрес. Но мы ведь хотели что-то ещё сделать с рекламой, да? Да ещё и Альфис там этот...

Реклама, ALFIS и все-все-все (простой способ)

Прямо сейчас в клиенте Wireguard вы можете прописать парочку серверов DNS из этого списка: 302:7991::53, 300:6223::53, 302:db60::53, и наслаждаться использованием доменных имён ALFIS и отсутствием рекламы. Весь ваш трафик шифруется проходя Wireguard, включая DNS. Зачем автор той статьи ставил DNSCrypt если и так есть шифрование до его VPS? А дальше трафик DNS у него шёл на обычный Unbound, странности.

Но в этом режиме ваш трафик DNS будет читать администратор тех серверов, если ему не лень. И он увидит ваш (о ужас!) IPv6, сгенерированный на вашем сервере.

Делаем сложно, и немного приватней и безопасней

Устанавливаем ALFIS как написано в README для вашей ОС. Конфиг будет по адресу /etc/alfis.conf. Там вы заметите, что его встроенный DNS-сервер слушает на адресе 127.0.0.1:53, кроме того, там прописаны forwarders - это серверы, на которые ALFIS перекинет ваши запросы к обычным доменам. Там можно указать даже адреса DoH от того же AdGuard DNS, и закончить настройку (не забыв перекинуть его на 10.7.0.1:53) ;)

Если у вас на сервере что-то другое слушает на адресе 127.0.0.1:53, то вы не сможете использовать этот адрес/порт. Вам надо, например, изменить в конфиге ALFIS'а хотя бы порт, например 5353.

После старта ALFIS, и немного подождав, можете проверить его работу, например nslookup myip.ygg 127.0.0.1, эта команда должна показать какую-то запись AAAA в диапазоне 200::/7.

Теперь берёмся за AdGuard Home. Идём на GitHub проекта, и выполняем автоматическую установку, как написано в README. После этого заходим в web-gui по адресу вашего сервера, и настраиваем AdGuard Home, чтобы он слушал все интерфейсы, но в настройках доступа пропишите свой диапазон из VPN, например 10.7.0.0/24 (такой использует предложенный скрипт).

Чтобы AdGuard Home мог отправлять запросы на доменные зоны Альфиса в сам Альфис, надо в разделе Апстрим-серверов прописать строку: [/anon/btn/conf/index/merch/mirror/mob/screen/srv/ygg/]127.0.0.1:5353, кроме того, вы можете ещё и приобщиться к зонам OpenNIC, прописав там [/bbs/chan/cyb/dyn/epic/geek/gopher/indy/libre/neo/null/o/oss/oz/parody/pirate/]51.254.25.115. Ну или другой айпи, ближе к вашему серверу.

Заключение

На этом этапе у вас уже будет рабочий VPN с современным шифрованием трафика, блокировка рекламы на уровне DNS (кстати, есть и другие уровни для более тщательной блокировки), поддержка независимых доменных зон ALFIS (а может и OpenNIC), и дикое желание куда-нибудь зайти в сети Yggdrasil ;)

Если желание есть, заходите на sites.ygg.

П.С. или немножко полезностей

Для приятной работы в Yggdrasil (и с сайтами IPv6-only) в Firefox нужно сделать две настройки в about:config.

network.http.fast-fallback-to-IPv4 = false - это позволит нормально открывать IPv6-only сайты. browser.fixup.alternate.enabled = false - а это позволит выключить автоматическую подстановку домена www. Иногда Firefox сразу переключается на HTTPS вместо HTTP, вот это отключит такое поведение: browser.fixup.fallback-to-https = false.

Google Chrome не приспособлен к нормальной работе с сайтами IPv6-only.

@Revertis
14.12.2021 16:34 UTC
Первоисточник

Комментарии

@kirillrst
14.12.2021 13:04 UTC
0

Как в ALFIS свой домен заиметь? И почему база доменов не пухнет, блокченн же? Или я что-то неправильно понял.

@Revertis
14.12.2021 13:18 UTC
+1

Домен регистрируется с помощью майнинга тем, кто его хочет получить. Новые блоки появляются только тогда, когда это действительно нужно, а не по времени.

15.12.2021 13:22 UTC
+3

Вот вы бы про этот ALFIS статейку написали. А то интересно, но непонятно. Если майнинг не по времени, то как бороться со злодеями, которые "отменят" регистрацию вашего домена, пересчитав цепочку блоков? Если весь блокчейн лежит у всех DNS-серверов, то как бороться с загаживанием блокчейна мусором из побуждений "пускай у них место на диске закончится"? Как бороться со сквоттингом? Ну и т.д.

15.12.2021 22:32 UTC
+1

Да, обязательно напишу.

@DarkNoys
14.12.2021 13:59 UTC
0

Прям вовремя статья вышла. Как раз думал как мне сотворить сеть с VPN, Wireguard и всякой магией. Ещё бы Wireguard заменить Nebula и прям mesh и децентрализация во все поля. Хотя у там могут быть такие же проблемы как у Yggdrasil на Андроид, а Wireguard хоть на тапок накатить можно.

@Revertis
14.12.2021 14:01 UTC
+1

Да, WireGuard работает на мобилах очень достойно.

@cats_shadow
14.12.2021 22:56 UTC
+1

Эх, подобную б статью, но про конфигурацию того из перечисленного. что может взлететь, на OpenWRT, Чтоб, к примеру, домашние компы без установки yggdrasil могли через роутер в эту сеть ходить.

@
15.12.2021 03:51 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
15.12.2021 11:58 UTC
0

По поводу zerotier, а точно необходим L2? Потому как вроде бы tailscale на openwrt работает, есть открытая реализация сервера, да и какие то подвижки в его открытом аналоге (internet) идут

16.12.2021 04:46 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
16.12.2021 05:23 UTC
0

Tailscale имеет закрытый сервер, клиент открыт, за исключением GUI оболочки, но какой GUI на openwrt? Но к открытому клиенту есть открытая (headscale),сторонняя реализация сервера, которая занимается раздачей конфигов пирам. Связь у пиров между собой - wireguard

@martein
15.12.2021 22:31 UTC
0

Устройство без yggdrasil на борту не сможет ходить в эту сеть даже с установленным на OpenWRT yggdrasil.

16.12.2021 04:48 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
16.12.2021 11:13 UTC
0

Сможет, почему нет

Там внутри обычный IPv6 со всеми вытекающими, достаточно правильно маршруты настроить.

@unrecognised13
17.12.2021 20:59 UTC
0

Подскажите дилетанту пожалуйста )

Скрипт по ссылке в разделе "Установка Wireguard на сервер" ничего не спрашивает про IPv6, поэтому в конфиге нет интерфейса tun0.

Какое какой текст и в какое место в конфиге его добавить? Заранее спасибо.

Мой конфиг:

[Interface]

PrivateKey = много всего =

Address = ХХ.ХХ.66.2/32,fdХХХХХХХ::2/128

DNS = 1.1.1.1,8.8.8.8,302:7991::53,300:6223::53

[Peer]

PublicKey = много всего = =

PresharedKey = = много всего =

ХХ.ХХ.36.170:60350 AllowedIPs = 0.0.0.0/0,::/0

@
04.01.2022 17:17 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
@3ycb
04.01.2022 17:17 UTC
0
Подскажите дилетанту пожалуйста )
Скрипт по ссылке в разделе «Установка Wireguard на сервер» ничего не спрашивает про IPv6, поэтому в конфиге нет интерфейса tun0.

И у меня та же история. :(
А как же исправить? Заранее спасибо.
@3ycb
04.01.2022 20:34 UTC
0
Уважаемые HELP
У меня точно такая же проблема, как и у unrecognised13
Все делал точно по инструкции автора статьи.
Сначала поставил Yggdrasil. Yggdrasil встал как огурчик и создал свой интерфейс tun0 с Ipv6 адресом, начинающимся на 200. Пингует замечательно адреса 302:db60::53 и 302:7991::53. С ним все хорошо.
Далее, установил Wireguard. Wireguard ничего не спросил про интерфейс в процессе установки(хотя было обещано). Wireguard создал свой интерфейс wg0, с адресами IPv4 10.7.0.0/24 и в его конфиге упоминается IPv4 10.7.0.1/24(естественно) и работает через него, как умолчательный.
Короче, все совсем не так, как обещали в статье(все эти манипуляции я проводил на двух разных компах, в разных местах. Результат одинаковый). Как сделать, чтобы Wireguard работал через Yggdrasil? Помогите чайнику.
А Вы автор, проверяйте скрипты, о которых пишете, перед публикацией.
@
04.01.2022 22:52 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
05.01.2022 06:04 UTC
0
Спасибо за ответ.
При установке WG скрипт видит два IPv6, выбираете тот, который принадлежит Ygg

Повторяю, при установке, WG не спрашивает ничего про «с_каким_интерфейсом_работать». Как выбирать то? Ткните носом, пример пожалуйста. Чайник я в этих вопросах.
05.01.2022 08:20 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
@
05.01.2022 10:59 UTC
0
НЛО прилетело и опубликовало эту надпись здесь
@dmitry_dvm
06.03.2023 18:17 UTC
0

Спасибо за статью, помогла кое-что понять.