应用Twingate进行内网穿透和异地组网

twingate.com
科学上网,点对点零信任链接。
转自:https://appscross.com/2023/08/deploy-twingate-ztna-solution/

Twingate是一个尚在推广期、可免费应用部署的零信任架构(ZTA,Zero Trust Architecture)网络解决方案,比较新,很多人了解的不多。Twingate一类的ZTA解决方案用例很广,涵盖内网穿透、异地组网、办公内网构建、点对点访问、安全防护、网络加速等,老E看来,结构简约、轻便灵活是其最大的特点,与Tailscale/Headscale等相比,Twingate更轻,更强调零信任基础上的身份验证和点对点连接而非中央控制。默认情况下,Twingate允许用户与受保护的资源建立对等连接,而无需任何开放的入站端口,不需要对现有客户进行任何额外部署,并且对最终用户和管理员完全透明。

1.Twingate结构
和不少ZTA解决方案一样,Twingate使用了分离组件构筑整个ZTA网络,由控制器、连接器、客户端和中继器组成。

控制器
控制器是Twingate的中央协调组件。它是一个多租户组件,通过管理控制台存储配置更改,注册连接器,并向发出连接请求的客户端颁发签名授权以及其他职责。控制器由Twingate建设并提供管理界面,租户可配置,其核心功能是集中管理、身份验证、访问控制。

客户端
Twingate客户端主要用于对私有资源请求的组合身份验证和授权代理。客户端的功能主要包括身份验证处理、访问控制、名称解析、隧道建立和流量代理等。

连接器
很明确,Twingate将连接器定义为客户端的镜像组件,额外具有一些更简单的职责,包括连接控制器与中继器、完整性验证、本地名称解析。

中继器
中继器在Twingate架构中负责中转传输数据和流量。Twingate始终尝试在客户端和连接器之间建立对等连接,以提供对资源的低延迟访问,Twingate中继连接被设定为仅作为备份方法。

2.部署概述
Twingate易于上手,对于常用的部署方式、平台对进行了充分的支持,在需要使用命令行的平台(如Linux)上的部署都会生成命令行供拷贝、粘贴使用,大大降低了ZTNA部署、应用门槛。以某网络NetworkA为例,部署Twingate可归纳为以下5个步骤:

创建NetworkA远程网络(无论是否本地,对于Twingate组网而言都是远程网络)
创建NetworkA远程网络的连接器
在NetworkA网络内计划部署为连接器的节点上运行Twingate生成的代码(安装、注册系统服务、连接自动完成)
创建NetworkA的资源并配置访问控制规则
安装客户端并访问NetworkA的资源
3.部署过程
3.1 注册试用
注册账户才能试用,默认Trial期是14天,可以试用商业版本的若干功能,不过除了用户数差异老E貌似没发现其他高级功能。Trail期间支持5用户,每用户5个设备,核心就这些。
https://appscross.com/wp-content/uploads/2023/08/signin.png
“Sign in”或者“Try twingate for free”随便哪个入口点进去,选一个自己好用的邮箱登录,推荐额外配置的outlook。按照提示一步步完成即可,过程中需要选择或填写的内容没有什么特定要求,例如公司规模,选1000人以上和小于100人不会有什么后效区别。

3.2 创建网络
账户注册完成后,自动跳转到网络主页。单击“Add a Remote Network”已添加网络。
https://appscross.com/wp-content/uploads/2023/08/add-network-pre.png

打开后,选择远程网络位置/类型,默认的几家云服务提供商都已列入,查询文档可知,Twingate与这几家都建立了密切的合作关系,在开通AWS EC2实例的时候,是可以搜索选择Twingate社区AMI版本镜像的,其中已经自带了Twingate连接器组件。这里选择Other”即可,其他的可以自行尝试。同时,给创建的远程网络确定个标识名。
https://appscross.com/wp-content/uploads/2023/08/add-network-300x249.png

之后点击“Add Remote Network”,远程网络创建、添加完成。

3.3 创建并部署连接器
一个网络至少可以部署一个连接器,以作为冗余备份。连接器需要保持和控制器、中继器(Relay)的连接,控制器、中继器(Relay)是由Twingate建设并供租户/用户使用,无法自托管。

远程网络就创建、添加完成后会自动跳转到网络面板,可以看到默认Twingate会为我们创建两个空的连接器,可删可改。为了避免有多余、无用的连接器,可以选择一个进行编辑修改,比如改为与远程网络名称相匹配的名称,便于识别。
https://appscross.com/wp-content/uploads/2023/08/rename-conn-768x449.png

点开编辑、修改的连接器(net1-connector),打开连接器配置面板。Twingate官方将连接器的配置部署分成了5个步骤,非常易于理解和上手。
https://appscross.com/wp-content/uploads/2023/08/deploy-conn.png

在这里,第一步的部署方法选择10项可选,默认是docker,也是官方为了追求最大的兼容性和支持度。这里可以自行选择,无论什么方法都会在第四步给出具体的命令行或其他操作内容。选择Linux后,进入第二步,生成Token。OAuth验证Token流,Access Token、Refresh Token都会由系统生成,当然,需要登录授权。
https://appscross.com/wp-content/uploads/2023/08/token-768x346.png

Token生成后,直接拷贝第四步由系统生成的命令行,粘贴到计划部署为连接器的主机上运行。粘贴、运行过程本文略过。

【注:复制代码安装前先跟新系统,apt update或yum update 如控制器没有连接上重启服务器即可。】

https://appscross.com/wp-content/uploads/2023/08/copy.png

主机运行粘贴的指令后,会自动安装连接器组件、创建由systemd守护的系统服务、自动启动并连接控制器、中继器。在Twingate管理版面可以实时查看连接器状态。尽管中继转发只是作为备份手段,但连接器仍然需要保持和中继器的连接,目前来看,Twingate可以实现秒连。
https://appscross.com/wp-content/uploads/2023/08/conn-status-1-1024x328.png

3.4 创建资源
在网络(Network)面板,点击“Create Resource”创建资源及定义访问控制规则。需要选择、确定远程网络、名称标识、资源内容。已有的远程网络在左上角选择后,定义资源名称,再配置资源内容和访问控制规则。
https://appscross.com/wp-content/uploads/2023/08/res-768x369.png

资源内容配置上,Twingate也体现了易于上手的特点,没有什么艰涩的专有名词。灵活度上,支持IP、FQDN、网段等多种方式,可以设定别名(Alias)和端口(Ports),默认是所有端口都允许(Allow)。配置好后点击“Create Resource”,在访问控制策略对话面板中对用户、组对资源的访问权限进行自定义,这里直接采用默认的Everyone均可访问。点击“Add Group”完成资源和访问控制规则的配置。
https://appscross.com/wp-content/uploads/2023/08/acl.png

3.5 安装配置客户端
Twingate客户端下载地址如下:

https://www.twingate.com/download

官方支持的客户端基本囊括了所有主流平台,Linux分支基本也都可以适配Linux版本的客户端。
https://appscross.com/wp-content/uploads/2023/08/download-768x184.png

Windows下,因为TAP接口的安装,需要重启。重启后Twingate自动加载启动,登陆验证。验证完成后,可以在任务栏打开Twingate,连接正常的情况下,网络、资源、访问控制规则等会列出,也可以点击“Open in Admin Console…”打开对应的浏览器管理面板,进行配置和管理。
https://appscross.com/wp-content/uploads/2023/08/%E5%AE%A2%E6%88%B7%E7%AB%AF.png

3.6 重复与访问控制
3.2-3.4是针对一个网络(无论是远程公网还是本地私网)的配置,要配置另一个网络,纳入“大内网”,就是对3.2-3.4部署工作的重复和轮回,没有什么额外需要注意的。Twingate目前还算鲁棒,有问题删除重来,不会对账户和基础网络产生破坏性影响。真正有必要尝试的是访问控制和身份验证。访问控制之前已经说明,对整个网段的支持确实可以简化大量配置工作,但在业务环境下也会带来不小的访问控制压力。家宽用户,是可以直接使用内网网段来定义访问控制规则的。

集成身份验证支持的也比较丰富,Google workspace、Azure AD、Onelogin等等,ZTNA解决方案基本上也都支持上述这些Vendor的集成验证。如果考虑名称管理,可能Azure AD更加适合,Azure官方也相应文档阐述指引。

4.其他
要保障一次部署成功,需要注意几点:

客户端版本保持最新,官方更新很快;
连接器主机的出站流量需要放行443、30000-31000端口,注意是出站,一般不会有问题;
不要使用其他TAP设备或驱动,官方发布过已知的冲突;
不能把私网IP搞混了。
可能是目前用户规模不大,Twingate的隧穿成功率很高,部署后实时在线,资源访问响应速度也很快,但速度和正常的代理还是无法相提并论,基本上是半速运行。对于Twingate的底层工作原理,了解几个关键字即可,分别是分割隧道、TAP、QUIC、TUN、“名称”解析。TAP接口是Twingate工作的基础,客户端和连接器、控制器都会参与“名称”解析,Twingate支持借助Azure AD维护名称空间,解析后连接,连接失败会自动切换为TUN模式以保障成功率,协议上官方明确是基于QUIC,采用了分割隧道对流量进行安全保护。零信任解决方案,是不能进行本地分流的,这是基本常识,分流了就不是ZTNA了。所以,如何分流让本地访问bypass连接器是个愚蠢的问题,还是要先考虑下什么是零信任,而TAP又是个二层设备,无论如何都会前置拦截。同时,不可否认,很多软件和解决方案都非常优秀,但言必称Tailscale/Headscale、Cloudflare Access、Wirguard、WARP,有自己的应用偏好很正常,但非要挑挑毛病,就属于卖弄无知了,简中世界的互联网认知也就这样吧。