本文介绍如何借助 DDNS-Go 将动态 IPv6 家宽地址解析到域名, 再配合 CDN 或 Nginx 实现去端口访问, 让 IPv4 用户也能访问部署在家宽环境中的站点. (AI摘要总结)
在本地有 IPv6 公网且防火墙关闭的情况下, 家宽一般仍会封禁 80 和 443 等特殊端口.
这种情况下就无法直接使用 80 和 443 端口建站了, 往往只有你自己可以访问.
如果既不想显式使用端口, 又想让单栈 IPv4 用户访问, 有没有解决办法呢?
借助支持 IPv6 自定义端口回源的 CDN 或代理即可.
你可以使用任意 CDN, 甚至也可以理解成与 Nginx 或内网穿透类似的转发方案. 你需要一个转发服务, 而这个转发服务也可以是 CDN.
教程
在本地创建一个 Web 服务, 任意类型都行. 我这里以静态网页为例, 使用 1Panel 的 OpenResty.
以 81 端口为例(只要不是被封禁的端口都行).
编辑配置文件, 监听 IPv6 的 81 端口.
1 | listen 81 ; |

配置好本地的 Web 服务后, 我们需要考虑 CDN 的回源地址如何更新. 家宽 IPv6 地址通常是有有效期的, 每隔一段时间就会发生变更.
这里使用 DDNS-Go 将最新的 IPv6 地址解析到一个指定的域名.
项目地址: jeessy2/ddns-go
可以直接在 1Panel 应用商店中安装, 其他安装方式可以参考 Github.
在浏览器访问 IP:9876 对应的服务, 这是 DDNS-Go 的 Web 页面.
配置用户名和密码.

这里以 Cloudflare 为例, 从 Cloudflare 控制面板获取 Token.
(其他 DNS 服务商也可以在控制面板的 API 密钥或授权选项下找到相关提示.)

选择 编辑区域 DNS.

选择 所有区域, 或选择一个域名.


复制 Token.

粘贴到 DDNS-Go 中.

如果你没有公网 IPv4, 就将这个选项关闭.

开启 IPv6, 选择一个有公网 IPv6 的网卡.

输入一个域名, 程序会自动将 IPv6 地址解析到这个域名.

最后, 点击 保存.

点击 日志, 查看是否解析成功.

完成后, 接下来就可以进行最后一步了: 使用 CDN 或 Nginx 对外提供服务.
Nginx 和其他 CDN 的配置都很简单, 一般都支持自定义回源端口, 直接使用域名加 81 端口即可.
Cloudflare 需要手动开启小黄云, 然后点击 保存.

这样配置后, 你会发现依旧无法访问. 因为 Cloudflare 会根据 SSL 状态回源到 80 和 443 端口, 而不会回源到我们设置的 81 端口. 这时就需要额外配置规则来实现.
在侧边栏选择 规则, 然后在 Origin Rules 处点击 创建规则.

字段选择 主机名, 运算符选择 等于, 然后在右侧填入域名. 这里需要和 Web 服务监听的域名保持一致.
下滑后选择 重写到, 值填入 81(替换为你实际使用的端口), 然后点击 部署.

配置完成后, 尝试访问域名(如果访问不了, 可能是 DNS 还没有及时刷新).
至此, 就完成了借助 DDNS-Go 使用家宽 IPv6 套 CDN 建站.
需要注意, 如果你使用的不是 Cloudflare, 而是其他 CDN, 那就需要考虑 DNS 缓存的问题. 可能在 IPv6 变更后, CDN 解析回源域名得到的 IP 仍然是旧值, 从而导致回源失败.
但如果使用 Cloudflare, 通常就不需要额外考虑这个问题.