Wink Pings

本地 200,隧道访问却报 Hostname 不匹配:Duplicati 卡在 Host 头

用 cftunnel 把 Duplicati 的 8200 端口映射出去后,浏览器提示 Hostname does not match。端口是通的,卡住的是 Host 头校验。Jay 的推文给了一个直接解法,也留下一个安全提醒。

Duplicati 的 Web UI 通过隧道访问时提示 Hostname does not match,Jay 的推文里有一张终端截图把链路拆得很清楚。本机 curl -I 127.0.0.1:8200 返回 HTTP/1.1 200 OK,说明 8200 上的服务活着。浏览器走隧道后却报错。

终端截图:本地 curl 返回 200,浏览器经隧道访问提示 Hostname does not match

Duplicati 是备份工具,Web UI 默认常跑在 8200。它会对请求里的 Host 做校验。本机用 127.0.0.1 访问,Host 是 127.0.0.1:8200。经 cftunnel 的免费 HTTPS 域名访问,Host 换成了隧道域名。Duplicati 的允许列表里没有这个新 Host,于是拒绝。端口没开这个方向可以先排掉,本机 200 已经说明问题不在监听。

推文里的处理很直接:Web server → Allowed hostnames → *。这等于放行任意 Host。能快速排障,但公网暴露时别长期图省事。如果只用一个固定隧道域名,填那个域名比 * 更收敛。

cftunnel 是 MIT 协议的内网隧道和反向代理,推文里的启动命令是:

cftunnel quick 8200
# Tunnel ready · free https hostname

它会给出免费 HTTPS 域名。项目在 qingchencloud/cftunnel,站点是 cftunnel.qt.cool。这类工具把内网服务搬到公网很快,快到最后容易忘记 Host 校验和访问控制。Duplicati 的 Allowed hostnames 就是第一道门。先让请求进来,再决定门开多大。

本地 200 只证明服务活着。隧道访问报 Hostname 不匹配,先看反向代理传过来的 Host,再看 Duplicati 的允许列表。Jay 的截图里,这两步已经摆在一起了。

发布时间: 2026-11-01 19:26