使用 Cloudflare Tunnel 实现内网穿透

建立 Tunnel

  1. Cloudflare Zero Trust 打开 网络 > Tunnels,点击 添加隧道

    image

  2. 选择 Cloudflared,然后为隧道命名。

  3. 安装连接器:

    # 添加 cloudflare gpg 公钥
    curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg | sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
    echo 'deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main' | sudo tee /etc/apt/sources.list.d/cloudflared.list
    
    # 安装 cloudflared
    sudo apt update
    sudo apt install cloudflared
    
  4. 运行连接器:

    sudo cloudflared service install xxxxxxxxxxxxxxxxxxxxx
    
  5. 路由隧道:

    • 添加公共主机名:选择一个你托管在 Cloudflare 的域名,这将是你从公网访问内网服务时使用的域名。
    • 添加服务:比如 http://192.168.1.2:8080,这是你想要访问的内网服务的地址。
  6. 保存隧道。

    现在你已经成功建立了一条 Cloudflare 隧道。可以在本地开一个服务测试网络连通性:

    python -m http.server 8080
    

    如果一切正常,你将能够从 http://app.yourdomain.com:8080 访问到内网机器的文件目录。

SSH

⚠️ 不要将弱密码机器暴露在公网

  1. 建立 SSH Tunnel 的方式和 HTTP 相同,只是添加服务时使用 ssh://192.168.1.2:22

  2. 接下来,编辑 ~/.ssh/config

    Host ssh.example.com
        HostName ssh.example.com
        ProxyCommand cloudflared access ssh -T %h
    
  3. 接下来就可以通过 ssh ssh.example.com 连接你的内网主机了。

参考:Cloudflare tunnel 实现内网穿透 SSH, SMB 和 web: 老旧笔记本第二春 | nanguoyu.com

建立 Application

直接将内网服务暴露到公网是非常危险的。我们需要身份验证功能确保只有正确的人才能访问内网服务。

  1. Cloudflare Zero Trust 打开 Access > 应用程序,点击 添加应用程序

    image

  2. 选择 自托管,然后配置应用程序。

    • 添加公共主机名。选择你刚才创建隧道时使用的主机名。
    • 创建 Access 策略。Access 策略决定了哪些用户有权访问应用程序。可以在 Access 策略中添加一个基于 Email 的规则,以允许我们的邮箱通过认证。
    • 管理登录方法,用户必须使用你设置的登录方法登录。保持默认的 One-time PIN 即可。
    • 其他选项保持默认值,完成配置。
  3. 此时访问 http://app.yourdomain.com:8080,你将会看到身份验证窗口,验证通过后才可以访问内网服务。

    image

    如果你的用户无法通过 Access 策略,你将无法收到验证码。

参考:CloudFlare Tunnel 免费内网穿透的简明教程 | 少数派

posted @ 2025-04-20 23:33  Undefined443  阅读(2599)  评论(0)    收藏  举报