DN42 全称 Decentralized Network 42(42 号去中心网络),是一个大型的 VPN 网络。但是与其它传统 VPN 不同的是,DN42 使用了大量在互联网骨干上应用的技术(例如 BGP),可以很好的模拟一个真实的网络环境。 在真实的互联网中,各个运营商会使用不同厂商的硬件路由器互相交换路由信息,例如思科(Cisco)、瞻博(Juniper)、诺基亚(Nokia)、Arista、华为等。类似的,在 DN42 中,不同参与者也会选择不同的 BGP 软硬件,最常用的是 Bird 和 FRRouting ,但也有使用 Mikrotik、Ubiquiti EdgeRouter 甚至真正的商用路由硬件。 由于大家选择的 BGP 软硬件不同,并且即使使用同一款软件也会用不同的方式配置内网,所以当大家的网络连接在一起,有时候就会出一些奇怪的问题,例如 BGP Flapping。 真实互联网和 DN42 中的 BGP Flapping BGP Flapping 指的是同一条路由的路径在短时间内发生大量变化,一般源于一个网络反复广播、撤销广播这一条路由。...
使用 Astro.js 重构我的博客
前言 差不多四年半前, 我把博客系统从 Typecho 迁移到了 Hexo 。Hexo 是一款静态网页生成器(Static Site Generator),本身无需连接 MySQL、PostgreSQL 等数据库动态生成网页,而是根据给定的 Markdown 文章文件一次性生成所有的 HTML 网页。相比于 WordPress、Typecho 等动态方案,预先生成静态网页不需要服务器支持 PHP 等动态语言,对服务器的性能压力更低。 但是 Hexo 本身并不新, 它的第一个版本发布于 2013 年 7 月 。当时以 React 为首的单页应用框架刚刚发布(React:2013 年 5 月),Webpack 等现代前端流程必须的框架也还不存在(Webpack:2014 年 2 月),因此 Hexo 理所当然的没有用上这些工具,而是停留在拼接 HTML 字符串的时代。Hexo 常用的几个主题模板系统 EJS,Pug 等都是基于字符串拼接的模板系统。 没有了现代前端流程,就意味着: 我需要手动处理拼接 HTML 的所有细节。每次修改模板都让我想起写 PHP 的美好时光。...

如何引爆 DN42 网络(2023-05-12 更新)
DN42 全称 Decentralized Network 42(42 号去中心网络),是一个大型、去中心化的 VPN 网络。详细的介绍可以在 DN42 实验网络介绍及注册教程 这篇文章看到。 DN42 是一个 测试网络 ,所有人都在帮助所有人。即使你不小心搞砸了,也没有人会指责你。你可以在 DN42 的 IRC 频道 , 邮件列表 或者 非官方 Telegram 群组 寻求帮助。 由于 DN42 是一个实验用网络,其中也有很多新手、小白参与,因此时不时会有新手配置出现错误,而对整个 DN42 网络造成影响,甚至炸掉整个网络。 现在,作为一名长者(x),我将教各位小白如何操作才能炸掉 DN42,以及如果你作为小白的邻居(指 Peer 关系),应该如何防止他炸到你。 注意:你不应该在 DN42 网络中实际执行这些操作,你应该更加注重对破坏的防御。 恶意破坏会导致你被踢出 DN42 网络。 本文信息根据 Telegram 群及 IRC 中的 真实惨案 改编。 更新记录 2023-05-12:增加修改 BGP Localpref 导致环路的内容。...
用 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 系列(三):软件打包,从入门到放弃 NixOS 系列(四):“无状态”操作系统 NixOS 系列(五):制作小内存 VPS 的 DD 磁盘镜像 这是我的 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 系列(三):软件打包,从入门到放弃 NixOS 系列(四):“无状态”操作系统 NixOS 系列(五):制作小内存 VPS 的 DD 磁盘镜像 我正在将我的各个服务器逐步从 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.pub Registry Domain ID: c69e5ccf9d834900be26f88fddc5c9e4-DONUTS Registrar WHOIS Server: whois.dnspod.cn Registrar URL: https://www.dnspod.cn Updated Date: 2021-01-07T14:09:11Z Creation Date: 2016-10-23T08:36:41Z Registry Expiry Date: 2029-10-23T08:36:41Z Registrar: DNSPod, Inc. # 略过部分内容 # 随后 WHOIS 服务器关闭连接 和 Gopher 一模一样,一问一答的协议。...
