Administrator
发布于 2025-10-22 / 40 阅读
0
1

immortalwrt安装配置cloudflared

前言

之前本站通过caddy直接暴露内网服务,优点是访问速度很快,缺点是在纯IPv4环境中完全无法访问。为了解决访问性问题,索性用cloudflared tunnel进行了代理。

安装

opkg update
opkg install luci-i18n-cloudflared-zh-cn

opkg会自动安装好luci-app-cloudflared及相关依赖。

配置

基本操作可以参考Cloudflare Argo Tunnel 小试:我终于可以用树莓派做网站啦,本文只讲在immoralwrt上的一些额外配置。

直接执行 clouflared 命令登录以及创建tunnel产生的 cert.pem[uuid].json 文件位于 ~/.cloudflared 目录中,但是luci-app-cloudflared的默认配置文件目录为 /etc/cloudflared,你可以将它们复制过来,建立符号链接,或者干脆修改路径。我是将两个文件复制了过来:

root@ImmortalWrt:~# uci show cloudflared
cloudflared.config=cloudflared
cloudflared.config.enabled='1'
cloudflared.config.config='/etc/cloudflared/config.yml'
cloudflared.config.origincert='/etc/cloudflared/cert.pem'
cloudflared.config.protocol='http2'
cloudflared.config.loglevel='info'
cloudflared.config.logfile='/var/log/cloudflared.log'

配置文件内容如下:

root@ImmortalWrt:~# cat /etc/cloudflared/config.yml
tunnel: XXXXXXXXXXXXXXXXXX
credentials-file: /etc/cloudflared/XXXXXXXXXXXXXXXXXX.json
#
ingress:
  - hostname: blog.tccmu.com
    service: http://10.89.2.1:8001
  - service: http_status:404

一个隧道里可以配置多个反代服务,假设我又搭建了一个聊天服务器,内网地址 http://10.89.2.5:6000,想用 chat.tccmu.com 访问,那么上面配置文件就这么修改:

root@ImmortalWrt:~# cat /etc/cloudflared/config.yml
tunnel: XXXXXXXXXXXXXXXXXX
credentials-file: /etc/cloudflared/XXXXXXXXXXXXXXXXXX.json
# 强制连接 Cloudflare 的 IPv6 节点,若没有IPv6环境请删掉下面一行
edge-ip-version: "6"
#
ingress:
  - hostname: blog.tccmu.com
    service: http://10.89.2.1:8001
  - hostname: chat.tccmu.com
    service: http://10.89.2.5:6000
  - service: http_status:404

blog.tccmu.com 和 chat.tccmu.com 的DNS记录都要通过CNAME指向 XXXXXXXXXXXXXXXXXX.cfargotunnel.com并打开proxy,最后启动服务即可:

service cloudflared enable
service cloudflared start

上面的一堆XXXXXXXXXXXXXXXXXX就是json的文件名,你也可以使用 cloudflared tunnel list命令查看,对应列出的ID值。

加速内网访问

使用cloudflared tunnel之前,本站通过caddy直接反代 http://10.89.2.1:8001 实现访问。现在我们让cloudflared tunnel反代了 http://10.89.2.1:8001 ,caddy对应配置无法并存,不过可以通过额外开放端口方式实现两全其美。

本站运行在podman容器中,只需要修改compose.yaml文件,增加端口映射,然后重新创建容器即可:

version: "3"

services:
  halo:
    image: registry.fit2cloud.com/halo/halo:2.21
    restart: on-failure:3
    volumes:
      - ./halo2:/root/.halo2
    ports:
      - "8001:8090"
      - "8002:8090"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 30s
    environment:
      # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
      - JVM_OPTS=-Xmx256m -Xms256m
    command:
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=https://blog.tccmu.com

这样宿主机的8001、8002端口都可访问到halo容器的8090端口,分别分配给cloudflared tunnel和caddy实现同时反代。podman命令也简单列出供参考:

# cd 进入 compose.yaml 目录,然后执行后续命令
podman compose down
# 修改 compose.yaml 并保存,然后执行后续命令
podman compose up -d

dnsmasq配置也需要修改。我所在的网络为IPv4/IPv6双栈且IPv6优先,所以需要在immortalwrt的 DHCP/DNS - 常规 页面中,将 blog.tccmu.com 解析到immortalwrt 的 IPv4与IPv6 地址。IPv4地址解析之前已经讲过,IPv6配置方式相同,用 fd开头的内网地址或者br-lan的公网IPv6地址都可以。这样配置后,在外面通过cloudflared tunnel访问,在家还是通过caddy反代直连。

image-rlUc.png


评论