На написание этой статьи спровоцировала вот эта статья, с кучей странностей, и необязательных действий. Если коротко, то автор не понимает зачем он ставит те или иные программы, а именно - 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.

Комментарии (14)


  1. kirillrst
    14.12.2021 16:04

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


    1. Revertis Автор
      14.12.2021 16:18
      +1

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


      1. zzzzzzzzzzzz
        15.12.2021 16:22
        +3

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


        1. Revertis Автор
          16.12.2021 01:32
          +1

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


  1. DarkNoys
    14.12.2021 16:59

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


    1. Revertis Автор
      14.12.2021 17:01
      +1

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


  1. cats_shadow
    15.12.2021 01:56
    +1

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


    1. 13werwolf13
      15.12.2021 06:51

      дык взлететь может всё, вопрос как правильно сконфигурить

      у меня на openwrt работают и wg и ygg

      вместо adguard я юзаю StevenBlack/hosts

      а вот zerotier на openwrt работает паршиво, сильно тормозит и постоянно срёт в dmesg


      1. Aelliari
        15.12.2021 14:58

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


        1. 13werwolf13
          16.12.2021 07:46

          про tailscale ранее даже не слышал, залез на сайтик, бегло глянул, не нашёл ссылки на сорцы что печально.

          решил что потестирую, но потом передумал. даже если оно подойдёт всё равно переезжать не буду ибо переносить полтос нод с разными ОС на другую инфру такое себе занятие.. может быть позже.


          1. Aelliari
            16.12.2021 08:23

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


    1. martein
      16.12.2021 01:31

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


      1. 13werwolf13
        16.12.2021 07:48

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


      1. inkvizitor68sl
        16.12.2021 14:13

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

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