每个人都应构建自己的网络栈

Hacker News Top 工具

摘要

本文描述了在 DN42 去中心化网络上开发和部署一个名为 DNet 的自定义网络栈,展示了其用于 DNS 等服务,以促进动手实践的网络学习和实现。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/08/30 12:43

# 运行你自己的ISP 第二部分 (DN42):每个人都应该构建自己的互联网 来源:https://blog.lyc8503.net/en/post/dn42-2-dnet/ 本文目前为实验性机器翻译,可能存在错误。如有不明确之处,请参考中文原版。我正在持续改进翻译质量。 这是"家庭ISP"系列的侧边栏,内容已正式进入梗图领域。如果某些概念或背景感觉解释不足,你可能需要先查看该系列之前的帖子。 ## https://blog.lyc8503.net/en/post/dn42-2-dnet/#前言 想象这样一个场景:某天,一个神秘人物(或可能是LLM)发现了主流Linux内核网络栈中的一个RCE漏洞。考虑到Linux的广泛使用,这个单一缺陷将立即让整个互联网濒临崩溃——每台联网主机都面临巨大风险。 这太集中化了。 因此我认为,在一个真正去中心化的网络中,每个人都应该实现自己独特的网络栈并用它来访问互联网。这样,即使某个实现存在缺陷或漏洞,也不会导致整个网络瘫痪。 好吧,我装不下去了。事实上,当我在南京大学学习计算机网络时,我突然心血来潮想为了好玩写一个自己的网络栈。在DN42中找不到足够多的混乱,我决定更进一步,将我的定制网络栈部署到DN42上——也许将来还会部署到IANA——并提供实际服务。 ## https://blog.lyc8503.net/en/post/dn42-2-dnet/#DNet 我当时确实写过几篇关于这个项目(DNet)的博客文章,虽然没有坚持太久:https://github.com/lyc8503/DNet-core 当时它或多或少实现了以下功能: 1. 在Linux上创建TAP设备(https://github.com/lyc8503/DNet-core/blob/main/driver/driver.cpp)并发送/接收以太网帧 2. 解析以太网帧并处理ARP(https://github.com/lyc8503/DNet-core/blob/main/layers/L2/arp/ARP.cpp)查找与响应 3. 解析IPv4数据包并响应ICMP(https://github.com/lyc8503/DNet-core/blob/main/layers/L3/icmp/ICMP.cpp)回声请求 4. 发送和接收UDP(https://github.com/lyc8503/DNet-core/blob/main/layers/L4/udp/UDP.cpp)数据包 最近,在闲置四年后,我重新拾起了这个项目,修补了一些bug,并草草拼凑出一个勉强可用的DNS服务器(https://github.com/lyc8503/DNet-core/blob/main/layers/L7/DNS.cpp),作为我DN42域名`42420167.xyz`的权威DNS。 现在,如果你从任何联网机器运行`dig TXT sgp1.dn42.42420167.xyz`,你将收到一个由我手写网络栈直接提供的DNS响应: ``` 1234567891011121314151617181920212223242526 ``` ``` # 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 (https://github.com/lyc8503/infra)。 在Debian上,我使用Docker Compose管理所有DN42服务(参见这里(https://github.com/lyc8503/infra/blob/master/edge/tasks/dn42.py))。这使我能够使用Docker的网络命名空间来隔离服务——每个容器在一个"干净"的环境中启动,避免了因重复部署而导致的配置漂移混乱。 ## https://blog.lyc8503.net/en/post/dn42-2-dnet/#后记 好了,就是这样——这篇帖子像它开始时一样突然结束。这只是我最新恶搞项目的快速展示,这次没有深入探讨代码细节。 最近,我感觉DN42的参与者太少了。网络流量主要是ICMP和BGP——没有真正的应用程序运行,没有太多恶作剧的空间。除非我日后获得一些新灵感,否则DN42系列可能就到此为止了~

相似文章

不安全世界中的安全

Lobsters Hottest

深入探讨 Netstack3 的设计理念,这是 Fuchsia 基于 Rust 的网络栈,在内测期间实现了极低的 bug 数量,现已部署在数百万台设备上,崩溃次数比前代减少了 20 倍。

网络与互联网,从基本原理出发

Hacker News Top

一篇深入的教育文章,从基本原理出发解释网络与互联网,涵盖分组交换、TCP、DNS、TLS以及数据如何在全球传输。

欧洲社交栈

Hacker News Top

一份公开宣言,呼吁建立欧洲社交网络,采用去中心化、开放的平台,以减少对外国垄断平台的依赖并促进数字自主权。

互联网边缘的社区建设

Lobsters Hottest

本文介绍了基于Nostr的社区建设,使用Pyramid中继软件和Jumble客户端,实现去中心化、可移植的社区,无需依赖中央服务器。