使用 Cloudflare Tunnel 实现内网穿透

目录
  1. 域名
  2. Tunnel
  3. Access

域名

使用 Cloudflare Tunnel 必须先有一个自己的域名,最近又机缘巧合地发现 Spaceship1 .xyz 的数字域名续费 10 年不到 50RMB,买个域名拿来做内网穿透再好不过。

在 Spaceship 购买域名之后,需要先在 Cloudflare 注册,将域名的 DNS 服务器改为 Cloudflare,具体的流程如下:

  • Cloudflare 账户主页:添加域 > 输入域名 > 快速扫描 DNS 记录 > 选择 Free 计划 > 记录 Cloudflare DNS 服务器地址

    ulla.ns.cloudflare.com
    ernest.ns.cloudflare.com
  • Spaceship: 域管理器 > 名称服务器 > 自定义名称服务器

因为在 60 天内注册的域名暂时还不能转移到 Cloudflare,可以等 60 天后将域名转移到 Cloudflare,就彻底不再需要 Spaceship 了。

Tunnel

Zero Trust > 网络 > Tunnels 创建隧道,选择通过 Docker 创建,记住 token 完善 compose 文件。

services:
  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: cloudflare_tunnel
    command: tunnel --no-autoupdate run --token ${your token}
    restart: always
    network_mode: host

docker compose up -d运行成功后,添加公共主机名设置内网映射。

# 设置路由器地址映射
router.<domain>.xyz > http://192.168.6.1

# 设置 Home Assistant 地址映射
homeassistant.<domain>.xyz > http://192.168.6.123:8123

# 设置 SSH 地址映射
terminal.<domain>.xyz > http://192.168.6.1:22

# 设置远程桌面
pc.<domain>.xyz > http://192.168.6.1:3389

TIP

SSH 连接需要连接设备安装 cloudflared, 或者后面设置 Access,通过网页连接

TIP

设置 Home Assistant 之后,访问遇到 501 的错误,查看 Home Assistant 日志发现错误 “A request from a reverse proxy was received from 192.168.6.123, but your HTTP integration is not set-up for reverse proxies” 需要 在 Home Assistant configuration.yaml 文件中配置

http:
 use_x_forwarded_for: true
 trusted_proxies:
   - 192.168.6.123

Access

尽管 Cloudflare 可以保证暴露出的内网地址的隐私性,但是无法保证内网信息的安全性,对于路由器等不适合公开的地址还是要使用 Access 加一层保护。
Access 可以在访问域名页面前加一层 Cloudflare 的身份验证,你可以设置允许的邮箱登录或者其他第三方登录,只有登录者通过了 Access 的验证才能访问内网。

Access > 应用程序 > 添加应用程序 > 自托管 > 添加公共主机名 > 创建策略,创建策略时,选择 Emails,添加允许的邮箱地址,在登录 Access 时只有这些邮箱地址可以收到 Cloudflare 的邮箱验证码。除了 Emails 还有其他一些规则,部分规则只有需要设置第三方登录选择之后才有作用。

TIP

对于 SSH 连接,可以设置网页的方式访问,为 SSH 访问方式单独创建一个应用程序,添加需要 SSH 访问的域名地址,在高级设置 > 浏览器呈现方式,选择 SSH。设置成功后,在浏览器访问域名地址并且通过 Access 后,会提示输入用户名/密码,之后即可正常访问。

  1. 启动您的网站、想法和未来 - Spaceship