条目的信息字段没有设计太多,只记录一些关键数据。网页样式上延续了本站的风格没有风格,同样没有使用任何 JavaScript 代码和 Cookie,因此部分功能实现上比较受限。用户登录和多用户功能一开始设计时就决定不做,预期是一个运行在树莓派、NAS 等设备上的局域网应用,如需放到公网使用请使用加密 tunnel 连接,或在 web server 上做好鉴权和 IP 限制。
完成初稿。写的时机和时间很重要,多半是在晚上,打开 Typora 和 Apple Music,能写多少取决于状态好坏,写到困了或者厌烦为止,为此有不少文章是写了一半时直接删掉,终不见天日。技术文章自然简单,一板一眼平铺直叙即可,但耗费精力;其他文章则坚持人生苦短、多用短句的原则,谨言慎行随心所欲的写,出于对以前中学的时候语文科目上被迫做的无数的阅读理解的语句赏析题的无声反抗。
我平时在备份或者同步服务器文件时一般会用到 rsync 工具,rsync 本身使用起来很方便,也比较可靠,但备份任务主要是通过密钥文件进行连接,不管是从 A 同步到 B 还是将 B 拉取 A,如果任一个服务器出现漏洞导致密钥泄漏,可能会导致另一个服务器买一送一。虽然一般会限制同步用户的权限,不一定会造成严重后果,但还是应该尽可能将 rsync 任务限制在更安全的环境下执行。
但也不是完全离不开,用可以但没必要来形容更合适。Github 在一篇博客文章 How we think about browsers 中提到,即使关闭了 JS,你仍然可以正常登录 Github,使用评论、搜索等功能:
With JavaScript disabled, you’re still able to log in, comment on issues and pull requests (although our rich markdown toolbar won’t work), browse source code (with syntax highlighting), search for repositories, and even star, watch, or fork them.
接下来的几十分钟里我们谈笑风生,具体谈了什么不记得,只记得那时很喜欢在配置单上纸上谈兵的感觉,听他们讲各种「完爆」的故事。虽然那时的我已经是显卡吧十一级「大神」,哪里有坑基本都知道,他们觉得我是小傻子,我觉得他们是大傻子。直到心满意足后,才留下一句「我回去问问我妈再说」,直奔隔壁黑网吧打开心爱的穿越火线,fire in the hole!
然而快乐总是短暂,关键时刻耳机里总会传来叮的一声,「您的余额已用完,请及时充值!」自然,对这个穷小孩来说兜里已经没有子弹可以让他坚守战场,即使作为己方大腿,战绩豪华,但果断 Alt + F4!光速打开 IE 浏览器,输入 hao123.com,游戏分栏里找到死神VS火影,一阵乱敲后赶紧跑回家吃晚饭,不然屁股要遭遇。
我很高兴自己去折腾了。博客从 WordPress 到 Typecho 再到 hugo 平台换了一圈,每次都乐此不疲花上几个通宵重新写一遍主题;关于域名和服务器运维,该会的不该会的都会一点,网盘、图床等各种自建服务玩了一圈,还写了一堆没用的脚本和网页工具。要是把这些时间用在搬砖上,我是不是已经 KFC 自由了呢?不过其实很高兴学到了很多东西,让自己离计算机和互联网的世界更近了一点。
更高兴现在自己不再折腾了。玩博客时总有种快感,就像有博友将博客比喻为新型电子游戏一样,十分贴切。游戏有好有坏,对于管不住自己的人来说,自然弊大于利,好在再喜欢游戏人的也会有「电子阳痿」的那天,去年开始我终于不再沉迷这个游戏。即使现在的 Hugo 用得并不十分舒坦,但也不想再换博客平台,也不想再大刀阔斧的修改主题样式。生活不就是到处凑合嘛,乔布斯所追求的科技与人文的结合,在我这里科技似乎有一点,人文还差得很远。
RSS 聚合和博客聚合也有其它问题。RSS 是主动订阅,需要解决先有鸡还是先有蛋的问题,你不先发现感兴趣的博客自然无法订阅;而博客聚合大都靠平台管理者筛选,博客类型和质量取决于管理者的口味,其中有不少是单链接式的博客聚合平台,只有一个博客名和地址,有人能在成百上千的博客中点到你的网站还是需要很大的缘分。这点上目前发现积薪做得不错,收录文章列表除了标题外,还有 AI 生产的总结和自动分类,点击文章直接跳转源站,博主的网站也能得到展示。
前段时间看完美剧《硅谷》后我一直在思考,到底什么样的互联网才是 The Internet We Deserve ?
Silicon Valley (TV series).
这里需要简单聊聊去中心化。World Wide Web 的创建者伯纳斯·李(Tim Berners-Lee)在 1989 年写下「信息管理建议书」时就概述了对 Web 的愿景,能以去中心化方式访问网络,并允许系统在不需要任何中央控制或协调的情况下连接在一起。显然 Web 2.0 的中心化与他最初的想法背道而驰。2016 年,他首次提到了关于 Web 3.0 的想法:
“People keep asking what Web 3.0 is,” Berners-Lee said. “I think maybe when you’ve got an overlay of scalable vector graphics - everything rippling and folding and looking misty - and access to a semantic Web integrated across a huge space of data, you’ll have access to an unbelievable data resource.”
###
人们不停地询问 Web 3.0 是什么。我认为当 SVG 在 Web 2.0 的基础上大面积使用——所有东西都起波纹、被折叠并且看起来没有棱角——以及一整张语义网涵盖著大量的资料,你就可以存取这难以置信的资料资源。
一年后,他在麻省理工学院启动了一个名为 Solid 的去中心化项目 ,旨在从根本上改变 Web 应用程序的中心化趋势,将用户的个人数据从大型科技公司的控制中脱离出来。只是直到今天,发展得仍不理想。
众所周知,AdGuard Home 是一款很不错的自建 DNS 服务器软件,除了广告拦截之外的功能都挺好用。自己搭建也很简单,参照官方文档几行命令就能搞定。这几年我也一直在使用家里树莓派上搭建的 AdGuard Home 作为局域网 DNS 服务器,体验很不错。这里要分享的是如何通过 Docker Compose 部署 AdGuard Home 并搭建一个私有自用的 DoH 服务,以及如何使用 AdGuard Home 实现 DNS 分流解析。
搭建 AdGuard Home
国内搭建公共 DNS 服务需要申请无法申请的牌照,用国外服务器搭建也会被抢答或者阻断,53(UDP)和 853(DoT)都是重点关注对象,所以目前只推荐使用 443(DoH 或 DoQ)的方式连接。
同时,当你全部配置好正常运行后会发现控制面板首页的统计数据中来源 IP 全是 Docker 的 172 内网 IP 段,这里需要在配置文件中设置 trusted_proxies 参数,指定受信任的来源 IP 地址列表,AdGuard Home 才会获取代理标头(如 X-Real-IP,X-Forwarded-For 等)中的客户端真实 IP 地址。这里也可以先设置 Docker 容器的 IP 地址段,方便后面在配置文件中添加。
AdGuard Home 0.105.0 及之后版本支持为部分加密查询方式设置 ClientID,你可以限制白名单内 ClientID 才能进行查询。对于 DoH 查询,只需要在地址最后加上一段字符串即可,这里以随机 UUID(7017d85e-99d3-46df-bcbc-77a0a33c9cee)举例。
为了方便查看日志,你可以先设置一个持久客户端名称,在 设置-客户端 中添加客户端:
在 设置-DNS 设置-访问设置-允许的客户端 中输入该 UUID:
完成以上设置后,你可以尝试通过 https://xxx.example.org/random-string/7017d85e-99d3-46df-bcbc-77a0a33c9cee 链接进行 DNS 查询了,并且基本可以确保只有你自己才能使用。
题外话:自建 DNS 服务器在代理过程中的作用
这里说点题外话,如果你是为了搭建无污染的 DNS 在代理工具中使用,效果可能并不明显。在基于 IP 规则分流的代理过程中,DNS 的作用仅仅是在客户端发起请求的第一步中解析域名获得 IP 地址,然后用该 IP 地址来匹配规则,即使得到的是错误的 IP,只要最终命中代理规则,代理工具依然会将域名发送到远程服务器上再次解析并建立连接,此时与你客户端解析获得的 IP 没有关系,所以不会对访问造成影响。
而且这一作用也被今天主流使用的 fake-ip 所弱化,fake-ip 跳过了上面所述的第一步,命中规则的域名不会在本地进行 DNS 解析,代理工具会直接返回一个内网 IP 地址并建立映射关系,同时在远程服务器上解析并连接后通过该内网 IP 地址进行代理。fake-ip 的优势很明显,加快了响应速度,同时也不会造成 DNS 泄漏。但域名规则是写不完的,总有些规则之外的漏网之鱼(小众域名)需要一个可靠的 DNS 解析兜底。 此外 fake-ip 有一些老生常谈的小问题,我个人是不大喜欢的,仍在使用 redir-host 模式。
由此,自建无污染 DNS 服务器在代理过程中的意义只是为了应对部分特殊情况以及获得更好的隐私性,顺便解决被各种「焦虑化」的 DNS 泄漏问题,对大多数人来说属于可有可无的东西。
设置 DNS 分流解析
AdGuard Home 0.107.3 及之后版本支持为指定域名设置 DNS 上游的,也可以直接使用文件列表。前面提到我还有一台树莓派在局域网内运行 AdGuard Home 服务,这时便解锁了一个新的玩法,树莓派上的 AdGuard Home 设置 DNS 分流解析。
可以实现国内域名通过 AliDNS 或 DNSPod 进行解析,其余域名通过自建的海外 DoH 服务进行解析,配合 AdGuard Home 的乐观缓存,也不会对速度造成多大影响。不过由于国内域名列表肯定是不完整的,不在列表中的域名会通过海外 DoH 解析,得到的 IP 结果是国内的还好,可以直接连接,否则会通过远程服务器连接,此时要是该域名有国内 CDN 节点就绕远了。因此比较依赖规则文件的及时更新和准确性,最后选择了使用 dnsmasq-china-list 项目。
这里写了一个 shell 脚本将 dnsmasq-china-list 发布的文件转换为 AdGuard Home 能识别的格式,如有需要可以参考修改。
#!/bin/bash
# Writen by ATP on Jan 25, 2024# Website: https://atpx.com# AdGuard Home 项目路径AGH_PATH="/home/adguardhome"# 国内 DNS 服务器,多个用空格隔开CN_DNS="https://223.6.6.6/dns-query https://120.53.53.53/dns-query"# 海外 DNS 服务器GLOBAL_DNS="https://xxx.example.org/random-string/7017d85e-99d3-46df-bcbc-77a0a33c9cee"# dnsmasq-china-list 规则文件,无法下载的话可以找 CDN 或自建反代accelerated_domains="https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/accelerated-domains.china.conf"apple_domains="https://raw.githubusercontent.com/felixonmars/dnsmasq-china-list/master/apple.china.conf"# 下载文件并合并wget -O "$AGH_PATH/cn-domains.conf"$accelerated_domainswget -O "$AGH_PATH/cn-apple.conf"$apple_domainscat "$AGH_PATH/cn-apple.conf" >> "$AGH_PATH/cn-domains.conf"# 转换为 AdGuard Home 格式awk -v CN_DNS="$CN_DNS" -F/ '/server=/{print "[/"$2"/]"CN_DNS}'"$AGH_PATH/cn-domains.conf" > "$AGH_PATH/cn-dns.txt"# 添加默认海外 DNSsed -i "1i\\$GLOBAL_DNS""$AGH_PATH/cn-dns.txt"# 移动文件到 AdGuard Home 目录mv "$AGH_PATH/cn-dns.txt""$AGH_PATH/work/data/"# 清理临时文件rm "$AGH_PATH/cn-domains.conf"rm "$AGH_PATH/cn-apple.conf"echo"规则转换完成"# 重启 AdGuard Home# cd $AGH_PATH# docker compose restart
停止 AdGuard Home 后编辑目录下配置文件 conf/AdGuardHome.yaml,找到 upstream_dns_file: "" 参数,修改为:
# Federation# ----------# This identifies your server and cannot be changed safely later# ----------LOCAL_DOMAIN=<你的域名>
# Redis# -----REDIS_HOST=mastodon-redis-1
REDIS_PORT=6379REDIS_URL=redis://@mastodon-redis-1:6379
# PostgreSQL# ----------DB_HOST=mastodon-db-1
DB_USER=postgres
DB_NAME=mastodon_production
DB_PASS=DB_PORT=5432...
配置 Mastodon
运行配置命令:
docker compose run --rm web bundle exec rake mastodon:setup
The directory for temporary files is set based on the use_temp_path parameter (1.7.10). If this parameter is omitted or set to the value on, the directory set by the proxy_temp_path directive for the given location will be used. If the value is set to off, temporary files will be put directly in the cache directory.
媒体评测解禁第一时间看到极客湾发布 A17 Pro 评测视频 时我对这次 Pro 系列挺失望的,峰值功耗拉满、续航倒退、发热严重。之后又看了几个国外博主的测试,高负载发热确实是有问题,但续航似乎各家评测差距较大,由此我对 3nm 工艺的提升究竟如何产生了兴趣,搜索学习了下相关的资料,想知道 3nm 的 A17 Pro 到底翻车没有?
App Store 上架要求备案不是什么大事,对绝大多数只用国内软件的用户不会有影响,“无非就是大量独立开发者失业”,有其它需求的用户自然会有一个外区 Apple ID。怕的是这个加速停不下来(目前是这个趋势),如果未来采取硬件限制,国行版本不允许登录其他区的 Apple ID 并且采用 Apple News 一样多因素判断限制,可能就锁死了。再加上现在美版 iPhone 取消 SIM 卡槽,全面 eSIM 化,要是未来其他海外版本也跟进就更没辙了。此外,国外很多公司和开发者不可能专门花精力为中国用户备案上架,必然会造成很多优秀的 App 无法使用,比如 GoodNotes、Notion 等,除非支持欧盟尽快要求苹果开放侧载或者回到越狱的时代,但国内大厂们自家的招牌 App 肯定也会搞出商店阉割,要求去自己应用商店下载「完整版」的操作,用户始终是被拿捏的。