内网穿透新技能 - Cloudflare Zero Trust
对于家里有 NAS,需要经常从外部访问的朋友来说,内网穿透是一个必备的功能了。但是 IPv4 地址现在已经很难申请了,除去使用公网 IP 配合 DDNS 这种最佳的方案以外,还有不少的替代方案可以选择。
之前我就介绍了使用 WireGuard,Zerotier 等无须公网 IP 的组网方法,今天我们再来介绍一种基于 Cloudflare Zero Trust 的 Tunnels 的内网穿透办法。关于什么是 Cloudflare Zero Trust?可以到 Cloudflare 的 介绍页面 查看。
想要使用 Cloudflare Zero Trust 来实现内网穿透,你需要准备一个域名,并且把域名的 DNS 解析服务托管到 Cloudflare,最好也申请一个 Cloudflare 提供的 HTTPS 证书。关于注册域名以及将域名的 DNS 托管到 Cloudflare,网上有很多现成的教程,我这里就不赘述。关于如何申请 Cloudflare 的 HTTPS 证书,可以看我写的这篇文章:一劳永逸申请有效期长达 15 年的通配域名证书!。下面我直接介绍如何在 Cloudflare 设置 Zero Trust,以及添加二次验证,对你暴露在公网上的服务进行访问验证,增强安全性。
Zero Trust Tunnels
在 Cloudflare 的控制台就有 Zero Trust 的菜单。
点进去之后,左侧的菜单里有个 Tunnels 的选项。
接下来创建 Tunnel(Create a tunnel),意思就是建立一条隧道。一般来讲,只要在局域网中的其中一台设备上建立一条 Tunnel 就够了,通过在 Tunnel 中设置各种服务的路由,就可以访问到局域网中的几乎所有服务。
名称自己填一个就可以,点击 Save tunnel,接下来设置连接。支持各大平台,按需部署即可。以在 Unraid 上面部署为例,使用 Docker 最方便,直接复制 Docker 命令,在 Unraid 的终端里运行即可。
关掉 Unraid 的终端之后,这个 Docker 容器会自动停止,这时在 Unraid 的 Docker 管理器中手动运行,并将自动启动打开。
这时在 tunnel 的设置界面会看到一台新的连接已经建立,状态为 Connected
。
点击下一步(Next),这时就可以配置需要访问的内网服务以及映射域名了。
添加好之后,点击 Save tunnel,就可以访问你设置好的域名了,比如我的是(test.slarker.me),内网的 NAS 是 192.168.2.8:80。直接在浏览器里访问 test.slarker.me,就相当于是在访问内网里的 192.168.2.8:80。每个 tunnel 里可以添加多个 Public hostnames,需要访问内网里的哪个服务,就把哪个服务设置好域名以及内网的映射就可以了。
需要注意的是,因为映射之后,就相当于把自己的内网里的服务暴露在公网上了,自己可以随时随地访问的同时,意味着别人也可以访问。请注意:对你暴露在公网上的服务,务必设置一个强壮的密码!
设置 Access 二次验证
现在我们已经可以从外部访问内网里的设备了,即便我们为每个服务加上了强壮的密码,你可能还是会担心密码遭到了泄露或者暴力破解。这时,你可以利用 Zero Trust 提供的 Access 功能,来为你的服务增加二次验证。
点击 Application 中的 Add an application,选择 Self-hosted。
设置好 Application name,subdomain,选择我们的 Domain,点击 Next。
首先设置策略名称(Policy name),配置规则(Configure rules)这里我们设置的是使用 One-time PIN,也就是一次性的验证码。点击下面的 Add require,Selector 选择Emails,Value 填写自己常用的邮箱。意思就是,访问的时候需要输入自己的邮箱来获取一个一次性的验证码,验证通过之后才允许访问我们的内网服务。这个功能可以很好的保护我们的内网的一些服务。比如我们希望将内网的测速服务映射到公网,但是只允许特定的人员访问,就可以添加特定的邮箱以及验证码来进行访问控制。
最后点击保存(Save policy)就可以了。试试我们添加好的策略,会提示输入邮箱获取验证码。
这里随便输入邮箱是获取不到验证码的,只有输入我们设置好的邮箱才可以。利用这个访问控制策略,就为我们暴露在公网上的服务添加了二次验证。
访问的有效期可以在 Session duration 中设置。