家里宽带有公网 IP,但运营商封了 80 和 443 入站。想不带端口访问内网服务,路子是两条:内网用 Lucky 反向代理,外网真免端口得走 Cloudflare Tunnel。

Lucky 是以 Docker 方式跑在爱快路由器上的。实测它自带的 Cloudflared 模块就能配隧道,不用另起容器。隧道在 Cloudflare 控制台建好,把令牌填进 Lucky 的隧道模块——第一次填错了,填的是隧道 ID 而不是真正的令牌,换对之后就通了,连接器状态正常。随后给 NAS 加了公网路由,一开始报 502,原因是 NAS 的自签证书过不了 Cloudflare 的 TLS 校验,开了 No TLS Verify 就好了,公网实测能打开 NAS 登录页。Lucky 管理后台只监听 HTTP,加路由时服务类型必须选 HTTP,公网侧仍走 HTTPS。

后来两条隧道都删了。起因是 Cloudflare 发来 cloudflared 升级邮件,删了隧道升级事项也就随之关闭。经隧道走的公网路由随之失效,内网访问不受影响。

还有一件没解决的:容器到爱快本机的流量被整段静默丢弃,ping 全丢、TCP 连网关也超时(不是拒绝)。而容器出网、Lucky 反代 NAS 都正常,拦截点在爱快本机 INPUT 侧,管转发的 ACL 大概率管不着。下一步是补测容器内连爱快局域网地址的 TCP 和 ARP 表,再决定要不要在爱快本机加放行规则。教训是:容器访问爱快本机走网关地址,局域网其他设备访问容器服务必须做端口映射。

另外提醒自己一句:Lucky 默认账密挂公网前必须改掉,或者加一层访问验证。