Cloudflare Zerotrust 之 Webssh
参考链接:
使用cloudflare转发ssh端口 - kelley_go - 博客园 (cnblogs.com)
使用 Cloudflare Tunnels 通过 Web SSH 访问服务器 (hellowood.dev)
Linux | systemd详解 | system.service | 参数解析_remainafterexit-CSDN博客
先决条件
必须需要一个 cloudflare 账号,以及开通 cloudflare zero trust
安装cloudflare:Releases · cloudflare/cloudflared (github.com)
配置 Tunnels
Cloudflare 提供两种方式创建隧道:
- 在 zero trust 页面用 web 添加授权
- 在本地服务器(raspberry)上用 config 文件添加
建议采用第一种方法,配置较为直观。本教程只讲述第二种方法
登录cloudflared
先安装cloudflared,然后运行以下命令:
1 |
|
终端会给出一个类似 https://dash.cloudflare.com/argotunnel?callback=https%3A%2F%2Flogin.cloudflareaccess.org%xxxxxxxxxxxxxxxxxxxxxxx 的登陆地址,复制黏贴该地址到浏览器中,然后按照要求登录即可。
如果是有二步验证的,需要登录了以后,再次黏贴该地址,因为二步验证结束后并不会自动跳转到该 cloudflared 验证登录页面。授权的话,每次只能选择一个网站,当然,一个网站也就够用了,我们可以解析很多三级域名。
当然如果需要授权多个网站,授权完成后不要关闭网页!依次点击其他需要授权的域名,进行多次授权。
运行成功的话,会生成 ~/.cloudflared/cert.pem文件。
创建tunnel
创建完以后,会把信息保存到 ~ /.cloudflared
文件夹下,注意不要误删了
cloudflared tunnel create <你的隧道名字>
- 示例:
cloudflared tunnel create xm2
创建域名 CNAME
添加一个域名:
cloudflared tunnel route dns <隧道名字> <域名>
- 示例
cloudflared tunnel route dns xm2 ssh.cngo.us.kg
然后 cloudflare 就会在你的域名下自动生成一个 CNAME,把 ssh.cngo.us.kg 指向 <隧道 UUID>.cfargotunnel.com
以此类推,我们可以如法炮制在面板上添加其他的需要的 CNAME
配置 Config 文件
添加好想要穿透的域名后,我们就可以开始映射了。
1 |
|
注意:最后的 - service: http_status:404 一定要加,这是兜底的规则。还有复制黏贴的时候确保格式没有错误,很可能会发生 mapping error。
最后生效的配置文件位置 /etc/cloudflared/config.yml
配置完以后,可以测试下配置文件是否有问题。
1 |
|
启动隧道
1 |
|
移除已有服务
若以前配置过cloudflared服务,则需要先卸载,同时移除配置文件/etc/cloudflared/config.yml
。
1 |
|
安装cloudflared服务
1 |
|
指定安装config文件,否则可能报错:
Cannot determine default configuration path. No file [config.yml config.yaml] in [~/.cloudflared ~/.cloudflare-warp ~/cloudflare-warp /etc/cloudflared /usr/local/etc/cloudflared]
配置Linux系统服务cloudflared.service
1 |
|
加入如下内容:
1 |
|
然后配置开机自启动,由于chroot容器不支持systemctl,可根据下列链接安装servicectl命令
安卓手机改造服务器——解决chroot下无法使用systemctl - sw-code - 博客园 (cnblogs.com)
1 |
|
创建 SSH 应用
- 创建应用
在 Cloudflare 控制台 > Zero Trust > Access > Applications 选择 Add an application 创建新的应用;应用类型为 Self-hosted
- 配置应用信息
指定应用名称,并为应用配置域名;session 的过期时间可以按需配置
- 指定访问策略
需要配置访问策略,只允许特定的邮箱登陆;如果需要使用其他的认证方式,如 GitHub/Google SSO 等,可以在 Cloudflare 控制台 > Zero Trust > Settings > Authentication > Login Methods 中添加
- 修改应用类型
在 Additional settings 中,将 Browser rendering 的类型改为 SSH;然后选择保存,这样就配置好 SSH 应用了
踩坑经历
通过cloudns配置的域名未添加子域名NS,导致CNAME不生效,一定要确保域名CNAME是生效的