gemlog/public/uk/my-alfis-dns-preset-on-yggdrasil-mycelium-router.gmi
2025-09-22 07:37:26 +03:00

185 lines
9.3 KiB
Text
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Мій пресет 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