From aadc51c11d73e81cfc6979b9eced62be9511e137 Mon Sep 17 00:00:00 2001 From: postscriptum Date: Wed, 17 Sep 2025 22:48:42 +0300 Subject: [PATCH] add `my-alfis-dns-preset-on-yggdrasil-mycelium-router.gmi` --- public/uk/index.gmi | 1 + ...ns-preset-on-yggdrasil-mycelium-router.gmi | 185 ++++++++++++++++++ 2 files changed, 186 insertions(+) create mode 100644 public/uk/my-alfis-dns-preset-on-yggdrasil-mycelium-router.gmi diff --git a/public/uk/index.gmi b/public/uk/index.gmi index d352363..8992aa8 100644 --- a/public/uk/index.gmi +++ b/public/uk/index.gmi @@ -9,6 +9,7 @@ ### Нотатки +=> my-alfis-dns-preset-on-yggdrasil-mycelium-router.gmi 2025-09-17 Мій пресет Alfis DNS на роутері Yggdrasil / Mycelium => install-mycelium-network-router-in-linux.gmi 2025-09-16 Встановлення роутера мережі Mycelium в Linux => restoration-of-ukrainian-web-archives.gmi 2025-09-14 Реставрація українських Веб-архівів => change-transmission-peer-id-user-agent.gmi 2025-09-13 Зміна PeerID / User-agent в Transmission diff --git a/public/uk/my-alfis-dns-preset-on-yggdrasil-mycelium-router.gmi b/public/uk/my-alfis-dns-preset-on-yggdrasil-mycelium-router.gmi new file mode 100644 index 0000000..fb306e9 --- /dev/null +++ b/public/uk/my-alfis-dns-preset-on-yggdrasil-mycelium-router.gmi @@ -0,0 +1,185 @@ +# Мій пресет Alfis DNS на роутері Yggdrasil / Mycelium + +Я тут знову примудрився грохнути операційну систему, тому довелося піднімати конфіги руками. Цього разу, вирішив створити нотатку, щоб не обмірковувати все спочатку кожного разу коли партачу з системою. + +Отже, Alfis DNS в мене крутиться на окремому девайсі ARM, який слугує спільним резольвером для звичайних доменів Інтернет а також внутрішніх `.ygg`, `.srv` тощо. Для синхронізації блокчейну, тут використовуються оверлейні мережі Yggdrasil і Mycelium. Таким чином, цей роутер виступає у якості проксуючого DNS на всі локальні девайси, що до нього підключаються - тобто я не ставлю Alfis на всі клієнти але користуюся резольвом доменних зон через спільний сервер, що поєднує собою усі альтернативні напрямки. Також цей роутер підтримує саму мережу Alfis, виступаючи для неї у якості публічного піра (для шейрингу блокчейн та обміну DHT) + +Оскільки мій резольвер не взаємодіє з пірами Інтернет (хоча така опція там є стандартною), мій пресет також передбачає особистий форк до PR#386, який додатково включає комбіновані правила фільтрації вихідних з'єднань на Yggdrasil і Mycelium (в оригіналі там тільки опція Yggdrasil) - будьте уважні, бо конфіг тут також відрізнятиметься! + +## Роутер + +Я встановлюю редакцію Alfis зі свого репозиторію з патчем, який досі вісить в PR: + +=> https://github.com/Revertron/Alfis/pull/386 + +``` bash +git clone https://github.com/YGGverse/Alfis.git && cd Alfis +git checkout mycelium-network-mode +cargo build --release --no-default-features +install target/release/alfis /usr/local/bin/alfis +``` + +Далі створюю окремого юзера, так як не планую пускати від рута (на системних портах) + +``` bash +useradd -m alfis +``` + +### Конфігурація + +Створюю файл конфігурації /etc/alfis.toml наступного змісту: + +``` /etc/alfis.toml +# сід-блок, лишаємо як є, якщо він не відрізняється від оригіналу мережі +# https://github.com/Revertron/Alfis/blob/master/alfis.toml#L2 +origin = "0000001D2A77D63477172678502E51DE7F346061FF7EB188A2445ECA3FC0780E" + +# шляхи до ключів: на роутері я не адмініструю домени, тому просто коментую +key_files = [ +#"key1.toml", "key2.toml", "key3.toml", "key4.toml", "key5.toml" +] + +# скільки блоків перевіряти на старті - лишаю стандартно +check_blocks = 8 + +# налаштування мережі +[net] +# вузли ініціації: коментую стандартні бо не довіряю Інтернет-доменам, +# лишаю тільки пачку відомих мені вузлів (але з часом вони можуть втратити свою актуальність) +peers = [ + #"peer-v4.alfis.name:4244", "peer-v6.alfis.name:4244", "peer-ygg.alfis.name:4244" + "[200:f8e5:2383:c1f8:7c73:8e74:2a5e:197e]:4244", + "[200:f8e5:2383:c1f8:7c73:8e74:2a5e:197e]:4244", + "[200:31b6:1c3a:3a1c:d322:3ed7:e109:4b3]:4244", + "[200:1106::a702:9841:e607:9b3]:4244", + "[208:84:68:55:2f91:8484:8d60:2fca]:4244", + "[208:25:40:bd:6ea9:89fc:ac75:87be]:4244", + "[208:62:45:62:59b8:f1a2:62ca:f87c]:4244", + "[225:ca89:40a8:611e:78b8:ab81:999a:d4d7]:4244", + "[301:84f7:4bc0:2f3a::53]:4244" +] + +# слухаю з'єднання на всіх IPv6 бо користуюсь Yggdrasil / Mycelium а від провайдера Інтернет на цьому інтерфейсі немає +listen = "[::]:4244" + +# цією опцією долучаюсь до підтримки мережі (обмін DHT і блокчейн даними) +public = true + +# опція з мого патчу: дозволяю вихідні з'єднання тільки на мережу Mycelium +mycelium_mode = true + +# аналогічно для Yggdrasil +yggdrasil_mode = true + +[dns] +# резольвер слухатиме клієнтів на IPv4 інтерфейсі +listen = "0.0.0.0:5353" + +# скільки потоків виділяти для резольву DNS +threads = 10 + +# для Інтернет-резольву я користуюсь клаудфлейр бо він швидкий, ви можете обрати собі інший +forwarders = [ +"1.1.1.1:53" +] + +# тут здається воно використовується якщо ви збирались з флагом --features="doh" (але я не перевіряв) +bootstraps = ["9.9.9.9:53", "94.140.14.14:53"] + +# не знаю, чому закоментив, лишаю оригінальний комент: +# Hosts file support (resolve local names or block ads) +# hosts = ["system", "adblock.txt"] + +[mining] +# кількість потоків CPU для майнингу (якщо використовується) +threads = 2 + +# понизити пріоритет для операцій майнингу (якщо використовується) +lower = true +``` + +### systemd + +Додаю конфігурацію /etc/systemd/system/alfis.service на основі оригінального файлу: + +=> https://github.com/Revertron/Alfis/blob/master/contrib/systemd/alfis.service + +``` /etc/systemd/system/alfis.service +[Unit] +Wants=network.target +After=network.target + +[Service] +User=alfis +Group=alfis + +# закоментив бо я переїхав в домашню теку юзера +# ProtectHome=true +ProtectSystem=true + +SecureBits=keep-caps +CapabilityBoundingSet=CAP_NET_BIND_SERVICE +AmbientCapabilities=CAP_NET_BIND_SERVICE + +SyslogIdentifier=alfis +WorkingDirectory=/home/alfis +ExecStart=/usr/local/bin/alfis -n -c /etc/alfis.toml + +# цю опцію можливо є сенс закоментити але лишив як в оригіналі +ExecReload=/bin/kill -HUP $MAINPID + +# це закоментив бо хай краще не працює аніж ребутається втіхаря +# Restart=always +# TimeoutStopSec=5 + +StandardOutput=file:///home/alfis/debug.log +StandardError=file:///home/alfis/error.log + +[Install] +WantedBy=multi-user.target +``` +* `systemdtl restart alfis` - запуск +* `systemdtl enable alfis` - автостарт +* `systemdtl status alfis` - перевірка статусу + +### Фаєрвол + +На роутері в мене Debian, тому додаю правила через ufw: + +``` bash +ufw allow from 0200::/7 to any port 4244 +ufw allow from 0400::/7 to any port 4244 +``` +* ці правила дозволяють підтримувати мережу Alfis DNS для мереж Yggdrasil (0200::/7) та Mycelium (0400::/7) відповідно + +``` bash +ufw allow from xx:xx:xx:xx to any port 5353 proto udp +``` +* хостів може бути декілька, я додаю таким чином дозвіл на резольв окремим локальним девайсам а іншим - забороняю (хоча чи не роздає часом мій атрибут public подібні відповіді через сокет 4244 - я не знаю, сподіваюсь що ні, бо так гіпотетично можлива DDOS атака на Інтернет DNS) + +## Клієнт + +На клієнті в мене Fedora, тому нижче інструкції для неї (для Ubuntu додам згодом, бо поки не під рукою для перевірки) + +``` /etc/systemd/resolved.conf +#/etc/systemd/resolved.conf +[Resolve] +DNS=xx.xx.xx.xx:5353 +#FallbackDNS=1.0.0.1 8.8.4.4 +Domains=~. +LLMNR=no +MulticastDNS=no +#DNSSEC=yes +#Cache=yes + +[Network] +DNSStubListener=no +``` +* xx.xx.xx.xx:5353 - адреса роутера, на якому крутиться резольвер Alfis DNS +* після змін перезапускаємо сервіс (systemctl restart systemd-resolved) + +Тут, теоретично можна (і було б зручно) змінити налаштування в GUI менеджері з'єднань GNOME, але в мене він не підтримує параметр порту - хоче 53 (пустий) а його я не хочу пускати на роутері. Тому таке рішення з resolved.conf + +## Посилання + +=> https://devzone.org.ua/post/miy-preset-alfis-dns-na-routeri-yggdrasilmycelium Веб-версія цієї публікації з коментарями на DevZone