基于Cloudflare提供的Zero Trust实现内网穿透

这里总结两个功能，一个是实现 SSH 连接，一个是实现外网访问 web 服务。

一、前置条件
这里不多说了，你需要有一个自己的域名，并且在 cloudflare 托管的。登录 Cloudflare 后在左侧栏位选择 Zero Trust，定义组名，选择免费套餐。

二、SSH
在 Zero Trust 界面点 Access -> Tunnels -> Creat a tunnel

name 随意

我建议用 docker 安装，方便且易管理。

但是 docker 的命令需要改一下

Copy
docker run -d cloudflare/cloudflared:latest tunnel --protocol auto --no-autoupdate run --token xxxxxxxxx

docker run 后面加一个 -d 挂起运行，省的一关 terminal 服务就停了。tunnel 后面加一个 --protocol auto。在内网服务器运行后，可以 docker ps 查看一下。--token 后面是你当前 tunnel 的专属令牌。

然后回到 zero trust 页面，点击 Next 或者退出后点击刚刚创建的 tunnel，点击 Public Hostname -> Add a public hostname。Subdomain 填写二级域名，Domain 选择顶级域名，Path 留空。Type 选择 SSH，URL 写内网服务器的局域网 IP 地址和 SSH 端口。最后点击 Save hostname。

这时内网服务器端和网页端都已经设置好了，不过我们还需要在客户端配置一下 ssh：

Copy
vim ~/.ssh/config
# 添加
Host *.xxx.xxx
ProxyCommand /opt/homebrew/bin/cloudflared access ssh --hostname %h

上面 xxx.xxx 是你的顶级域名，*. 是为了适配所有二级域名，方便有多个服务器需要内网穿透的情况。

走到现在，你的客户端应该就可以通过你定义的二级域名，成功 ssh 到你的内网服务器了。

三、Web 服务
前面步骤都一样，只是 Type 和 URL 以及端口要按需选择。最后也不需要修改 ssh 配置。