На написание этой статьи спровоцировала вот эта статья, с кучей странностей, и необязательных действий. Если коротко, то автор не понимает зачем он ставит те или иные программы, а именно - 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
Если у вас возникнут трудности, то придерживайтесь этих шагов:
Установить пакет Yggdrasil
Прописать 1-2 публичных пира в конфиг
/etc/yggdrasil.conf
Включить службу, запустить службу (либо сразу
systemctl enable --now yggdrasil
)Через пару секунд попробуйте попинговать один из адресов
302:db60::53
или302:7991::53.
Если не справились, то можно зайти в русскоязычный чат в Телеграм и спросить там помощи: https://t.me/Yggdrasil_ru
Установка Wireguard на сервер
Как и автор предыдущей статьи, я предлагаю воспользоваться скриптом для установки Wireguard, но только другим, который обладает очень удобной особенностью - он спрашивает через какие интерфейсы выходить в сеть, и позволяет выбрать интерфейс Yggdrasil для хождения в IPv6 :)
wget https://raw.githubusercontent.com/Nyr/wireguard-install/master/wireguard-install.sh
chmod +x wireguard-install.sh
./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.