手机服务器搭建:第二章(手机服务器做内网穿透)

网络穿透教程

  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

  • 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)

  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的附加参数:

  • –link alist:alist #容器间相互通信

  • –network host #容器内的应用就能直接访问宿主机的 localhost

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:
  • 创建 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)。保存主机名设置。

  1. *配置 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”。保存应用程序设置。

  1. 用户访问 SSH 终端:
  • 访问公共主机名: 用户在浏览器中访问配置的公共主机名(例如 https://ssh.example.com)。

  • 身份验证: 用户将根据之前配置的访问策略进行身份验证。

  • Linux账户验证:输入alpine,密码alpine

  • 使用浏览器终端: 成功验证后,Cloudflare 将在浏览器中呈现一个 SSH 终端,用户可以直接在其中操作服务器,无需在客户端安装任何额外的软件或管理 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