网络穿透教程
⭐
- 下载cloudflare的安装包
curl -L
https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64
-o /usr/local/bin/cloudflared
- 赋予执行权限
chmod +x /usr/local/bin/cloudflared
- 确认是否安装成功
cloudflared version
- 执行
cloudflared service install 你的密钥
- 加入到开机自启动
rc-update add cloudflared default
rc-update show
查看所有开机自启
卸载命令:cloudflared service uninstall
升级命令:cloudflared update
其他命令:
rc-service cloudflared status
rc-service cloudflared start
rc-service cloudflared stop
查看开机自启动的服务
rc-update show | grep cloudflared
温馨提示,您可能会遇到下面问题
- Q:停止或重启失败
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)
- 安装openrc
apk add openrc
- 找到安装的位置
find / -name supervise-daemon.sh
- 编辑/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的附加参数:
-
--link alist:alist #容器间相互通信
-
--network host #容器内的应用就能直接访问宿主机的 localhost
docker run --link alist:alist cloudflare/cloudflared:latest tunnel --no-autoupdate run --token 你的token
已废弃部分
⭐
- 下载cloudflare的ubuntu文件
curl -L --output cloudflared.deb
https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
注意:这里curl可能会碰到https无法下载的问题,建议把文件放到http(AList)下面
- sudo dpkg -i cloudflared.deb
注意:这里可能会报错package architecture (amd64) does not match system (arm64)
解决:sudo dpkg -i --force-architecture cloudflared.deb (点击参考)
- sudo cloudflared service install 你的密钥
成功会显示:Illegal instruction
网页版SSH内网穿透
⭐
- 将服务器连接到 Cloudflare:
-
创建 Cloudflare Tunnel: 登录到 Cloudflare Zero Trust 仪表板,导航至“Networks” > “Tunnels”,点击“Create a tunnel”。选择“Cloudflared”作为连接器类型,输入隧道名称,然后点击“Save tunnel”。
-
安装并运行
**cloudflared**
: 根据您的服务器操作系统,下载并安装cloudflared
。在服务器上运行提供的命令以启动cloudflared
,这将建立服务器与 Cloudflare 之间的隧道连接。 -
配置公共主机名: 在隧道的“Public Hostnames”选项卡中,选择一个域名和子域名(例如
ssh.example.com
),将其指向您的 SSH 服务(通常是localhost:22
)。保存主机名设置。
- 配置 Cloudflare Access 应用程序:(下面的步骤一定要做!)
-
创建应用程序: 在 Cloudflare Zero Trust 仪表板中,转到“Access” > “Applications”,点击“Add an application”,选择“Self-hosted”。
-
设置应用程序详细信息: 输入应用程序名称,设置“Application domain”为之前配置的公共主机名(例如
ssh.example.com
)。 -
配置访问策略: 在“Policies”选项卡中,添加相应的访问策略,指定允许访问该应用程序的用户或组。(必须配置一个Everyone的mail策略,否则无法收到邮件)
-
启用浏览器渲染: 在“Advanced settings”下的“Browser rendering settings”中,将“Browser rendering”设置为“SSH”。保存应用程序设置。
- 用户访问 SSH 终端:
-
访问公共主机名: 用户在浏览器中访问配置的公共主机名(例如
https://ssh.example.com
)。 -
身份验证: 用户将根据之前配置的访问策略进行身份验证。
-
Linux账户验证:输入alpine,密码alpine
-
使用浏览器终端: 成功验证后,Cloudflare 将在浏览器中呈现一个 SSH 终端,用户可以直接在其中操作服务器,无需在客户端安装任何额外的软件或管理 SSH 密钥。
CF节点优选
⭐
CloudFlare公共优选Cname域名地址1:点我
CloudFlare优质IP:点我
CloudFlare公共优选教程1:点我
CloudFlare公共优选教程2:点我
CDN优选域名和IP教程:点我
域名价格表:点我
🔥🔥🔥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)(验证失败)
那么自定义主机域名****中设置一个CNAME :csutome
指向callback.tsinbei.com
温馨提示:无论使用何种方法验证,验证成功后均可以删除验证记录(TXT 或 CNAME)并进行自选。经测试,同一个主机名验证成功一次后就不会再次验证。
#2网页版SSH做CDN加速时候遇到的问题
⭐
-
在加速域名B的回退源设置了自定义主机ssh.A
-
主域名ssh.A这里的cname不是指向fast.B(不做域名加速配置)
-
主域名ssh.A保持隧道Tunnels自动生成的配置(ssh.A),并且小黄云CF代理要开着,否则ssh.A无法访问(自动生成的:
**73833217-e9d4-4a02-954b-d5b0de078150.cfargotunnel.com**
) -
并且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加速成功验证
⭐
踩到的坑
⭐
在cloudflare中配置公共主机名的时候,一定不要设置路径,否则可能会造成js,css无法正常返回
关于内网穿透的一些补充内容
⭐
用cpolar也可以做内网穿透(不过没有试验过,教程如下)
图文教程:点我
油管视频:点我
官方教程:点我
docker版安装:点我
cpolar的部署(Alpine服务器)
- 查看AlpineLinux架构
lscpu
- 下载cpolar并解压
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/
- 制作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
- 制作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
- 使用cpolar服务
rc-update add cpolar default
rc-service cpolar status
#可使用选项
# -start
# -restart
# -stop
# -status
- 开启cpolar隧道
cpolar authtoken xxxxxxx
检证命令:
cpolar http 8080
实验完毕,垃圾别用!!!