Представьте ситуацию: однажды таинственный хакер (или, чем чёрт не шутит, LLM) находит RCE-уязвимость в сетевом стеке ядра Linux. Учитывая, насколько широко распространён Linux, один-единственный баг мгновенно поставит на грань коллапса весь интернет — каждый подключённый хост окажется под угрозой.
Это слишком централизованно.
Поэтому в по-настоящему децентрализованной сети каждому стоило бы реализовать собственный уникальный сетевой стек и выходить в интернет через него. Тогда даже если в одной реализации найдётся баг или уязвимость, это не обрушит всю сеть.
Ладно, сохранять серьёзное лицо дальше не получается. На самом деле, ещё во время изучения компьютерных сетей в Нанкинском университете возникло спонтанное желание написать собственный сетевой стек ради развлечения. Поскольку хаоса в DN42 показалось недостаточно, было решено пойти дальше и развернуть свой самодельный стек в DN42 — а может быть, однажды и в настоящем интернете (IANA) — чтобы он предоставлял реальные сервисы.
DNet
В своё время об этом проекте (DNet) было написано несколько заметок в блоге, хотя надолго энтузиазма не хватило: https://github.com/lyc8503/DNet-core
На тот момент проект более-менее умел следующее:
- Создавать TAP-устройство на Linux и отправлять/принимать Ethernet-кадры
- Разбирать Ethernet-кадры и обрабатывать поиск и ответы по ARP
- Разбирать IPv4-пакеты и отвечать на ICMP echo request
- Отправлять и принимать 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 на этом, вероятно, и закончится.