前言 差不多四年半前, 我把博客系统从 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 与 Nix Flakes 新手入门 ,作者 Ryan Yin 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 两份文件。...
NixOS 系列(一):我为什么心动了
NixOS 系列文章目录: NixOS 系列(一):我为什么心动了 NixOS 系列(二):基础配置,Nix Flake,和批量部署 推荐阅读: NixOS 与 Nix Flakes 新手入门 ,作者 Ryan Yin 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 一模一样,一问一答的协议。...
用 nginx 建立 Gopher 网站
更新日志 2021-03-24:改进文章处理逻辑,增加识别链接和图片的代码。 2021-03-21:最初版本。 什么是 Gopher Gopher 是互联网发展早期的一种网络协议,由美国明尼苏达大学于 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。...