
如何引爆 DN42 网络(2023-05-12 更新)
DN42 是一个测试网络,所有人都在帮助所有人。即使你不小心搞砸了,也没有人会指责你。你可以在 DN42 的 IRC 频道,邮件列表或者非官方 Telegram 群组寻求帮助。由于 DN42 是一个实验用网络,其中也有很多新手、小白参与,因此时不时会有新手配置出现错误,而对整个 DN42 网络造成影响,甚至炸掉整个网络。现在,作为一名长者(x),我将教各位小白如何操作才能炸掉 DN42,以及如果你作为小白的邻居(指 Peer 关系),应该如何防止他炸到你。注意:你不应该在 DN42 网络中实际执行这些操作,你应该更加注重对破坏的防御。恶意破坏会导致你被踢出 DN42 网络。本文信息根据 Telegram 群及 IRC 中的真实惨案改编。更新记录2023-05-12:增加修改 BGP Localpref 导致环路的内容。2020-08-27:格式修改,添加完整 IRC 日志,部分内容的中文翻译,添加另一段地址掩码填错的内容,以及 ASN 少了一位的内容。2020-07-13:添加 Registry IPv6 地址段掩码填错的内容,...
用 NS1 和 UptimeRobot/Freshping 组建超低价 GeoDNS
本文部分内容参考自 https://hostedtalk.net/t/connecting-uptime-robot-with-ns1-dns-api/3883。目标我的 VPS 多且遍布世界各地,但一直以来,我的网站都只用了美国洛杉矶的一台 VPS 提供服务。因为我为了特殊线路、低价等原因购买的都是小服务商的 VPS,而非 DigitalOcean、Vultr 甚至 AWS、Azure 等大厂,这台美国洛杉矶的 VPS 网络有时会不稳定,虽然次数很少,但每次我都得手动临时切换 DNS 到其它 VPS 上,等网络恢复后再切换回来。因此,我希望可以把手头所有的 VPS 都用来提供网站服务,在某台 VPS 宕机时,用 DNS 将流量自动切到其它 VPS 上。由于我的网站使用 Hexo 静态网页生成系统,同步网站数据并无难度:只需要在一台 VPS 上生成文件,再用 Ansible 批量同步到所有 VPS 上即可。但更大的问题是 DNS 的配置。我希望用 GeoDNS 把用户导流到最近的 VPS 上,例如亚洲用户可以访问我的中国香港节点,美国用户可以访问我的美国洛杉矶节点,等等。...

NixOS 系列(二):基础配置,Nix Flake,和批量部署
NixOS 系列文章目录:NixOS 系列(一):我为什么心动了NixOS 系列(二):基础配置,Nix Flake,和批量部署推荐阅读:NixOS 与 Nix Flakes 新手入门,作者 Ryan YinNixOS 系列(三):软件打包,从入门到放弃NixOS 系列(四):「无状态」操作系统这是我的 NixOS 系列文章的第二篇,主要介绍以下内容:NixOS 配置文件的基本格式和修改配置的方法 Nix 包管理器的 Flake 功能 Deploy-RS 部署工具本文假设你已经按照 NixOS 官方安装教程装好了一个系统。更新日志2023-05-10:增加推荐阅读:NixOS 与 Nix Flakes 新手入门,作者 Ryan Yin。2021-12-18:NixOS 21.11 仍没有默认启用 Flake 功能,更新文章中相关说明。基础配置在 NixOS 的安装过程中,nixos-generate-config 工具在 /etc/nixos 目录下生成了一份初始配置文件,configuration.nix 和 hardware-configuration.nix 两份文件。我们先不管 hardware-configuration.nix 这份文件,...

NixOS 系列(一):我为什么心动了
NixOS 系列文章目录:NixOS 系列(一):我为什么心动了NixOS 系列(二):基础配置,Nix Flake,和批量部署推荐阅读:NixOS 与 Nix Flakes 新手入门,作者 Ryan YinNixOS 系列(三):软件打包,从入门到放弃NixOS 系列(四):「无状态」操作系统我正在将我的各个服务器逐步从 Devuan Linux 迁移到 NixOS。NixOS 是一个以 Nix 配置文件为中心的 Linux 发行版,通过 /etc/nixos 的一份配置文件安装配置整个系统。这份配置文件指定了系统上的所有配置文件和软件包配置,因此你用同一份配置文件装出来的一定是一模一样的操作系统。Nix 语言是图灵完备的,所以理论上无论你用的软件配置多复杂,你都能用 Nix 生成对应的配置文件。Nix 包管理器的另一大特性是 Reproducible Build(可重复构建)。NixOS 的软件包也是用 Nix 配置文件指定的,而 Nix 包管理器可以保证,(在软件本身不故意对抗的情况下),用同一份配置文件(包括源码版本,编译命令等)...
用 Drone CI 替换掉 Jenkins
Jenkins 是一款免费开源的 CI/CD(持续集成、部署)软件,被广泛应用在各种场景中。Jenkins 的主要优势在于其包罗万象的插件,可以完成各种任务,例如自动执行 SCP、Ansible 等部署,Cppcheck 等代码分析,Telegram、钉钉等状态通知。我之前也将 Jenkins 用于大量任务的自动化执行,例如我的 Dockerfile 镜像的自动更新,你正在浏览的 Hexo 博客的部署,甚至还有原神自动签到。但是 Jenkins 是一款拥有悠久历史的 CI,其前身 Hudson 早在 2005 年就发布了。因此,Jenkins 执行任务时依然是传统的直接执行命令,而非使用 Docker 容器等现代化的方式。这意味着 CI 执行的成功与否很大程度上依赖 Worker 主机的系统环境。例如,前段时间我租了一台配置更高的服务器,由于重新搭建了环境,导致 CI 执行过程中出现一堆莫名其妙的问题,花了一个星期才全部发现解决。此外,Jenkins 用 Java 写成,因此它的内存占用相当恐怖,...
用 nginx 搭建能查询任意公网 WHOIS 的服务器
在魔改 nginx,建立一个 DN42 的 WHOIS 服务器之后,我把我的 DN42 Looking Glass 接到了这个 WHOIS 服务器。由于我的 Looking Glass 可以作为一个 Telegram 机器人运行,群友们就用它来查询 IP 和域名的 WHOIS 信息。很快,我们发现了一个问题。有相当一部分群友在接触 DN42 之后,又在公网上申请了自己的 ASN 和 IP 段,并且在各个 IX 进行 Peering。因此,群友们常常会查询一些公网的 IP、ASN 和域名,而群里的机器人都不支持这个。如果有一个 WHOIS 服务器可以把公网的查询代理到对应的注册局,就会极大的方便大家的查询。而代理正是 nginx 擅长的事。只要魔改一下 nginx 让它支持向上游发送「一问一答」的协议,再加上 OpenResty 的 Lua 脚本支持,就可以很快地搭出一个 WHOIS 代理。修改 nginx 代理逻辑nginx 向代理上游发送请求时,会调用 ngx_http_proxy_create_request 函数创建请求头部,也就是 GET /url HTTP/1.1 这部分。这里的逻辑大概是这样的:...
DN42 实验网络介绍及注册教程(2022-12 更新)
DN42 全称 Decentralized Network 42(42 号去中心网络),是一个大型、去中心化的 VPN 网络。但是与其它传统 VPN 不同的是,DN42 本身不提供 VPN 出口服务,即不提供规避网络审查、流媒体解锁等类似服务。相反,DN42 的目的是模拟一个互联网。它使用了大量在目前互联网骨干上应用的技术(例如 BGP 和递归 DNS),可以很好地模拟一个真实的网络环境。简而言之,DN42:不适合单纯想要保护隐私、规避网络审查的用户不适合在网内消耗大量流量,例如用于解锁流媒体服务的用户适合想要研究网络技术,练习服务器、路由器等网络设备配置,甚至后续在真实互联网建立 AS 的用户适合拥有真实 AS,但担心自己配置错误广播出错误路由、干掉半个互联网,希望有个地方测试的用户。正因为此,使用 DN42 的门槛比较高。就像在真实互联网中一样,你要扮演一个 ISP(互联网服务提供商),注册自己的个人信息,ASN 号码,IPv4 和 IPv6 的地址池,...
将 nginx 用作 DN42 WHOIS 服务器
在前一篇文章《用 nginx 建立 Gopher 网站》中我提到,用 nginx 提供 Gopher 服务只是魔改的副产物,我原本的计划是将 nginx 魔改成一个 WHOIS 服务器,用于 DN42。这篇文章将介绍详细过程。WHOIS 协议首先,我们可以找一个 WHOIS 服务器,来观察它都返回了哪些数据。以向 .pub 域名的 WHOIS 服务器查询我的域名信息为例,执行 telnet whois.nic.pub 43:# 输入下面一行并按回车lantian.pub# WHOIS 服务器返回以下信息Domain Name: lantian.pubRegistry Domain ID: c69e5ccf9d834900be26f88fddc5c9e4-DONUTSRegistrar WHOIS Server: whois.dnspod.cnRegistrar URL: https://www.dnspod.cnUpdated Date: 2021-01-07T14:09:11ZCreation Date: 2016-10-23T08:36:41ZRegistry Expiry Date: 2029-10-23T08:36:41ZRegistrar: DNSPod, Inc.# 略过部分内容# 随后 WHOIS 服务器关闭连接和 Gopher 一模一样,一问一答的协议。...

用 nginx 建立 Gopher 网站
更新日志2021-03-24:改进文章处理逻辑,增加识别链接和图片的代码。2021-03-21:最初版本。什么是 GopherGopher 是互联网发展早期的一种网络协议,由美国明尼苏达大学于 1991 年发明,用途类似于现在的 HTTP。它的基础协议非常简单:客户端连接服务端的 TCP 70 端口,并发送一串 URL,用 CRLF 结尾,例如:some_dir/hello.txt服务端把这个文件的内容全部发过来,然后关闭连接。没了。服务端返回的文件可能是一个 TXT、一张图片、一个二进制文件,也可能是一个有着特殊格式的 Gopher 列表文件,称为 Gophermap。这个文件每一行由以下几部分组成:一个字符,代表这一行的类型,是文字(i)、到一个 TXT 的链接(0)、到另一个 Gophermap 的链接(1)、图片(I),还是二进制文件(9)。当然还有一些现在已经不再使用的协议,可以参阅 RFC1436 Section 3.8。一句话,代表这一行显示的信息,例如 Hello World。一个 TAB。这个链接指向的路径,...
制作只有 4KB 大小的永久挂起程序
在我的网络配置中,部分 Docker 容器的服务需要用 Anycast 的方式实现高可用,例如 DNS。在之前的文章中,我的做法是,创建了一个 Busybox 容器运行 tail -f /dev/null 这条命令,永久挂起,不占用 CPU 也永远不会退出,来维持一份网络命名空间给服务程序和 BIRD 共享。用人话说就是:我自己发明了一遍 Kubernetes 的 Pod。我不使用 K8S,因为我的节点都是独立的,不组成集群,因此不使用 K8S 的集群功能,另外它的配置也比较复杂。但是我转念一想,为了网络命名空间建一个 Busybox 容器好像有些大材小用,我还需要手动配置一个 Entrypoint。如果有一个极小的 Docker 镜像,唯一干的事情是等待,那就更好了。方案一:直接用 Musl + 静态编译做一个最容易想到的方法就是写一个死循环的 C 程序,不断的用 sleep 之类命令等待。Linux 系统中,Glibc、Musl 等 C 语言运行库提供了一个 pause 函数,暂停程序运行直到程序收到了外部信号。...