IPv6 的服务器通过 Cloudflare Tunnel 接入公网的详细步骤

以下是将仅支持 IPv6 的服务器通过 Cloudflare Tunnel 接入公网的详细步骤,结合知识库中的信息整理而成:


部署前提条件

  1. 服务器具备公网 IPv6 地址

    • 确认服务器已获得公网 IPv6 地址(可通过https://ipv6.seeip.org/ 验证)。
    • 确保服务器防火墙允许 IPv6 流量。
  2. Cloudflare 帐号与域名

    • 已在 Cloudflare 注册并绑定需要解析的域名。

步骤1:配置 Cloudflare 基础信息

1.1 将域名托管到 Cloudflare

  1. 登录 Cloudflare 控制台,点击Add a Site,输入域名并选择Free plan
  2. 完成域名的 DNS 解析配置(Cloudflare 会自动生成新的 NameServers)。
  3. 在域名注册商后台将 NameServers 更改为 Cloudflare 提供的列表。

1.2 创建 Cloudflare Zero Trust

  1. 进入Zero Trust页面,选择Create a Zero Trust network
  2. 选择Free plan(免费计划),无需绑定信用卡(可跳过)。
  3. 完成 Zero Trust 网络的创建。

步骤2:创建并配置 Cloudflare Tunnel

2.1 创建 Tunnel

  1. 在 Zero Trust 的Tunnels页面,点击Add Tunnel
  2. 输入 Tunnel 名称(如ipv6-service),点击Save
  3. 复制生成的Tunnel IDToken(后续配置需要)。

2.2 下载并安装 Cloudflared 客户端

方式1:使用 Docker(推荐)

1
2
3
4
5
6
7
8
9
# 创建配置目录
mkdir -p ~/.cloudflared

# 启动 Cloudflared 容器(替换以下参数)
docker run -d \
--name cloudflared \
--restart=unless-stopped \
-v ~/.cloudflared:/root/.cloudflared \
cloudflare/cloudflared:latest tunnel --no-autoupdate run --token <YOUR_TOKEN>

方式2:手动安装(非Docker)

1
2
3
4
5
6
7
# 下载对应架构的 Cloudflared(以 Linux x64 为例)
curl -L --output cloudflared.deb https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64.deb
sudo dpkg -i cloudflared.deb

# 配置 Tunnel(需替换 <TUNNEL_ID> 和 <TOKEN>)
cloudflared tunnel login --token <YOUR_TOKEN>
cloudflared tunnel create <TUNNEL_ID>

步骤3:配置 Tunnel 的路由规则

3.1 创建配置文件config.yml

1
2
3
4
5
6
7
tunnel: <TUNNEL_ID>       # 替换为你的 Tunnel ID
credentials-file: /root/.cloudflared/<TUNNEL_ID>.json # 客户端凭证路径

ingress:
- hostname: service.yourdomain.com # 需要访问的子域名
service: http://[内网IPv6地址]:端口 # 格式:http://[IPv6]:port(如 http://[2001:db8::1]:80)
- service: http_status:404 # 未匹配的请求返回404

3.2 配置 DNS 记录

  1. 在 Cloudflare 的DNS页面,添加一条CNAME 记录

    • 名称:service(对应子域名service.yourdomain.com)。
    • 类型:CNAME。
    • 内容..cloudflareaccess.com(如ipv6-service.tunnel.dog.cloudflareaccess.com)。
    • 代理状态:开启(小黄云)。
      CNAME记录示例https://example.com/cname-record.png

步骤4:启动 Cloudflared 并验证

4.1 启动服务

1
2
3
4
5
# Docker 方式
docker start cloudflared

# 手动安装方式
cloudflared tunnel --config /path/to/config.yml run

4.2 验证 Tunnel 状态

  1. 访问https://..cloudflareaccess.com(替换为实际地址),确保能访问到内网服务。
  2. 通过域名访问:https://service.yourdomain.com(Cloudflare 会自动处理 HTTPS 证书)。

IPv6 特别配置

1. 确保服务监听 IPv6

  • 确保你的服务(如 Nginx、LobeChat)监听 IPv6 地址:: 或特定 IPv6 地址:

    1
    2
    3
    4
    5
    6
    7
    # Nginx 示例
    server {
    listen [::]:80;
    listen [::]:443 ssl;
    server_name service.yourdomain.com;
    # ...其他配置...
    }

2. 防火墙设置

  • 开放服务器防火墙的 IPv6 端口(如 HTTP/80、HTTPS/443):

    1
    2
    sudo ufw allow from any to any proto tcp port 80
    sudo ufw allow from any to any proto tcp port 443

常见问题解决

Q1: 访问提示“522 Connection Timed Out”

  • 原因:服务未正确监听 IPv6 或防火墙阻断。

  • 解决

    • 检查服务是否监听 IPv6 地址(如netstat -tuln | grep :::80)。
    • 确保防火墙允许 IPv6 流量。

Q2: 无法通过域名访问

  • 原因:DNS 记录未正确配置或缓存未刷新。

  • 解决

    • 确认 CNAME 记录的Proxy Status为开启(小黄云)。
    • 清除 DNS 缓存(如sudo systemd-resolve –flush-caches)。

Q3: Cloudflared 无法启动

  • 原因:配置文件路径或权限错误。

  • 解决

    • 确保config.yml 路径正确且可读。
    • 检查credentials-file 是否指向正确的 JSON 凭据文件。

进阶配置

1. 添加访问验证(可选)

  • 在 Cloudflare Zero Trust 中配置Application,要求用户通过邮箱或密码验证后访问。

    • 参考知识库[5]的步骤,设置验证策略。

2. 动态 IPv6 地址更新(可选)

  • 如果服务器的 IPv6 地址动态变化,需配置DDNS

    • 使用 Cloudflare API 脚本自动更新 Tunnel 的 IPv6 地址(参考知识库[1]的动态 DNS 脚本)。

总结

通过以上步骤,你可以将仅支持 IPv6 的服务器通过 Cloudflare Tunnel 安全地暴露到公网,实现以下优势:

  • 无需公网 IPv4 地址:完全依赖 IPv6 进行穿透。
  • 自动 HTTPS:Cloudflare 自动签发 SSL 证书。
  • 高安全性:无需开放服务器防火墙端口,流量加密传输。