Update cf-tunnel.sh
This commit is contained in:
@@ -1,8 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
# https://github.com/sky22333/shell
|
# https://github.com/sky22333/shell
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# === 颜色定义 ===
|
# === 颜色定义 ===
|
||||||
RED='\033[0;31m'
|
RED='\033[0;31m'
|
||||||
GREEN='\033[0;32m'
|
GREEN='\033[0;32m'
|
||||||
@@ -10,11 +8,17 @@ YELLOW='\033[1;33m'
|
|||||||
BLUE='\033[1;34m'
|
BLUE='\033[1;34m'
|
||||||
NC='\033[0m' # 清除颜色
|
NC='\033[0m' # 清除颜色
|
||||||
|
|
||||||
CLOUDFLARED_URL="https://github.com/cloudflare/cloudflared/releases/download/2025.8.0/cloudflared-linux-amd64"
|
LOC=$(curl -s https://www.cloudflare.com/cdn-cgi/trace | grep 'loc=' | cut -d= -f2)
|
||||||
|
|
||||||
|
if [[ "$LOC" == "CN" ]]; then
|
||||||
|
CLOUDFLARED_URL="https://gh-proxy.com/https://github.com/cloudflare/cloudflared/releases/download/2025.9.1/cloudflared-linux-amd64"
|
||||||
|
else
|
||||||
|
CLOUDFLARED_URL="https://github.com/cloudflare/cloudflared/releases/download/2025.9.1/cloudflared-linux-amd64"
|
||||||
|
fi
|
||||||
|
|
||||||
CLOUDFLARED_BIN="/usr/local/bin/cloudflared"
|
CLOUDFLARED_BIN="/usr/local/bin/cloudflared"
|
||||||
SERVICE_PATH="/etc/systemd/system/cloudflared-tunnel.service"
|
SERVICE_PATH="/etc/systemd/system/cloudflared-tunnel.service"
|
||||||
LOG_PATH="/var/log/cloudflared.log"
|
LOG_PATH="/var/log/cloudflared.log"
|
||||||
|
|
||||||
# 检查 cloudflared 是否已存在
|
# 检查 cloudflared 是否已存在
|
||||||
if [[ -f "$CLOUDFLARED_BIN" ]]; then
|
if [[ -f "$CLOUDFLARED_BIN" ]]; then
|
||||||
echo -e "${GREEN}已存在文件,跳过下载。${NC}"
|
echo -e "${GREEN}已存在文件,跳过下载。${NC}"
|
||||||
@@ -26,7 +30,6 @@ else
|
|||||||
fi
|
fi
|
||||||
chmod +x "$CLOUDFLARED_BIN"
|
chmod +x "$CLOUDFLARED_BIN"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 检查服务是否存在
|
# 检查服务是否存在
|
||||||
SERVICE_EXISTS=false
|
SERVICE_EXISTS=false
|
||||||
if sudo systemctl list-units --full --all | grep -q 'cloudflared-tunnel.service'; then
|
if sudo systemctl list-units --full --all | grep -q 'cloudflared-tunnel.service'; then
|
||||||
@@ -46,26 +49,20 @@ if sudo systemctl list-units --full --all | grep -q 'cloudflared-tunnel.service'
|
|||||||
echo -e "${YELLOW}将保留旧服务配置,仅修改穿透地址${NC}"
|
echo -e "${YELLOW}将保留旧服务配置,仅修改穿透地址${NC}"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 用户选择运行模式
|
# 用户选择运行模式
|
||||||
echo ""
|
echo ""
|
||||||
echo -e "${YELLOW}请选择运行模式:${NC}"
|
echo -e "${YELLOW}请选择运行模式:${NC}"
|
||||||
echo "1) 临时运行(前台运行并显示临时访问域名)"
|
echo "1) 临时运行(前台运行并显示临时访问域名)"
|
||||||
echo "2) 后台运行(自动配置后台服务并显示访问域名)"
|
echo "2) 后台运行(自动配置后台服务并显示访问域名)"
|
||||||
read -p "请输入 1 或 2: " MODE
|
read -p "请输入 1 或 2: " MODE
|
||||||
|
|
||||||
# 输入内网地址
|
# 输入内网地址
|
||||||
read -p "请输入要穿透的本地地址(例如 127.0.0.1:8080): " LOCAL_ADDR
|
read -p "请输入要穿透的本地地址(例如 127.0.0.1:8080): " LOCAL_ADDR
|
||||||
|
|
||||||
if [[ "$MODE" == "1" ]]; then
|
if [[ "$MODE" == "1" ]]; then
|
||||||
echo -e "${BLUE}正在前台运行 cloudflared...${NC}"
|
echo -e "${BLUE}正在前台运行 cloudflared...${NC}"
|
||||||
|
|
||||||
LOGFILE=$(mktemp)
|
LOGFILE=$(mktemp)
|
||||||
stdbuf -oL "$CLOUDFLARED_BIN" tunnel --url "$LOCAL_ADDR" 2>&1 | tee "$LOGFILE" &
|
stdbuf -oL "$CLOUDFLARED_BIN" tunnel --url "$LOCAL_ADDR" 2>&1 | tee "$LOGFILE" &
|
||||||
PID=$!
|
PID=$!
|
||||||
|
|
||||||
echo -e "${YELLOW}等待 cloudflared 输出访问域名...${NC}"
|
echo -e "${YELLOW}等待 cloudflared 输出访问域名...${NC}"
|
||||||
|
|
||||||
for i in {1..60}; do
|
for i in {1..60}; do
|
||||||
DOMAIN=$(grep -oP 'https://[a-zA-Z0-9-]+\.trycloudflare\.com' "$LOGFILE" | head -n1)
|
DOMAIN=$(grep -oP 'https://[a-zA-Z0-9-]+\.trycloudflare\.com' "$LOGFILE" | head -n1)
|
||||||
if [[ -n "$DOMAIN" ]]; then
|
if [[ -n "$DOMAIN" ]]; then
|
||||||
@@ -77,26 +74,21 @@ if [[ "$MODE" == "1" ]]; then
|
|||||||
fi
|
fi
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
echo -e "${RED}超时未能获取临时域名,日志保存在:$LOGFILE${NC}"
|
echo -e "${RED}超时未能获取临时域名,日志保存在:$LOGFILE${NC}"
|
||||||
kill $PID 2>/dev/null || true
|
kill $PID 2>/dev/null || true
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
elif [[ "$MODE" == "2" ]]; then
|
elif [[ "$MODE" == "2" ]]; then
|
||||||
echo -e "${BLUE}正在配置 systemd 服务...${NC}"
|
echo -e "${BLUE}正在配置 systemd 服务...${NC}"
|
||||||
|
|
||||||
if [[ "$SERVICE_EXISTS" == false ]]; then
|
if [[ "$SERVICE_EXISTS" == false ]]; then
|
||||||
sudo bash -c "cat > $SERVICE_PATH" <<EOF
|
sudo bash -c "cat > $SERVICE_PATH" <<EOF
|
||||||
[Unit]
|
[Unit]
|
||||||
Description=Cloudflared Tunnel Service
|
Description=Cloudflared Tunnel Service
|
||||||
After=network.target
|
After=network.target
|
||||||
|
|
||||||
[Service]
|
[Service]
|
||||||
ExecStart=$CLOUDFLARED_BIN tunnel --url $LOCAL_ADDR
|
ExecStart=$CLOUDFLARED_BIN tunnel --url $LOCAL_ADDR
|
||||||
Restart=always
|
Restart=always
|
||||||
StandardOutput=append:$LOG_PATH
|
StandardOutput=append:$LOG_PATH
|
||||||
StandardError=append:$LOG_PATH
|
StandardError=append:$LOG_PATH
|
||||||
|
|
||||||
[Install]
|
[Install]
|
||||||
WantedBy=multi-user.target
|
WantedBy=multi-user.target
|
||||||
EOF
|
EOF
|
||||||
@@ -109,10 +101,8 @@ EOF
|
|||||||
sudo systemctl daemon-reload
|
sudo systemctl daemon-reload
|
||||||
sudo systemctl restart cloudflared-tunnel
|
sudo systemctl restart cloudflared-tunnel
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo -e "${GREEN}服务已启动,日志保存在 $LOG_PATH${NC}"
|
echo -e "${GREEN}服务已启动,日志保存在 $LOG_PATH${NC}"
|
||||||
echo -e "${YELLOW}等待 cloudflared 输出访问域名...${NC}"
|
echo -e "${YELLOW}等待 cloudflared 输出访问域名...${NC}"
|
||||||
|
|
||||||
for i in {1..30}; do
|
for i in {1..30}; do
|
||||||
DOMAIN=$(grep -oP 'https://[a-zA-Z0-9-]+\.trycloudflare\.com' "$LOG_PATH" | head -n1)
|
DOMAIN=$(grep -oP 'https://[a-zA-Z0-9-]+\.trycloudflare\.com' "$LOG_PATH" | head -n1)
|
||||||
if [[ -n "$DOMAIN" ]]; then
|
if [[ -n "$DOMAIN" ]]; then
|
||||||
@@ -123,10 +113,8 @@ EOF
|
|||||||
fi
|
fi
|
||||||
sleep 1
|
sleep 1
|
||||||
done
|
done
|
||||||
|
|
||||||
echo -e "${RED}超时未能获取公网访问域名,请稍后手动查看:$LOG_PATH${NC}"
|
echo -e "${RED}超时未能获取公网访问域名,请稍后手动查看:$LOG_PATH${NC}"
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
else
|
else
|
||||||
echo -e "${RED}无效输入,请输入 1 或 2${NC}"
|
echo -e "${RED}无效输入,请输入 1 或 2${NC}"
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
Reference in New Issue
Block a user