devzone.org.ua/post/vstanovlennia-routera-merezi-mycelium-v-linux.md
2025-12-03 15:20:46 +02:00

96 lines
No EOL
4.8 KiB
Markdown
Raw 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.

# Встановлення роутера мережі Mycelium в Linux
Коротка інструкція по встановленню оверлейної мережі [Mycelium](https://github.com/threefoldtech/mycelium) в Linux, оскільки навіть з моїми скілами, вона видалась дещо заплутаною, через безлад в репозиторії та відсутність доків.
По суті, Mycelium нічим особливим від [Yggdrasil](https://devzone.org.ua/post/yggdrasil-mereza-z-detsentralizovanym-routynhom) не відрізняється, окрім іншої моделі маршрутизації та реалізації роутера мовою Rust. Також, відомою мені характерною рисою цієї мережі - є наявність `traceroute`
Варто зауважити, що проєкт в стадії розробки, користуйтесь на власний ризик!
## Встановлення
Якщо в системі ще не встановлено інфраструктуру Rust/Cargo, то вам [сюди](https://rustup.rs/) або
``` bash
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
```
Далі клонуємо та збираємо пакунок з репозиторію:
``` bash
https://github.com/threefoldtech/mycelium.git
cd mycelium/myceliumd
cargo build --release
sudo install target/release/mycelium /usr/local/bin/mycelium
```
* можливо потрібно буде довстановити `apt install build-essential pkg-config libssl-dev`
### systemd
``` /etc/systemd/system/mycelium.service
#/etc/systemd/system/mycelium.service
[Unit]
Wants=network.target
After=network.target
[Service]
ProtectHome=true
ProtectSystem=true
SyslogIdentifier=mycelium
CapabilityBoundingSet=CAP_NET_ADMIN
ExecStartPre=+-/sbin/modprobe tun
ExecStart=/usr/local/bin/mycelium -k /etc/mycelium.bin --peers tcp://xxx.xx.xxx.x:xxxx
# Адреси підмереж
#ExecStartPost=/bin/sleep 5s
#ExecStartPost=/bin/ip address add xxx:xxxx:xxxx:xxxx::x1/64 dev mycelium
#ExecStartPost=/bin/ip address add xxx:xxxx:xxxx:xxxx::x2/64 dev mycelium
#Restart=always
#RestartSec=5
TimeoutStopSec=5
# mkdir /var/log/mycelium
StandardOutput=file:/var/log/mycelium/debug.log
StandardError=file:/var/log/mycelium/error.log
[Install]
WantedBy=multi-user.target
```
* `/etc/mycelium.bin` - це приватний ключ, він створюється автоматично при першому запуску
* в `--peers` вказуємо піри для підключення в оверлейному режимі, знайти їх можна [тут](https://github.com/threefoldtech/mycelium?tab=readme-ov-file#hosted-public-nodes-v06x) і [тут](https://github.com/YGGverse/mycelium-catalog?tab=readme-ov-file#public-peers)
* якщо журнали не потрібні - додайте до `exec` опцію ` --silent`
## Налаштування
Фаєрволи обслуговуються так само, як і у випадку Yggdrasil, тільки діапазон тут - `0400::/7`;
Для [Alfis DNS](https://devzone.org.ua/post/alfis-dns-reyestratsiia-domenu-v-blokcheyn) існує окремий [патч](https://github.com/YGGverse/Alfis/tree/mycelium-network-mode) ([PR#386](https://github.com/Revertron/Alfis/pull/386)), який теоретично вміє сікти все окрім Yggdrasil або Mycelium, але в мене там є деякі питання як і до іншого пірингового софту, які поки що не перевіряв.
### PAC
Мій файл конфігурації для окремого браузеру виглядає якось так:
``` config.pac
function FindProxyForURL(url, host)
{
if (/^0{0,1}[2-3][a-f0-9]{0,2}:/.test(host) || /\.ygg$/.test(host))
{
return 'DIRECT';
}
if (/^0{0,1}[4-5][a-f0-9]{0,2}:/.test(host))
{
return 'DIRECT';
}
return 'PROXY 127.0.0.1:123';
}
```
* тобто обслуговуються конекти Yggdrasil та Mycelium, а все інше йде на фіктивний проксі
* детальніше про конфіг PAC я писав у матеріалі [Безпечний перегляд сайтів Yggdrasil з Yggstack](https://devzone.org.ua/post/bezpechnyy-perehliad-saytiv-yggdrasil-z-yggstack)
## Тестування
* Доступний [репозиторій](https://github.com/YGGverse/mycelium-catalog) зі списком сервісів для цієї мережі
* [Українська спільнота адміністраторів альтернативних мереж](https://devzone.org.ua/topic/ukrayinska-spilnota-administratoriv-alternatyvnykh-merez)