使用 Cloudflare Tunnel 搭建内网穿透
不得不说,Cloudflare 真是赛博菩萨,提供的服务又多又好,还可以免费用。
最近需要使用内网穿透,试一试 Cloudflare 的 Tunnel 。
1 | 用户 <---> Cloudflare <--> Cloudflare Tunnel <--> 源服务器(可以位于内网) |
准备
- 需要有一个 Cloudflare 账户
- 需要开通 Zero Trust : 访问 dash.cloudflare.com,点击左侧的 Zero Trust
- 选择免费套餐
- 虽然账单是 0 ,但是还要走一遍支付流程
安装 Cloudflared
Cloudflared 是 Cloudflare 维护的开源项目: Github
Linux 可以直接从 Github - Releases 下载安装文件
1 | curl -L 'https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-amd64' -o /usr/bin/cloudflared |
登陆
1 | root@Debian:/~# cloudflared tunnel login |
在浏览器内访问链接,选择一个项目进行授权。
创建 Tunnel
可以通过网页进行创建
- 访问 Zero Trust 的面板 https://one.dash.cloudflare.com/
- 选择账户
- 点击左侧菜单的 Network > Tunnel
- 点击按钮 Add a tunnel
- 选择 Cloudflared
Name your tunnel
: 设置一个名字Install and run a connector
: 选择系统后,已经提供了对应的命令1
sudo cloudflared service install AAABBBCCC....
然后进入转发设置页面,比如如图是将 mysubdomain.nep.me
转发到 http://192.168.1.10:8888
点击保存即可,查看 Status
正常应该显示为 HEALTHY
。
然后就可以访问设置的域名查看。
设置访问限制
服务暴漏在公网要考虑到安全问题,如果源网站没有安全限制措施,可以使用 Cloudlflare 提供的 One-time PIN ,这是默认添加的,可以在 Settings > Authentication > Login methods 中查看。
然后访问左侧菜单 Access > Applications > Add an application
选择 Self-hosted ,第一步是 Configure application
Application name
设置名称Session Duration
有效持续时间Application domain
需要保护的域名与路径,比如上面设置的mysubdomain.nep.me
其余保持默认即可。
在下一步中,需要设置 Policy,这是用来控制谁可以访问你的应用:
基本设置:
Policy name
: 为策略设置一个名称Action
: 选择 “Allow” 允许符合条件的访问
Configure rules:
- 可以设置多种规则组合
- 常用规则包括:
- Email 域名限制
- IP 地址范围
- 地理位置
认证方式:
- 默认的 One-time PIN 方式最简单
- 访问时需要输入邮箱
- Cloudflare 会发送一次性验证码
- 验证通过后即可访问
完成设置后,当访问相关应用后,会先经过 Cloudflare 的身份验证。
不过这样有些略显麻烦,相较于直接将服务暴露在公网中,还是习惯转发一个代理回到内网使用相应的服务。