开发者生态
morning
每个人都应该建立自己的网络堆栈
摘要
This article is currently an experimental machine translation and may contain errors. If anything is unclear, please refer to the original Chinese version. I am continuously working to improve the tra...
the
and
network
stack
this
one
Linux
for
DN42
DNet
2026-08-30
1 阅读
约7分钟阅读
uneven9434
字号:
本文目前是实验性机器翻译,可能包含错误。如有不明之处,请参阅中文原文。我正在不断努力改进翻译。这是“ISP@Home”系列的一个侧面条目,其中事物已正式进入模因领域。如果某些概念或背景感觉解释不充分,您可能需要先查看本系列之前的帖子。前言 想象一下这样的场景:有一天,一位神秘人物(或者可能是法学硕士)在主流 Linux 内核的网络堆栈中发现了一个 RCE 漏洞。考虑到 Linux 的使用范围如此广泛,这一缺陷将立即使整个互联网处于崩溃的边缘——每台联网主机都面临巨大的风险。这实在是太中心化了。所以我相信,在一个真正去中心化的网络中,每个人都应该实现自己独特的网络堆栈并使用它来访问互联网。这样,即使一个实现存在错误或漏洞,也不会导致整个网络瘫痪。好吧,我不能再板着脸了。事实上,当我在南京大学学习计算机网络时,我突然有一种想要编写自己的网络堆栈来娱乐的冲动。由于在 DN42 中没有发现足够的混乱,我决定更进一步,将我的自定义堆栈部署到 DN42 上,甚至有一天甚至部署到 IANA 上,提供实际的服务。 DNet 我当时确实写过一些关于这个项目(DNet)的博客文章,虽然我没有坚持很长时间:https://github.com/lyc8503/DNet-core 当时,它或多或少实现了以下目标: 在 Linux 上创建 TAP 设备并发送/接收以太网帧 解析以太网帧并处理 ARP 查找和响应 解析 IPv4 数据包并响应 ICMP 回显请求 发送和接收 UDP 数据包 最近,在废弃了四年之后,我再次拿起这个项目,修补了一些错误,并拼凑了一个几乎无法运行的 DNS 服务器,作为我的 DN42 域 42420167.xyz 的权威 DNS。现在,如果您从任何连接互联网的计算机运行 dig TXT sgp1.dn42.42420167.xyz,您将获得由我手工制作的网络堆栈直接提供的 DNS 响应: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #挖掘 TXT sgp1.dn42.42420167.xyz ; <<>> DiG 9.18.39-0ubuntu0.24.04.5-Ubuntu <<>> TXT sgp1.dn42.42420167.xyz ;;全局选项:+cmd ;;得到答案:;; ->>HEADER<<- 操作码:QUERY,状态:NOERROR,id:21546 ;;标志:qr rd ra;查询:1,答案:7,权限:0,附加:1 ;;选择伪节:; EDNS:版本:0,标志:; UDP:1232;;问题部分:;sgp1.dn42.42420167.xyz。在 TXT 中;;答案部分:sgp1.dn42.42420167.xyz。 20 IN TXT“IPv6 LLA:fe80 :: 167”sgp1.dn42.42420167.xyz。 20 TXT“公钥:8BKrEUrqba9mCzYHqWD2uTNtvrcYcKAls3vBQrY6dxE =”sgp1.dn42.42420167.xyz。 20 IN TXT“MP-BGP:已启用”sgp1.dn42.42420167.xyz。 20 IN TXT“扩展下一跳:已启用”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 "端点:sgp1.dn42.42420167.xyz:2xxxx(xxxx 是您的 ASN 的最后 4 位数字)" ;;查询时间:11 毫秒;;服务器:223.5.5.5#53(223.5.5.5) (UDP) ;;时间:2026 年 6 月 13 日星期六 22:22:39 CST ;; MSG SIZE rcvd: 397 如果您在 DN42 内,则可以通过 IP 172.20.42.224 直接向此堆栈发送任何内容,例如: ping 172.20.42.224 在我的上一篇博客文章中,我将所有 VPS 实例迁移到 NixOS,该实例使用纯 vivi 编码构建。但由于我实际上并不了解 Nix,它很快就变成了难以维护的混乱,在部署过程中随机崩溃。经过短暂的犹豫,我决定清除所有内容并返回 Debian。这次,我使用 pyinfra(基于 Python 的基础设施工具):lyc8503/infra 。在 Debian 上,我使用 Docker Compose 管理所有 DN42 服务(请参阅此处)。这使我能够使用 Docker 的网络命名空间隔离服务——每个容器都在“干净”的环境中启动,避免了重复部署造成的配置漂移的常见混乱。后记 好吧,就这样了——这篇文章的结束就像它开始时一样突然。只是快速展示我最新的巨魔项目,这次没有深入研究代码。最近,我感觉DN42的参与者太少了。网络流量大多只是 ICMP 和 BGP,没有运行真正的应用程序,没有太多空间进行新的恶作剧。除非后面有新的灵感,否则DN42系列大概就到此为止了~
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱