├── README.md └── cf-tunnels.sh /README.md: -------------------------------------------------------------------------------- 1 | ## 使用 Cloudflare 内网穿透脚本 `cf-tunnels.sh` 教程 2 | 3 | 本脚本用于管理 Cloudflare Tunnel 的安装、隧道删除以及 cloudflared 的完全删除操作。通过此脚本,您可以方便地安装 Cloudflare 内网穿透隧道、选择性删除隧道或完全删除 Cloudflared 相关文件。 4 | 5 | ### 1. 准备工作 6 | 7 | 在开始使用脚本之前,请确保以下条件满足: 8 | - 您已经拥有一个 [Cloudflare 账号](https://dash.cloudflare.com/) 并添加了相关域名。 9 | - 您的服务器运行的是 Linux 操作系统。 10 | - 您可以通过 SSH 登录服务器并具有 `sudo` 权限。 11 | 12 | ### 2. 下载并安装脚本 13 | 14 | 首先,您需要下载脚本并为其添加执行权限。可以通过以下命令来完成这些操作: 15 | 16 | ```bash 17 | # 下载脚本 18 | curl -O https://raw.githubusercontent.com/jiuerkeji/cloudflare-tunnels/main/cf-tunnels.sh 19 | 20 | # 添加执行权限 21 | sudo chmod +x cf-tunnels.sh 22 | ``` 23 | 24 | ### 3. 运行脚本 25 | 26 | 运行脚本时,您可以选择三种操作:安装 Cloudflare Tunnel、选择性删除隧道或完全删除 `cloudflared`。运行脚本的命令如下: 27 | 28 | ```bash 29 | sudo ./cf-tunnels.sh 30 | ``` 31 | 32 | ### 4. 使用选项说明 33 | 34 | 当运行脚本时,会出现一个菜单供您选择执行的操作: 35 | 36 | ```bash 37 | 请选择操作: 38 | 1. 安装 Cloudflare 内网穿透 39 | 2. 选择性删除 Cloudflare 隧道 40 | 3. 完全删除 cloudflared 41 | ``` 42 | 43 | #### 4.1. 安装 Cloudflare 内网穿透 44 | 45 | 选择 **1** 安装 Cloudflare Tunnel。安装过程如下: 46 | 47 | - **输入隧道名称**:输入您想创建的隧道名称,例如 `mytunnel`。 48 | - **输入域名**:输入您已添加到 Cloudflare 的域名,例如 `example.com`。 49 | - **输入本地服务端口**:默认情况下,隧道会将请求转发到本地服务端口 `80`,您可以更改此端口。 50 | 51 | 脚本会执行以下操作: 52 | - 下载并安装 `cloudflared`。 53 | - 登录 Cloudflare 进行授权。 54 | - 创建隧道并将域名指向该隧道。 55 | - 配置系统服务以确保隧道在服务器启动时自动运行。 56 | 57 | 完成后,隧道将正常启动并运行。 58 | 59 | #### 4.2. 选择性删除 Cloudflare 隧道 60 | 61 | 选择 **2** 可以列出所有现有的隧道,并选择要删除的隧道。删除过程如下: 62 | 63 | - **列出隧道**:脚本会列出所有当前存在的隧道及其 ID 和名称。 64 | - **输入要删除的隧道 ID 或名称**:您可以根据列出的信息输入要删除的隧道名称或隧道 ID。 65 | 66 | 脚本会执行以下操作: 67 | - 清理隧道的活动连接。 68 | - 删除指定的隧道。 69 | 70 | **注意**:隧道删除后,系统会提示您自行前往 Cloudflare 官网删除与该隧道相关的 DNS 记录。例如: 71 | 72 | ```bash 73 | 请自行前往 Cloudflare 官网删除与域名 mytunnel 相关的 DNS 记录。 74 | ``` 75 | 76 | 您需要登录 Cloudflare 控制台并手动删除与该隧道相关的 DNS 记录。 77 | 78 | #### 4.3. 完全删除 Cloudflared 79 | 80 | 选择 **3** 将完全删除 `cloudflared` 及其所有相关文件和配置。这适用于不再需要 Cloudflare 内网穿透服务的情况。脚本会执行以下操作: 81 | 82 | - 停止并禁用 `cloudflared` 系统服务。 83 | - 删除 `cloudflared` 的可执行文件、配置文件、凭证文件和日志文件。 84 | 85 | 执行此操作后,所有与 `cloudflared` 相关的内容将从您的服务器中移除。 86 | 87 | --- 88 | 89 | ### 5. 注意事项 90 | 91 | - **删除 DNS 记录**:在删除隧道后,您需要手动前往 Cloudflare 官网删除与隧道相关的 DNS 记录,脚本会提供高亮提示。 92 | - **定期检查隧道**:如果不再需要某个隧道,请通过此脚本或 Cloudflare 控制台进行清理,避免不必要的资源占用。 93 | - **保持 `cloudflared` 更新**:如需要继续使用 Cloudflare Tunnel,请定期检查并更新 `cloudflared`,以确保稳定性和安全性。 94 | 95 | --- 96 | 97 | -------------------------------------------------------------------------------- /cf-tunnels.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # ANSI 转义序列 4 | RED='\033[0;31m' # 红色 5 | GREEN='\033[0;32m' # 绿色 6 | YELLOW='\033[1;33m' # 黄色高亮 7 | BLUE='\033[0;34m' # 蓝色 8 | BOLD='\033[1m' # 粗体 9 | RESET='\033[0m' # 重置颜色 10 | 11 | # 广告信息 12 | echo -e "${YELLOW}${BOLD}欢迎使用 SeeleCloud 提供的 Cloudflare 内网穿透脚本!${RESET}" 13 | echo -e "${GREEN}${BOLD}便宜好用的机场请访问:${BLUE}https://main.xiercloud.uk${RESET}" 14 | echo "" 15 | 16 | # 开始菜单 17 | echo "请选择操作:" 18 | echo "1. 安装 Cloudflare 内网穿透" 19 | echo "2. 选择性删除 Cloudflare 隧道" 20 | echo "3. 完全删除 cloudflared" 21 | read -p "请输入选择的数字: " CHOICE 22 | 23 | if [ "$CHOICE" == "1" ]; then 24 | # 安装 Cloudflare Tunnel 25 | read -p "请输入隧道名称: " TUNNEL_NAME 26 | read -p "请输入域名 (如: example.com): " DOMAIN_NAME 27 | read -p "请输入本地服务端口 (默认为80): " LOCAL_PORT 28 | LOCAL_PORT=${LOCAL_PORT:-80} 29 | 30 | echo "正在下载并安装 Cloudflared..." 31 | curl -L 'https://file.xiercloud.uk/cloudflared-linux-amd64' -o /usr/bin/cloudflared 32 | chmod +x /usr/bin/cloudflared 33 | 34 | echo "登录 Cloudflare,请在浏览器中完成授权..." 35 | cloudflared tunnel login 36 | 37 | echo "创建隧道: $TUNNEL_NAME..." 38 | cloudflared tunnel create $TUNNEL_NAME 39 | 40 | UUID=$(cloudflared tunnel list | grep "$TUNNEL_NAME" | awk '{print $1}') 41 | echo "将域名 $DOMAIN_NAME 指向隧道..." 42 | cloudflared tunnel route dns $TUNNEL_NAME $DOMAIN_NAME 43 | 44 | CONFIG_FILE="/etc/cloudflared/$TUNNEL_NAME.yml" 45 | echo "配置 Cloudflared..." 46 | mkdir -p /etc/cloudflared 47 | cat > $CONFIG_FILE << EOL 48 | tunnel: $UUID 49 | credentials-file: /root/.cloudflared/$UUID.json 50 | ingress: 51 | - hostname: $DOMAIN_NAME 52 | service: http://localhost:$LOCAL_PORT 53 | - service: http_status:404 54 | EOL 55 | 56 | echo "验证配置文件..." 57 | cloudflared tunnel ingress validate /etc/cloudflared/$TUNNEL_NAME.yml 58 | 59 | echo "测试隧道运行..." 60 | cloudflared --config $CONFIG_FILE tunnel run $UUID & 61 | 62 | echo "创建系统服务..." 63 | cat > /etc/systemd/system/cloudflared.service << EOL 64 | [Unit] 65 | Description=cloudflared 66 | After=network.target 67 | 68 | [Service] 69 | ExecStart=/usr/bin/cloudflared --config /etc/cloudflared/$TUNNEL_NAME.yml tunnel run 70 | Restart=on-failure 71 | 72 | [Install] 73 | WantedBy=multi-user.target 74 | EOL 75 | 76 | systemctl daemon-reload 77 | systemctl enable cloudflared 78 | systemctl start cloudflared 79 | systemctl status cloudflared 80 | 81 | echo "完成!Cloudflare Tunnel 已成功设置并正在运行。" 82 | 83 | elif [ "$CHOICE" == "2" ]; then 84 | echo "列出所有现有的隧道..." 85 | TUNNELS=$(cloudflared tunnel list | awk 'NR>1 {print $1, $2}') 86 | if [ -z "$TUNNELS" ]; then 87 | echo "没有发现任何隧道。" 88 | else 89 | echo "可用的隧道列表:" 90 | echo "ID NAME" 91 | echo "$TUNNELS" 92 | read -p "请输入要删除的隧道 ID 或名称: " TUNNEL_INPUT 93 | 94 | # 匹配用户输入的是隧道名称还是隧道ID 95 | TUNNEL_ID=$(echo "$TUNNELS" | grep "$TUNNEL_INPUT" | awk '{print $1}') 96 | TUNNEL_NAME=$(echo "$TUNNELS" | grep "$TUNNEL_INPUT" | awk '{print $2}') 97 | 98 | if [ -z "$TUNNEL_ID" ]; then 99 | echo "隧道 $TUNNEL_INPUT 不存在。" 100 | else 101 | echo "清理隧道 $TUNNEL_ID 的活动连接..." 102 | cloudflared tunnel cleanup $TUNNEL_ID 103 | 104 | echo "正在删除隧道 $TUNNEL_ID..." 105 | cloudflared tunnel delete $TUNNEL_ID 106 | echo "隧道 $TUNNEL_ID 已删除。" 107 | 108 | # 提示用户手动删除 DNS 记录 109 | echo -e "${YELLOW}${BOLD}请自行前往 Cloudflare 官网删除与域名 ${TUNNEL_NAME} 相关的 DNS 记录。${RESET}" 110 | fi 111 | fi 112 | 113 | elif [ "$CHOICE" == "3" ]; then 114 | # 完全删除 cloudflared 115 | echo "停止并禁用 Cloudflared 系统服务..." 116 | systemctl stop cloudflared 117 | systemctl disable cloudflared 118 | 119 | echo "删除系统服务文件..." 120 | rm -f /etc/systemd/system/cloudflared.service 121 | systemctl daemon-reload 122 | 123 | echo "删除 Cloudflared 可执行文件..." 124 | rm -f /usr/bin/cloudflared 125 | 126 | echo "删除配置文件和隧道凭证..." 127 | rm -rf /etc/cloudflared 128 | rm -rf /root/.cloudflared 129 | 130 | echo "删除日志文件..." 131 | rm -rf /var/log/cloudflared 132 | 133 | echo "Cloudflared 以及所有相关文件已成功删除。" 134 | 135 | else 136 | echo "无效的选择,脚本退出。" 137 | exit 1 138 | fi 139 | --------------------------------------------------------------------------------