参考文章:
- cloudflare tunnel 使用 saas 回源,实现优选: https://linux.do/t/topic/122087/16
- CF Workers & Pages 设置优选域名: https://www.youtube.com/watch?v=wuanNSAqoHM
准备:
- 需要两个域名, 例如
A.com
,B.free.com
, 这里假设A.com
是想让别人访问的顶级域名,B.free.com
可以是网上随便申请的免费二级域名 - 需要一个域名解析支持分国家地区线路的dns解析商, 例如 腾讯云的dns服务
- 需要开通 Cloudflare SASS 服务, 这里可以绑定国区的paypal, 或者网上搜索的没有钱的虚拟信用卡, 能过验证就行, 不会扣费
前置准备
- 把
A.com
B.free.com
都添加到 cloudflare B.free.com -> ssl/tsl -> 自定义主机名 -> 开通SASS
, 自定义主机名需要开通sass, 绑定paypal或者信用卡, 不会扣费- 添加一个回退源, 例如
falkback.B.free.com
添加 tunnels
- 在
Zero Trust -> 网络 -> Tunnels
创建隧道 - 在需要暴露内网的服务器上安装
cloudflared
- 在该隧道添加公共主机名
falkback.B.free.com
, 服务随便指向服务器上的端口,B.free.com
的 dns 记录会多一条falkback
记录, CNAME 向 cloudflare 分配给我们的免费域名, 并且是开通了小云朵的 - 添加需要暴露的服务, 主机名
www.A.com
, 这时候A.com
的 dns 记录上就多了一条www
记录, CNAME 向 cloudflare 分配给我们的免费域名, 并且是开通了小云朵的
www.A.com
是我们想让别人访问的项目, 托管在 cloudflare 上, 国外访问没问题, 但国内一般速度很慢, 甚至访问不了.
其实有些使用cloudflare托管的国际大厂在国内也开通了业务, 他们的域名在国内解析出来的ip并没有被墙, 速度非常不错, 我们就是要借助这些大厂的域名来访问
还有的是热心的网友提供的域名, 部署服务扫描在不同运营商下有哪些快的ip, 然后通过api设置不同的解析, 这些就是就是所谓的优选域名
优选域名
大厂的域名: 我常用www.apnic.net
|
|
网友提供的域名: 这些域名随时可能失效, 用之前最好用 itdog 站点工具tcp ping下
|
|
回退域名设置
- 添加自定义主机名
www.A.com
, 选 txt 验证, 会显示名称为xxx.www.A.com
, 值为xxxx
腾讯云设置
- 添加
www.A.com
子域名解析, 会提示你在cloudflare上添加一个txt记录来验证, 按要求添加 - 在
www.A.com
解析设置里, 添加记录@
, 类型CNAME
, 路线境内
, 记录值为优选域名, 如www.apnic.net
- 添加记录
@
, 类型CNAME
, 路线境外
, 记录值为回退域名, 如falkback.B.free.com
- 上方会有红色报错, 显示未生效, 点击查看详情, 提示要添加两条ns记录到 cloudflare 上
A.com
的dns记录, 原来有一条默认的www.A.com
的cname记录, 改为ns记录, 再添加另外一条, 稍等一会, 点击重新验证, 会变绿 - 添加一条
txt
类型记录, 记录为 回退域名设置里的xxx
, 值为xxxx
- 返回上级面板, 最右边的
更多 -> 开始解析
- 等几分钟后, 自定义主机名那里的状态就会变成绿色有效
- 如果状态一直没有通过, 重复
回退域名设置-步骤2-删掉重新添加
,腾讯云设置-步骤5-修改txt值
, 再等几分钟看看
sequenceDiagram
participant User as 用户
participant DNS as DNS解析
participant OptDomain as 优选域名服务器
participant FallbackDomain as 回退域名服务器
participant CF as Cloudflare边缘节点
participant Tunnel as Cloudflare Tunnel
participant Origin as 源站服务器
User->>DNS: 请求解析 www.A.com
alt 中国境内用户
DNS->>User: 返回优选域名IP (www.apnic.net 等)
Note over User,OptDomain: Host头保持为www.A.com
User->>OptDomain: 请求 (Host: www.A.com)
OptDomain->>CF: 转发请求到Cloudflare边缘
else 中国境外用户
DNS->>User: 返回回退域名IP (fallback.B.free.com)
Note over User,FallbackDomain: Host头保持为www.A.com
User->>FallbackDomain: 请求 (Host: www.A.com)
FallbackDomain->>CF: 通过SAAS服务转发
end
CF->>Tunnel: 根据Host头(www.A.com)识别并路由
Tunnel->>Origin: 转发请求到内部服务
Origin->>Tunnel: 返回响应
Tunnel->>CF: 转发响应
CF->>User: 返回最终响应
worker 设置优选域名
- 创建一个 worker 项目
- 在cloudflare 上添加 dns 记录, 类型 cname, 名称 www, 目标 www.apnic.net, 关掉小黄云
- 在 workers 路由, 添加路由, 路由为 www.A.com, worker 选中上面创建的worker
pages 设置优选域名
- 创建一个pages 项目
- 绑定自定义域 www.A.com, 等待验证完成后, A.com 的 dns 记录会多一条 cname 记录, 指向 pages 分配给我们的免费域名
- 参考 tunnel 的设置, 在腾讯云上添加 www.A.com 的子域名解析, 同样在cloudflare上添加两条ns记录, 在腾讯云上添加两条 cname 记录, 国内指向 www.apnic.net, 国外指向 pages 分配给我们的免费域名
通过 tunnel ssh登录
在本地电脑上的~/.ssh/config
中添加配置
|
|
需要安装 cloudflared
, 在 ProxyCommand 中调用
原理
自定义主机名:
SaaS + 回退域名:
Host 头不变是关键:
- 不论请求经过哪个域名 IP,到达 Cloudflare 时的 Host 始终是 www.A.com,Cloudflare 就能根据这点统一处理。
DNS 只是"流量入口",不是"路由规则"
真正决定请求怎么走的,是 Cloudflare 的「边缘配置」
自定义主机名和回退域名的正常用法
假设你是一个建站平台 builder.com:
客户 张三 想用自己的域名 www.zhangsan.com。
他把域名 CNAME 到你的平台的 custom.builder.com。
你在 Cloudflare 为 www.zhangsan.com 添加 Custom Hostname 记录。
设置 Fallback Origin 为 saas-backend.builder.com。
当访问 www.zhangsan.com:
- Cloudflare 提供自动证书。
- 请求转发到 saas-backend.builder.com。
- 后端读取 Host: www.zhangsan.com 来识别用户身份