前言
大家都知道CF优选域名/IP可以用来加速Saas网站访问、加速Workers/Pages节点速度,但是很多人都不知道怎么加速 Zero Trust 穿透的网站,网上搜也搜不到,今天根据大佬wlpz的指点成功实现优选域名访问Tunnel穿透后的网站了!
首先放上大佬回复:
你需要将tunnel绑定至少两个域名,一个回源域名,一个自定义主机名,这里需要注意,比如你自定义主机名已经托管到阿里云了,那怎么绑定到tunnel呢,这里两种方法。①你可以直接通过cf面板添加,点击站点,添加站点,最后注意不需要真的将dns服务器指定到cf的!!!,然后你去tunnel里添加绑定就好了,添加完删除掉站点就行。②或者本地管理tunnel,参考官方文档 Locally-managed tunnel · Cloudflare Zero Trust docs 其他操作和saas接入相同
下面是我的整理的教程,哪里不对的各位大佬多多指点!谢谢~
总体与SaaS方式差不多,但是需要一点想象力
准备两个域名,两个域名必须托管到CF,大佬说自定义主机不在CF也行
第一个域名可以只使用一个子域名作为回退源,下面以 back.aaa.com 为例
另外一个作为主机名,也就是公共访问的域名,会SaaS的一看就懂了,下面以 bbb.com 为例,你可以添加任意数量的子域名,本例为 test.bbb.com,再准备一个加速域名,命名为 cdn.bbb.com
安装
我在本地Alpine系统使用的,以下命令全部以Alpine系统为主,以root用户权限执行,其他系统请自行转换。
直接下载二进制程序
mkdir /root/cfd && cd /root/cfd # 建议使用单独文件夹
wget https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -O cloudflared
chmod +x cloudflared
你也可以使用其他方式安装 Downloads
登录
./cloudflared tunnel login
复制控制台上的链接到浏览器打开,登录Cloudflare后选择你要用来使用的主域名,本例是 aaa.com
创建隧道,随意命名
./cloudflared tunnel create <NAME>
记下控制台返回的UUID,记不住也没事,会自动在 /root/.cloudflared
生成一个以UUID命名的Json文件
添加一个域名,这个域名将作为回退源,建议使用子域名,且这个子域名没有在使用中,这里以 back.aaa.com 为例
cloudflared tunnel route dns <UUID or NAME> back.aaa.com
创建配置文件
nano /root/.cloudflared/config.yml
内容示例
tunnel: 6ff42ae2-765d-4adf-8112-31c55c1551ef
credentials-file: /root/.cloudflared/6ff42ae2-765d-4adf-8112-31c55c1551ef.json
ingress:
- hostname: back.aaa.com # 这条是回退源
service: http://localhost # 指向本机
- hostname: test.bbb.com # 这条是被加速的公共域名
service: http://localhost:8080 # 指向具体的服务
# 有其他服务可以继续添加
# Example of a rule responding to traffic with an HTTP status:
- service: http_status:404
看到这里懂的都懂了
最后一条需要是全局规则,也就是用来兜底的规则
验证配置是否有效
./cloudflared tunnel ingress validate
运行
./cloudflared tunnel run <UUID or NAME>
设置自定义主机
进入Cloudflare面板,SSL/TLS-->自定义主机名,将前面添加的第一个hostname也就是 back.aaa.com 设置为回退源,然后添加自定义主机名,剩下的就跟saas一样操作了
- 添加TXT验证
自定义主机要与本地配置的对得上,缺一不可
每次修改配置文件都需要重启一次Cloudflared服务
每次修改自定义主机都需要验证一次TXT记录
如果你的自定义主机托管在CF
去dnspod或其他dns平台,主要是支持分线路解析的平台,添加一个子域名,这个子域名是专门用来解析到加速域名/IP的,本例中为 cdn.bbb.com
复制主机记录和记录值去CF添加,同时添加NS记录指向 f1g1ns1.dnspod.net
和 f1g1ns2.dnspod.net
,然后在高级设置中关闭暂停解析
重点来了,如下图添加解析,境内指向优选域名/IP,境外指向你的回退源

最后在CF添加你想加速的域名指向这个dnspod添加的加速域名,本例中是 test.bbb.com 指向 cdn.bbb.com,添加完成记得刷新TXT记录并更新
如果你的自定义主机托管在其他平台
在CF面板添加自定义主机名之后,按照正常操作在dnspod添加TXT记录,同时分线路添加解析,缺点好像是不能自动颁发SSL证书
公共域名/IP地址
使用Docker管理
先复制配置文件到当前目录
cp /root/.cloudflared/config.yml ./
使用 id
命令来获取你的用户ID和组ID:
id
在当前目录编写docker-compose文件
cat <<EOF > docker-compose.yml
version: "3.9"
services:
cloudflared:
image: cloudflare/cloudflared
container_name: cloudflared
restart: always
volumes:
- /root/.cloudflared:/root/.cloudflared
- ./config.yml:/etc/cloudflared/config.yml
command: tunnel --config /etc/cloudflared/config.yml run
network_mode: host
user: "0:0"
EOF
启动
docker-compose up -d
后面只需要编辑当前目录的config.yml文件,编辑完重启docker
如果启动docker后提示以下错误
WRN The user running cloudflared process has a GID (group ID) that is not within ping_group_range. You might need to add that user to a group within that range, or instead update the range to encompass a group the user is already in by modifying /proc/sys/net/ipv4/ping_group_range. Otherwise cloudflared will not be able to ping this network error="Group ID 0 is not between ping group 1 to 0"
WRN ICMP proxy feature is disabled error="cannot create ICMPv4 proxy: Group ID 0 is not between ping group 1 to 0 nor ICMPv6 proxy: socket: permission denied"
不影响使用但是如果想解决的话可以尝试修改ping_group_range
,将ping_group_range
设置为包含所有组ID:
echo "0 2147483647" > /proc/sys/net/ipv4/ping_group_range
为了在系统重启后保持这些设置,可以将它们添加到启动文件中
创建 OpenRC 服务脚本:
在 /etc/init.d/ 目录下创建一个新的服务脚本,例如 set_ping_group_range:
sudo nano /etc/init.d/set_ping_group_range
在脚本中添加以下内容:
#!/sbin/openrc-run
depend() {
after net
}
start() {
ebegin "Setting ping_group_range"
echo "0 2147483647" > /proc/sys/net/ipv4/ping_group_range
eend $?
}
赋予脚本执行权限:
sudo chmod +x /etc/init.d/set_ping_group_range
添加脚本到默认运行级别:
sudo rc-update add set_ping_group_range default
立即启动服务:
sudo rc-service set_ping_group_range start
修改系统参数后,重启Cloudflared容器以应用新的缓冲区大小设置:
docker-compose down
docker-compose up -d
如果提示
failed to sufficiently increase receive buffer size (was: 208 kiB, wanted: 7168 kiB, got: 416 kiB). See https://github.com/quic-go/quic-go/wiki/UDP-Buffer-Sizes for details.
也不影响使用,但是想解决的话可以修改缓冲区大小,
- 查看当前系统的UDP缓冲区设置
在宿主机上查看当前的UDP缓冲区大小设置:
sysctl net.core.rmem_max
sysctl net.core.rmem_default
- 修改UDP缓冲区大小
如果缓冲区大小不足,可以通过修改sysctl参数来增加:
sudo sysctl -w net.core.rmem_max=8388608 # 设置最大缓冲区为8MB
sudo sysctl -w net.core.rmem_default=8388608 # 设置默认缓冲区为8MB
可以将缓冲区大小设置为更大的值,例如8MB或更多,以确保有足够的空间接收数据。
- 将修改持久化
为了在系统重启后保持这些设置,可以将它们添加到/etc/sysctl.conf文件中:
echo "net.core.rmem_max=8388608" | sudo tee -a /etc/sysctl.conf
echo "net.core.rmem_default=8388608" | sudo tee -a /etc/sysctl.conf
然后应用这些设置:
sudo sysctl -p
- 重启容器
修改系统参数后,重启Cloudflared容器以应用新的缓冲区大小设置:
docker-compose down
docker-compose up -d
评论区