Unfortunately, I cannot install Alfis on my IPv6-only node.

https://github.com/Revertron/Alfis/issues/409

#Alfis #IPv6 #Yggdrasil

deb.revertron.com is missing IPv6 · Issue #409 · Revertron/Alfis

Unfortunately, I cannot install Alfis on my IPv6-only node. Is it possible to add an IPv6 address to deb.revertron.com or, alternatively, make the site accessible via Yggdrasil?

GitHub

Перевод на русский с интеграцией хэштегов прямо в текст.

---

# Настройка Fedi-сервера Snac для сети Yggdrasil | DevZone

#Fediverse #Yggdrasil #SelfHosting #P2P #Linux

Время чтения: 15 минут
11 мая

Вскоре после моих [размышлений о p2p](https://devzone.org.ua/post/hrabli-p2p) я решил попробовать развернуть собственный экспериментальный инстанс #Fediverse. Причём сделать это средствами оверлейной сети #Yggdrasil, так как я не планирую покупать выделенный IP или VPS для этой игрушки; вместо этого сервер будет хоститься за модемом — на одноплатнике или даже на ПК, когда я в сети, с динамическим адресом за NAT.

Эта заметка в первую очередь написана для себя, но может быть полезна тем, кто, как и я, только начинает эксперименты с администрированием собственного узла Fediverse и интересуется альтернативными сетями в контексте #Linux.

## Что такое Snac

#Snac #ActivityPub #Minimalism

[Snac](https://codeberg.org/grunfink/snac2) — это минималистичная альтернатива серверу #Mastodon, написанная на C, без JavaScript и без необходимости установки PostgreSQL. Все данные профилей хранятся в JSON-файлах. Недавно в сервер была добавлена [поддержка IPv6](https://codeberg.org/grunfink/snac2/pulls/256), поэтому он корректно работает и с диапазоном Yggdrasil `0200::/7`.

Поскольку Yggdrasil позволяет бесплатно генерировать неограниченное количество статических IP (на основе приватного ключа #Ed25519), в DNS здесь обычно нет необходимости. Опционально можно прикрутить #Alfis, но лично я этого не делаю (в том числе из-за до сих пор нерешённой проблемы #364), поэтому и не навязываю его в рамках протокола ActivityPub — формат будет просто `username@IPv6`, без необходимости что-то обновлять или «майнить» позже.

## Установка

#BuildFromSource #LinuxAdmin

1. Точный список пакетов для Debian я не знаю — система не новая и многое уже установлено. Согласно [README](https://codeberg.org/grunfink/snac2#building-and-installation), мне понадобились только `libssl-dev` и `libcurl4-openssl-dev` (в Fedora — примерно то же самое, но с суффиксом `-devel`).
2. Создаём отдельного системного пользователя для изоляции от потенциальных уязвимостей:

```
useradd -m snac
```
3. Для удобства меняем shell на bash в `/etc/passwd`.
4. Логинимся `su snac` и переходим в домашний каталог: `cd`.
5. Качаем исходники:
`git clone https://codeberg.org/grunfink/snac2.git`
6. Переходим в каталог проекта: `cd snac2`.
7. Компилируем и устанавливаем:
`make && sudo make install`.
8. Инициализируем хранилище сервера:
`snac init /home/snac/storage`.
9. Добавляем первого пользователя:
`snac adduser /home/snac/storage`.
10. Выходим обратно под root: `exit`.

## Конфигурация

#Networking #Yggdrasil

У меня уже установлен и настроен узел Yggdrasil. Если интересно — см. [предыдущую публикацию](https://devzone.org.ua/post/yggdrasil-mereza-z-detsentralizovanym-routynhom) или [официальную документацию](https://yggdrasil-network.github.io/documentation.html).

### Адрес подсети Yggdrasil

#IPv6

Этот шаг можно пропустить и использовать основной адрес `2*`, если порты `80` или `8001` свободны. Но важно понимать: в API ActivityPub сервер Snac сообщает свой адрес другим узлам, и те кэшируют его как часть ID. Поскольку адрес хранится в файлах, а не в БД, заменить его потом будет сложно. Поэтому лучше сразу выделить отдельный адрес, особенно для продакшена.

1. `yggdrasilctl getself` — узнаём свой IP и диапазон IPv6.
2. `ifconfig lo inet6 add IP` — вместо IP указываем произвольный адрес из полученного диапазона, например `3xx:xxxx:xxxx:xxxx::fed/64`.

⚠️ Данные, добавленные через `ifconfig`, не сохраняются после перезагрузки. Команду нужно прописать, например, в `/etc/netplan/01-ygglo.yaml`, `/etc/network/interfaces` или в `systemd`-сервис `yggdrasil.service` (через `ExecStartPost=`).

### Nginx-прокси

#Nginx #ReverseProxy

На сервере уже установлен Nginx, занимающий порт `80`. Менять это я не хочу, как и светить Snac на стандартном порту `8001`. Поэтому, имея выделенный IPv6-адрес, просто проксирую API на `80`, используя пример из [оригинальной конфигурации](https://codeberg.org/grunfink/snac2/src/branch/master/examples/nginx-alpine-ssl/default.conf):

```nginx
server {
listen [3xx:xxxx:xxxx:xxxx::fed]:80;
server_name 3xx:xxxx:xxxx:xxxx::fed;

location @proxy {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
proxy_pass http://[3xx:xxxx:xxxx:xxxx::fed]:8001;
}

location /.well-known/webfinger { try_files $uri @proxy; }
location /.well-known/nodeinfo { try_files $uri @proxy; }
location / { try_files $uri @proxy; }
location /fedi/ { try_files $uri @proxy; }
}
```

SSL здесь намеренно отсутствует: #Yggdrasil уже обеспечивает защищённый канал, и дополнительный слой не нужен.

Административный API (`admin` и `oauth`) я ограничил по IP, поскольку у клиентов Yggdrasil адреса тоже статические:

```nginx
location ~ /([^\/]+/admin|oauth) {
allow ADMIN_IP;
deny all;
try_files $uri @proxy;
}
```

### Конфигурация Snac

#JSON #Config

Редактируем `/home/snac/storage/server.json`, созданный командой `snac init`:

```json
{
"host": "[3xx:xxxx:xxxx:xxxx::fed]",
"address": "3xx:xxxx:xxxx:xxxx::fed",
"port": 8001,
"protocol": "http"
}
```

В моём случае протокол намеренно `http`.

### Доступ через iptables / ufw

#Firewall

Открываю порт только для диапазона Yggdrasil:

```
ufw allow from 0200::/7 to any port 80
```

Если не используете Nginx — указывайте реальный порт, например `8001`.

### systemd

#Systemd

На основе [официального примера](https://codeberg.org/grunfink/snac2/src/branch/master/examples/snac.service):

```ini
[Unit]
After=network-online.target
Wants=network-online.target

[Service]
User=snac
ExecStart=/usr/local/bin/snac httpd /home/snac/storage

[Install]
WantedBy=multi-user.target
```

## Бэкапы

#Backup #Rsync

Так как база — это файлы, резервное копирование тривиально. Использую `rsync` через `crontab -e`:

```
@daily rsync -av --delete /home/snac/storage /path/to/snac/daily
@weekly rsync -av --delete /home/snac/storage /path/to/snac/weekly
@monthly rsync -av --delete /home/snac/storage /path/to/snac/monthly
```

## Использование

#FediverseAdmin

После запуска (`snac httpd /home/snac/storage` или через systemd) можно открыть
`http://[3xx:xxxx:xxxx:xxxx::fed]` в браузере.

### Тест взаимодействия

#ActivityPub

Для проверки федерации разверните второй узел в Yggdrasil и попробуйте подписку или переписку через Web UI или клиент.

### Настройка браузера

#Firefox #IPv6

При первом использовании Yggdrasil-сайтов в Firefox может понадобиться изменить параметры в `about:config`:

* `browser.fixup.fallback-to-https = false`
* `browser.fixup.alternate.enabled = false`

---

#Fediverse #YggdrasilNetwork #Decentralization #AltNet #SelfHosted

Fediverse - the social network of the future
https://fediverse-decentralize.blogspot.com/2026/01/blog-post_10.html

Release v0.8.7 · Revertron/Alfis

Key Changes GUI & Cross-Platform Migrated UI from unsupported webview to wry crate for improved Linux compatibility and future stability. DNS Security Enhancements Implemented ephemeral ports fo...

GitHub

[Yggdrasil is a defunct network. You can translate the Russian (UA) eepsites with Firefox local translator that discuss the network and find that it is "experimental" and basically shouldn't be used for privacy or security--at all, really.]

#Invidious shows #Tor and #I2P up, but not #Yggdrasil -->
https://status.nadeko.net/status/invidious

@torproject - Tor onion has only momentary latency issues. Impressive deep network.

@[email protected] But there isn't much information in English about Yggdrasil.

If http://[302:68d0:f0d5:b88d::c] is the Ygg home page in #ipv6, what is
https://inv.nadeko.ygg in ipv6 --> "clearnet" whitelist suffix

. . . I2P does work, however. It is just high latency. . . but some people have found ways to optimize it so it can work with content besides ASCII

#ALFIS systemd shows 7 nodes active --> flawed /Issues/#356

reminds me of onionmasq VPN in Tor Project, all of which seem to have been abandoned
https://gitlab.torproject.org/ahf
https://gitlab.torproject.org/tpo/core/onionmasq

nadeko.net Invidious Status

@ps
Взагалі херово, що #Alfis не вміє інші мережі.
что ты имеешь в виду?
twinkle.lol

Вот скажите, греет ли ваш провайдер DNS вам душу? Мне похер на ваш ответ, майнинг ключа ALFIS мне греет всю комнату, душу, соседей, и мои лапы которые я сую под воздушный поток куллера. уже второй день, открываю окна а то зажарюсь.

Ну держись сука ключик, я тебя выцарапаю

https://github.com/Revertron/Alfis

#ALFIS #infosec #dns

GitHub - Revertron/Alfis: Alternative Free Identity System

Alternative Free Identity System. Contribute to Revertron/Alfis development by creating an account on GitHub.

GitHub
@kirill @Chia @[email protected] had never heard of #alfis before, really cool project

#podcast #interview #DNS

Мне очень понравился ламповый подкаст @Chia
Решил сделать свой. В одно лицо вещать сложно, поэтому позвал в гости @Revertron распросить про #ALFIS, который должен был похоронить рынок доменов за ненадобностью.

Мой #Castopod сломан, поэтому выложу пока здесь. Обсудили кто такой этот ваш DNS так чтобы неайтишнику было понятно. Причём тут блокчейн и DNS-койны, и почему бесплатное решение не так привлекательно как платное.

Ссылки:
- Тут будет RSS на подкаст
- Сайт ALFIS: https://alfis.name
- Чат в Телеге: https://t.me/ALFIS_RU
- Альтернативы:
ENS (Ethereum Name Service), Handshake, Namecoin, Unstoppable Domains, Blockstack
- Музончик https://ccmixter.org/files/Javolenus/68576

UPD: Чуть рассинхрон дорожек пофиксил

GitHub - Revertron/Alfis: Alternative Free Identity System

Alternative Free Identity System. Contribute to Revertron/Alfis development by creating an account on GitHub.

GitHub

Seems that times of #Alfis DNS is gone..
nobody fix the issues there, including this one

> Waiting for last full block to be signed. Try again later.

#again

β-Doku is now online!

Search and read #DokuWiki Howto with #Gemini protocol:

gemini://[301:23b4:991a:634d::b] - #Yggdrasil
gemini://betahowto.ygg - #Alfis DNS
gemini://betahowto.duckdns.org - Clearnet

p.s. beta - also because proxima ;)

Sources:
https://github.com/YGGverse/betadoku

GitHub - YGGverse/betadoku: DokuWiki Satellite for Gemini Protocol

DokuWiki Satellite for Gemini Protocol. Contribute to YGGverse/betadoku development by creating an account on GitHub.

GitHub