网络穿透教程

  1. 下载cloudflare的安装包

curl -L https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64 -o /usr/local/bin/cloudflared

  1. 赋予执行权限

chmod +x /usr/local/bin/cloudflared

  1. 确认是否安装成功

cloudflared version

  1. 执行

cloudflared service install 你的密钥

  1. 加入到开机自启动

rc-update add cloudflared default

卸载命令cloudflared service uninstall

升级命令cloudflared update

其他命令:

rc-service cloudflared status

rc-service cloudflared start

rc-service cloudflared stop

查看开机自启动的服务

rc-update show | grep cloudflared

温馨提示,您可能会遇到下面问题

Stopping cloudflared...
Not stopped; may still be shutting down or shutdown may have failed

A1:直接删除pid文件

rm -f /var/run/cloudflared.pid

A2:修改service文件,加入删除pid文件操作

/etc/init.d/cloudflared

cp /etc/init.d/cloudflared /etc/init.d/cloudflared.bak;
sed -i '/kill.*get_pid/a\    rm -f "${pid_file}"' /etc/init.d/cloudflared

增加异常退出重启(仅限Alpine Linux,非Docker)

  1. 安装openrc

apk add openrc

  1. 找到安装的位置

find / -name supervise-daemon.sh

  1. 编辑/etc/init.d/cloudflared脚本

原理就是在cloudflared服务的脚本中使用supervise-daemon,所以只要把cloudflared服务设置成开启自启动就好了

#!/sbin/openrc-run

# 设置 cloudflared 的主程序路径
command=/usr/local/bin/cloudflared

# 运行参数:在前台运行 tunnel,并绑定 token(来自 Cloudflare Zero Trust Dashboard)
# --pidfile 让 supervise-daemon 能跟踪进程
# --autoupdate-freq 禁用自动更新(固定为 24h0m0s 即每 24 小时检查一次)
# token 必须是“持久化 tunnel”的 token,而非 Quick Tunnel
command_args="--no-autoupdate \
  tunnel run --token 你的token"

# 设置 PID 文件路径
pidfile="/var/run/cloudflared.pid"

# 服务名称(OpenRC 显示用)
name="cloudflared"

# 使用 supervise-daemon 来托管服务
supervisor="supervise-daemon"

# 启用崩溃重启功能(5 秒后尝试重新启动,无限重试)
# 同时设置标准输出/错误输出路径,防止每次重启覆盖旧日志
supervisor_args="--respawn-delay 5 \
                 --respawn-max 0 \
                 --stdout /var/log/cloudflared.out.log \
                 --stderr /var/log/cloudflared.err.log"

depend() {
    # 依赖网络服务,保证启动顺序
    need net
}

start_pre() {
    # 启动前执行的准备逻辑

    # 删除旧的 PID 文件,防止无法启动
    if [ -s /var/log/cloudflared.err.log ]; then
      kill -9 $(cat /var/run/cloudflared.pid)
      rm -f "${pidfile}"
    fi
    # 确保日志目录存在
    mkdir -p /var/log

    # 备份旧日志文件(如果存在且非空)
    if [ -s /var/log/cloudflared.out.log ]; then
        mv /var/log/cloudflared.out.log "/var/log/cloudflared.out.log.$(date +%Y%m%d%H%M%S)"
    fi

    if [ -s /var/log/cloudflared.err.log ]; then
        mv /var/log/cloudflared.err.log "/var/log/cloudflared.err.log.$(date +%Y%m%d%H%M%S)"
    fi
}

将会生成守护进程和cloudflared进程
18523 root supervise-daemon cloudflared … ← 守护进程
18525 root /usr/local/bin/cloudflared … ← 受监控的cloudflared服务


command_args="--no-autoupdate \
--loglevel debug \
--logfile /var/log/cloudflared.log \
tunnel run --token 你的token"
注意:此选项是记录远端的log,类似于nginx的log一样

测试方法

# 1. 找到 受监控的cloudflared服务
ps ax | grep 'cloudflared' | grep -v 'upervise-daemon' 
# 2. 杀掉进程,模拟崩溃
kill -9 18525
# 3. 等待 respawn-delay(默认 5 秒)后,查看是否自动重启
sleep 6
ps ax | grep '[c]loudflared'  

# 查看进程的运行时间
ps -eo pid,etime,comm | grep cloudflared
# 强制杀掉所有的进程
killall -9 cloudflared supervise-daemon
# 

Docker版看这里

参考这个链接点我

docker的附加参数:

docker run --link alist:alist cloudflare/cloudflared:latest tunnel --no-autoupdate run --token 你的token

已废弃部分

  1. 下载cloudflare的ubuntu文件

curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb

注意:这里curl可能会碰到https无法下载的问题,建议把文件放到http(AList)下面

  1. sudo dpkg -i cloudflared.deb

注意:这里可能会报错package architecture (amd64) does not match system (arm64)

解决:sudo dpkg -i --force-architecture cloudflared.deb (点击参考

  1. sudo cloudflared service install 你的密钥

成功会显示:Illegal instruction

网页版SSH内网穿透

  1. 将服务器连接到 Cloudflare:
  1. 配置 Cloudflare Access 应用程序:(下面的步骤一定要做!)
  1. 用户访问 SSH 终端:

CF节点优选

CloudFlare公共优选Cname域名地址1:点我

CloudFlare公共优选Cname域名地址2:

CloudFlare优质IP:点我

CloudFlare公共优选教程1:点我

CloudFlare公共优选教程2:点我

CDN优选域名和IP教程:点我

在线TCP延迟测试

域名价格表:点我

🔥🔥🔥CDN加速教程

节点优选流程如下

步骤

主域名A

加速域名B

第一步:

在CF的ZeroTrust的Tunnels中,把A,B都映射到alist网站上(alist.A和alist.B)

第二步:

1.回退源设置成【alist.B】

2.自定义主机设置成**【alist.A】**

第三步:

第二步的2中会生成一些DNS解析,添加到A的DNS中(#1)

设置一个优选节点到**【fast.B】**

第四步:

把【alist.A】指向到【fast.B】,关闭CF的代理

温馨提示:

#1关于回退源中自定义主机的DNS认证的解决办法

解决灵感的帖子:点我

如果回退源中-->自定义主机验证-->主机名的状态(验证失败)

请:假设回退域名callback.tsinbei.com

自定义主机域名custom.tsinbei.com)(验证失败)

那么自定义主机域名****中设置一个CNAMEcsutome指向callback.tsinbei.com

温馨提示:无论使用何种方法验证,验证成功后均可以删除验证记录(TXT 或 CNAME)并进行自选。经测试,同一个主机名验证成功一次后就不会再次验证。

#2网页版SSH做CDN加速时候遇到的问题

  1. 加速域名B回退源设置了自定义主机ssh.A

  2. 主域名ssh.A这里的cname不是指向fast.B(不做域名加速配置)

  3. 主域名ssh.A保持隧道Tunnels自动生成的配置(ssh.A),并且小黄云CF代理要开着,否则ssh.A无法访问(自动生成的:**73833217-e9d4-4a02-954b-d5b0de078150.cfargotunnel.com**

  4. 并且ssh.A也要去做一个application

#3自定义主机证书的自动续订的问题

自定义主机(主域名)ssh.A下面****加一个CNAME

自定义主机名的 DCV 委派

_acme-challenge.<hostname> <hostname>.``6ec077ddb0899695.dcv.cloudflare.com

CNAME的Key里面只需要写sub域名ssh,cloudflare会自动补充完整域名的,但是value里面要写ssh.A

_acme-challenge``**.ssh** **ssh.A.**``<hostname>.``6ec077ddb0899695.dcv.cloudflare.com

温馨提示:实际内容请参考“自定义主机名的 DCV 委派

CF加速成功验证

在线网站测试

Image

Image

踩到的坑

Image

cloudflare中配置公共主机名的时候,一定不要设置路径否则可能会造成js,css无法正常返回

关于内网穿透的一些补充内容

cpolar也可以做内网穿透(不过没有试验过,教程如下)

图文教程:点我

油管视频:点我

官方教程:点我

docker版安装:点我

cpolar的部署(Alpine服务器)

  1. 查看AlpineLinux架构
lscpu
  1. 下载cpolar并解压

当前使用版本:https://wwvj.lanzoum.com/iHbEy2tefv7e

curl -L https://www.cpolar.com/static/downloads/releases/3.3.12/cpolar-stable-linux-amd64.zip -o cpolar-stable-linux-amd64.zip
unzip cpolar-stable-linux-amd64.zip 
mv cpolar /usr/local/bin/
  1. 制作alpine服务(service)文件(cpolar的配置文件yml)

mkdir -p /etc/cpolar
vi /etc/cpolar/cpolar.yml

# vi: set shiftwidth=2 tabstop=2 softtabstop=2 ai expandtab:
authtoken: your_auth_token
tunnels:
  website:
    addr: 8080
    proto: http
  ssh:
    proto: tcp
    addr: 22
  1. 制作alpine服务(service)文件(脚本)

touch /etc/init.d/cpolar
vi /etc/init.d/cpolar

#!/sbin/openrc-run

name="cpolar"
command="/usr/local/bin/cpolar"
command_args="--config /etc/cpolar/cpolar.yml -log /var/log/cpolar/access.log"
pidfile="/run/cpolar.pid"
depend() {
    need net
    before docker
}
start() {
    ebegin "Starting cpolar"
    start-stop-daemon --start --background --pidfile $pidfile --exec $command -- $command_args
    eend $?
}
stop() {
    ebegin "Stopping cpolar"
    start-stop-daemon --stop --pidfile $pidfile
    eend $?
}

chmod +x /etc/init.d/cpolar

  1. 使用cpolar服务
rc-update add cpolar default

rc-service cpolar status
#可使用选项
#  -start
#  -restart
#  -stop
#  -status
  1. 开启cpolar隧道
cpolar authtoken xxxxxxx

检证命令:
cpolar http 8080

实验完毕,垃圾别用!!!

Image

❤️ 转载文章请注明出处,谢谢!❤️