问题

通过 resolvectl 查 raw.githubusercontent.com,发现被解析到 0.0.0.0

$ resolvectl query raw.githubusercontent.com

raw.githubusercontent.com: ::                  -- link: wlp2s0
                           0.0.0.0             -- link: wlp2s0

-- Information acquired via protocol DNS in 35.7ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: network

解释

这是 DNS 被污染导致的,这种情况不能简单地通过切换到其他的DNS服务(如223.5.5.5)解决,因为DNS查询时流量没有加密。中间商(如ISP)很容易探听到你正在查询的域名,如果域名在他们的黑名单里面,就直接劫持掉请求、返回给你个 0.0.0.0 。

解决方式

请启用 DNS over TLS 来避免上述情况。

在使用 systemd-resolved 的 Linux 上,启用方式:Arch Wiki / Systemd-resolved#DNS_over_TLS

照着上面的教程改完文件后重启 systemd-resolved 即可生效:systemctl restart systemd-resolved

2024.6 update
[TODO] 有的校园网封锁DOT流量
-- 换了个 9.9.9.9 之外的IP(例如149.112.112.112、9.9.9.11)就好了,原因不明