利用Tailscale快速部署跳板机安全分享访问

 
  有很多时候,我们希望向他人分享我们的数据或者服务资源,如一些文档、一个文档协作平台、一个SVN仓库。通常最可靠合理的方法是为这些数据或者服务搭建一个向公网暴露的服务站点,并配合防火墙、身份认证、访问控制等手段确保只有我们希望的人能看到这些数据/服务。抑或是在访问者和数据/服务之间拉一条专线,同时在内部做好这些资源和其他不希望被访资源之间的隔离。
  对于长期、大量、访问者众多的情况,或许这是成熟经过长期验证的方式,但是,如果只是少量短期的资源分享,通常不会如此大动干戈。不少人或许会选择简便但是不够安全的方式,例如公共网盘分享文档、防火墙上设置特例开设代理分享服务等方式。
  现如今,人们所热捧的零信任理念,除了能用来应对机构内部横向移动风险、机构内接入的BYOD设备等,本身也是对于Co-Work人员管理很好的方式。
  Tailscale®是一家我个人觉得很Geek的公司在持续开发的产品,将它称之为SDN也好,ZTN也好,新一代VPN也好,总之这个很酷的产品有非常多的使用方式。本文就介绍利用其在(双方总共)十几分钟内,实现快速部署跳板机安全分享资源。

  在本文中,让我们假设Bob希望访问Alice在自己家内网启动的一个服务A(这个服务可能是一个协作平台网站,也可能是一个文档的ftp服务器smba服务器等)。如下图展示,在Alice家的路由器下有Alice的服务器、 数据库等,都处于其路由器管理的内网之下(192.168.1.0/24)。我们的目标是让Bob可以从他家内网直接访问Alice这些设备中的Service A所在设备(192.168.1.33),当然实际控制颗粒度可以结合其他配置做到更细,但鉴于现在虚拟化、容器化技术,这里不妨先假设Alice在192.168.1.33上只有Service A这一个资源。

第一步: Bob注册Tailscale®

  Alice先告诉Bob去注册Tailscale®. Bob可以用Microsoft®,Goolge或GitHub账户进行注册登录,当然Tailscale®也支持其他的一些账号注册,感兴趣的可以自行研究。

  完成注册后,Bob可以根据引导介绍在其设备上安装Tailscale®的客户端将其访问设备连入他个人的Tailscale®网络。

  Bob也可以选择之后按照下载页面的介绍再添加以及其他更多自己的设备。

第二步: Bob为跳板机生成授权密钥(AuthKey)

  Bob在Tailscale®设置(Settings)标签页面下生成授权密钥,并将该生成密钥提供给Alice用于稍后将跳板机添加入Bob的Tailscale®网络。
  (这里用“Ephemeral Key”应该就可以,用“Reusable Key”也行,实际上Bob可以随时在页面吊销密钥,所以问题并不大)。
  在点击生成按钮后,会弹出刚产生的密钥,一定记得在点Done按钮之前将它复制下来,否则之后就看不到了。

第三步: Alice使用Docker创建跳板机

  Alice在其准备跑跳板机的系统中执行下面命令(要求安装有Docker的amd64 Linux宿主机)。记得将命令中的“tskey-xxxxxxxx”用上一步中Bob提供的密钥替换。另外,服务器名称(将显示在Bob的Tailscale®控制台页面上)和跳转机用来访问的目标(即此例中的Service A)也要按照自己的实际需求替换。需要注意,从执行命令的宿主机要能够访问到Service A(即JUMP_TARGET)。

docker run -itd --privileged --restart always --name jumpserver_for_bob -e TS_AUTHKEY="tskey-xxxxxxxx" -e SERVER_NAME="alice-service-A" -e JUMP_TARGET="192.168.1.33/32" gps949/tailscale_jumpserver:latest 

  在容器运行起来之后,Bob应该可以在他的Tailscale®管理员控制台页面上看到这个跳板机出现。

  Bob在控制台页面上按照上面截图上的步骤操作(如果Bob访问Alice这个资源不会超过90天,可以省略图中的第2步)。
  在图中第3步后,点击开关开启全部的子网路由规则(subnet)。

第四步: Bob现在可以通过这个Tailscale®跳板访问机Alice的服务了!

  Bob如果在前面第二步中没有安装客户端,那么在访问前需要进行安装并使用客户端登录。
  Bob需要如下图确保它已经登录Tailscale®客户端,并启用了subnet。

本篇相关GitHub Repo