Lan Tian @ Blog

在 DN42 中使用 Docker 建立 Anycast DNS 服务

什么是 Anycast? 互联网上常用的路由协议 BGP 是这样工作的:我在 DN42 拥有 IP 段 172.22.76.104/29,我通过 BIRD 等 BGP 软件,“宣告”这台服务器上可以访问到 172.22.76.104/29 这个 IP 段。与我有 Peering 的其它服务器记录下这一条消息:“通过某条路径,走 1 格可以访问到 172.22.76.104/29”,并且向与它们有 Peering 的服务器继续宣告:“这台服务器距离 172.22.76.104/29 只有 1 格距离”。以此类推,其余服务器也通过类似的流程,宣布自己与 172.22.76.104/29 有 2 格,3 格,4 格距离……所有服务器也都通过距离最短的路径,将数据发送到我的服务器...

Typecho 主题性能优化和缓存

为了实现 Lightbox、代码高亮等功能,我在我的博客主题中写了一些后处理代码,对 Typecho Markdown 输出后的 HTML 代码再进行一层处理。但是因为我的博客历史文章较多,我在不同时期也用了不同的编辑器(WordPress 编辑器,百度 UEditor 等等),为了尽可能保证历史文章也能正常显示,我的处理逻辑比较复杂。再加上我用的廉价 VPS 性能本就不怎么样,相应的网页加载时间也较长。 我在 nginx 配置中添加了这样一行,以在 HTTP 头中输出网页在服务器端处理的用时: add_header LT-Latency $request_time; 最初,这个值是 0.25 左右,代表着每个网页需要在服务器端处理 250ms 之久...

Go 语言实现的 Bird-lg(Bird Looking Glass)

什么是 BIRD?什么是 Bird-lg? BIRD 是 Linux 上常用的一款 BGP 路由软件。我主要在 DN42 网络内使用 Bird,与其它用户建立连接。 Bird-lg 是 GitHub 用户 sileht 开发的一款基于 Python 2 的程序。它提供了一个网页面板,可以显示各个服务器上的 BIRD 路由软件的状态,以及查询到指定 IP 的路由。 为什么我要用 Go 语言重写? Bird-lg 基于 Python 2 以及 Flask,因此占用内存较大(20-30 MB)。 Bird-lgproxy 内存占用量也差不多 20 MB,并且每台服务器上都要运行一个。本站所在的 512 MB 内存的 VPS 已经出现过多次由于内存耗尽外加 SWAP 所在硬盘读写缓慢...

BuyPass GO SSL 证书试用

BuyPass 是挪威的一家 CA,提供数字证书、安全认证产品等多种服务。最近 BuyPass 上线了基于 ACME 的自动签发证书服务,类似于 Let's Encrypt,这项服务称为 BuyPass GO。与 Let's Encrypt 主要的不同点在于他们的证书每次签发有效期是 180 天,比 Let's Encrypt 的长一倍。所以如果你需要给你的服务手动换证书,BuyPass 的证书会好一些。另外 BuyPass 暂不支持签发泛域名证书(俗称野卡?),只能将需要的域名一个个列出来。 (不过我觉得如果需要手动换证书,还是申请 TrustAsia 之类的一年有效期的好一点) 申请证书 我使用 acme.sh 这个工具来申请证书...

使用 Docker 构建参数,多架构共享一份 Dockerfile

由于我有多种架构的设备运行 Docker(包括 x86 服务器,树莓派,Tinker Board),对于每个常用的软件,我需要为每种不同架构都构建一份镜像。之前,我采用的方式是每个架构都有一个独立的 Dockerfile,类似于这样: 可以看到每份 Dockerfile 除了 FROM 调用的镜像不一样,其它几乎完全相同。用这种方式管理,好处是写构建脚本(travis.yml)的时候简单,直接一个个 docker build 过去即可,但是坏处也很明显,每次软件有版本更新,或者我决定添加或删除一个功能,我都要改好几份 Dockerfile。 前两天我查资料时,发现了 Docker 的一个功能:构建参数(Build args),就是可以填入一些参数供构建过程使用...

pfSense 配置 IPv6 多 WAN 自动切换

就在几天前,HE.NET Tunnelbroker 的法国服务器出了一次故障。因为我在配置 Kimsufi 服务器时,将 Kimsufi 原生的 IPv6 分给了 ESXi 单独使用(见这篇文章),pfSense 只具有原生 IPv4 并通过 Tunnelbroker 获取 IPv6 地址,所以这次服务器上的所有虚拟机都失去了 IPv6 连接。更严重的是,由于我在服务器上也参照这篇文章搭了个 NAT64 服务,为了优先使用 IPv6,我设置了 pfSense 的 DNS 解析优先使用 Google DNS 的 NAT64 解析服务器,就是 2001:4860:4860::64 和 2001:4860:4860::6464 这两个,只在这两个 DNS 全部失效后才去使用 IPv4 解析...

nginx 配置 LDAP 认证

我的各台服务器上安装了各种不同的服务,都有各自的用户名密码体系,难以统一管理。假设未来某天我的密码泄露了,一个个修改就会非常累人。因此,我希望用一个服务来专门管理用户名密码,其它服务都从它上面获取认证信息。 LDAP 是常用的认证协议之一,不仅有许多软件原生支持它的认证(包括 Jenkins,pfSense 等),而且通过插件可以使得 nginx 支持它,为任何基于网页的服务加上统一管理的认证。 添加插件 如果你的 nginx 已经是源代码编译的,添加 nginx 的 LDAP 插件只需要三步: apk add openldap-dev git clone https://github.com/kvspb/nginx-auth-ldap...

nginx:TLS 1.3 多版本草案和 HPACK

距离我之前给 nginx 启用 TLS 1.3 已经过了 11 个月了。快一年过后,许多与 nginx 相关的程序、补丁都有了很大的变化: OpenSSL 已经在发布 1.1.1 的测试版,写本文时最新版本是 1.1.1-pre8(也就是 Beta 6)。 nginx 已经更新到 1.15.1。 nginx 的 HPACK 补丁(HTTP 头压缩补丁)的 bug 已经有另外的补丁的补丁修复,使用原先的 HPACK 补丁会导致网站访问不正常,体现为每个网站只能打开一个页面,第二个页面开始就出现协议错误。 有大佬发布了 OpenSSL 的补丁,可以让最新版 OpenSSL 同时支持 TLS 1.3 的 draft 23,26,28 三个版本...

Kimsufi 独服安装升级 ESXi 并设置软路由

Kimsufi 是法国 OVH 公司的一个廉价品牌,专门出租性价比极高的服务器。我自己租的是 KS-4C 型号,i5-2400 处理器,16GB 内存,2TB 硬盘,百兆带宽无限流量,只需要 13欧元/月,性价比极高,非常适合开虚拟机做实验。 VMware ESXi(现在也叫 vSphere Hypervisor)和 Proxmox VE 是两个非常流行的专门用来开虚拟机的操作系统,且两者都是免费的。最重要的是,Kimsufi 的控制面板中都有两款系统的一键安装。但我在使用过程中发现 Proxmox VE 在网络条件不佳的情况下远程控制虚拟机经常连接不上(VNC 黑屏)或者丢键(输密码时尤其要命),因此还是换装了 ESXi...

编写配置文件,让 Thunderbird 自动配置域名邮箱

许多人在自己的网站域名上设置了邮箱系统,我也在主站 lantian.pub 的域名上使用了 Zoho 的域名邮箱。不过使用域名邮箱的一大缺点是,你很难记住邮件系统的 POP3、IMAP、SMTP 等服务器地址,一旦出现重装系统、重装邮件客户端等情况,需要重新配置时,就不得不再登上邮件系统去查看服务器地址,非常麻烦。 不过,如果你用的是 Thunderbird 邮件客户端,在设置账户时,你可能注意到,Thunderbird 在添加账户时,会有一个“从邮件服务商获取设置”的过程。这个过程实质上就是从这个域名的网站服务器上请求一份 XML 文档,其中记录了邮件服务器的设置。因此,只要手动编写这份配置文件,并将它放在网站服务器上,就可以实现 Thunderbird 下的自动配置了...