Представьте ситуацию: однажды таинственный хакер (или, чем чёрт не шутит, LLM) находит RCE-уязвимость в сетевом стеке ядра Linux. Учитывая, насколько широко распространён Linux, один-единственный баг мгновенно поставит на грань коллапса весь интернет — каждый подключённый хост окажется под угрозой.

Это слишком централизованно.

Поэтому в по-настоящему децентрализованной сети каждому стоило бы реализовать собственный уникальный сетевой стек и выходить в интернет через него. Тогда даже если в одной реализации найдётся баг или уязвимость, это не обрушит всю сеть.

Ладно, сохранять серьёзное лицо дальше не получается. На самом деле, ещё во время изучения компьютерных сетей в Нанкинском университете возникло спонтанное желание написать собственный сетевой стек ради развлечения. Поскольку хаоса в DN42 показалось недостаточно, было решено пойти дальше и развернуть свой самодельный стек в DN42 — а может быть, однажды и в настоящем интернете (IANA) — чтобы он предоставлял реальные сервисы.

DNet

В своё время об этом проекте (DNet) было написано несколько заметок в блоге, хотя надолго энтузиазма не хватило: https://github.com/lyc8503/DNet-core

На тот момент проект более-менее умел следующее:

  1. Создавать TAP-устройство на Linux и отправлять/принимать Ethernet-кадры
  2. Разбирать Ethernet-кадры и обрабатывать поиск и ответы по ARP
  3. Разбирать IPv4-пакеты и отвечать на ICMP echo request
  4. Отправлять и принимать UDP-пакеты

Недавно, спустя четыре года забвения, к проекту вернулись, залатали несколько багов и наспех собрали еле работающий DNS-сервер, который теперь выступает авторитативным DNS-сервером для DN42-домена 42420167.xyz.

Теперь, если выполнить dig TXT sgp1.dn42.42420167.xyz с любой машины, подключённой к интернету, придёт DNS-ответ, отданный напрямую самодельным сетевым стеком:

# dig TXT sgp1.dn42.42420167.xyz

; <<>> DiG 9.18.39-0ubuntu0.24.04.5-Ubuntu <<>> TXT sgp1.dn42.42420167.xyz
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21546
;; flags: qr rd ra; QUERY: 1, ANSWER: 7, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;sgp1.dn42.42420167.xyz.		IN	TXT

;; ANSWER SECTION:
sgp1.dn42.42420167.xyz.	20	IN	TXT	"IPv6 LLA: fe80::167"
sgp1.dn42.42420167.xyz.	20	IN	TXT	"PubKey: 8BKrEUrqba9mCzYHqWD2uTNtvrcYcKAls3vBQrY6dxE="
sgp1.dn42.42420167.xyz.	20	IN	TXT	"MP-BGP: enabled"
sgp1.dn42.42420167.xyz.	20	IN	TXT	"Extended Next Hop: enabled"
sgp1.dn42.42420167.xyz.	20	IN	TXT	"Looking Glass: http://sgp1.dn42.42420167.xyz:5000/"
sgp1.dn42.42420167.xyz.	20	IN	TXT	"ASN: 4242420167"
sgp1.dn42.42420167.xyz.	20	IN	TXT	"Endpoint: sgp1.dn42.42420167.xyz:2xxxx (xxxx is the last 4 digits of your ASN)"

;; Query time: 11 msec
;; SERVER: 223.5.5.5#53(223.5.5.5) (UDP)
;; WHEN: Sat Jun 13 22:22:39 CST 2026
;; MSG SIZE  rcvd: 397

А для тех, кто находится внутри DN42, есть возможность отправить запрос напрямую на этот стек по IP 172.20.42.224, например: ping 172.20.42.224

В предыдущем посте все VPS-инстансы были перенесены на NixOS, собранную методом чистого vibe coding. Но поскольку Nix на самом деле никто толком не знал, конфигурация быстро превратилась в неподдерживаемый беспорядок, который случайным образом ломался при каждом развёртывании.

После недолгих колебаний было решено снести всё и вернуться на Debian. На этот раз для управления используется pyinfra (инструмент инфраструктуры на Python): lyc8503/infra.

На Debian все сервисы DN42 управляются через Docker Compose (см. здесь). Это позволяет изолировать сервисы с помощью сетевых пространств имён Docker — каждый контейнер стартует в «чистом» окружении, что избавляет от привычного хаоса конфигурационного дрейфа при повторных развёртываниях.

Заключение

На этом всё — пост заканчивается так же резко, как и начался. Это просто быстрая демонстрация последнего троллинг-проекта, без глубокого погружения в код на этот раз.

В последнее время всё сильнее ощущается, что участников в DN42 маловато. Трафик в сети — это в основном ICMP и BGP, реальных приложений почти не работает, простора для новых шалостей немного. Если не появится новое вдохновение, серия постов про DN42 на этом, вероятно, и закончится.