mirror of
https://codeberg.org/postscriptum/devzone.org.ua.git
synced 2026-02-18 22:02:41 +00:00
initial commit
This commit is contained in:
commit
d4994cde4c
61 changed files with 7044 additions and 0 deletions
173
post/miy-preset-alfis-dns-na-routeri-yggdrasilmycelium.md
Normal file
173
post/miy-preset-alfis-dns-na-routeri-yggdrasilmycelium.md
Normal file
|
|
@ -0,0 +1,173 @@
|
|||
# Мій пресет Alfis DNS на роутері Yggdrasil / Mycelium
|
||||
|
||||
Я тут знову примудрився грохнути операційну систему, тому довелося піднімати конфіги руками. Цього разу, вирішив створити нотатку, щоб не обмірковувати все спочатку кожного разу коли партачу з системою.
|
||||
|
||||
Отже, [Alfis DNS](https://devzone.org.ua/post/alfis-dns-reyestratsiia-domenu-v-blokcheyn) в мене крутиться на окремому девайсі ARM, який слугує спільним резольвером для звичайних доменів Інтернет а також внутрішніх `.ygg`, `.srv` тощо. Для синхронізації блокчейну, тут використовуються оверлейні мережі [Yggdrasil](https://devzone.org.ua/post/yggdrasil-mereza-z-detsentralizovanym-routynhom) і [Mycelium](https://devzone.org.ua/post/vstanovlennia-routera-merezi-mycelium-v-linux). Таким чином, цей роутер виступає у якості проксуючого DNS на всі локальні девайси, що до нього підключаються - тобто я не ставлю Alfis на всі клієнти але користуюся резольвом доменних зон через спільний сервер, що поєднує собою усі альтернативні напрямки. Також цей роутер підтримує саму мережу Alfis, виступаючи для неї у якості публічного піра (для шейрингу блокчейн та обміну DHT)
|
||||
|
||||
Оскільки мій резольвер не взаємодіє з пірами Інтернет (хоча така опція там є стандартною), мій пресет також передбачає особистий [форк](https://github.com/YGGverse/Alfis/tree/mycelium-network-mode) до [PR#386](https://github.com/Revertron/Alfis/pull/386) який додатково включає комбіновані правила фільтрації вихідних з'єднань на Yggdrasil і Mycelium (в оригіналі там тільки опція Yggdrasil) - будьте уважні, бо конфіг тут також відрізнятиметься!
|
||||
|
||||
## Роутер
|
||||
|
||||
Я встановлюю редакцію Alfis зі свого репозиторію з патчем який досі вісить в PR:
|
||||
|
||||
* `git clone https://github.com/YGGverse/Alfis.git && cd Alfis`
|
||||
* `git checkout mycelium-network-mode` - гілка з підтримкою Mycelium
|
||||
* `cargo build --release --no-default-features` - збірка без GUI (демон)
|
||||
* `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`
|
||||
Loading…
Add table
Add a link
Reference in a new issue