记录一次折腾 Tailscale
记录一次折腾 tailscale,差点裸奔
Tailscale 是什么
Tailscale 是一个开箱即用的VPN服务。
它可以将你的一堆设备,组成一个ipv4是100开头虚拟局域网,并且有自动 DNS 可以将你的设备 hostname 作为访问的目标。
之后在建立连接稳定了之后,会建立点对点连接,没有按流量的计费了,带宽也可以跑慢。
Tailscale 的优势
想象一下存在以下场景:
你有一台服务器放在宿舍里,宿舍的宽带没有公网ip。
你在外面上课,或者在图书馆,你想使用 ssh 连到这台机器上进行操作,抑或是打开你部署的 Open WebUI 和 LLM 对话……
这时候,传统的方法是将 ssh 用 frp 转发到一台有公网ip的机器上,然后再通过这个公网ip访问。
现在你有两个选择:
- 使用 sakurafrp(natfrp) 将22端口转发到一个随机节点的随机端口上,并使 sshd 配置为不允许密码登录而只允许使用 key 访问……
- 使用某些云服务商的VPS,忍受着0.8¥/GB的天价公网ipv4流量,可自选端口转发……
这样都很不优雅,而且要忍受被攻击的风险。
现在,我们可以使用 Tailscale(或者友商Zerotier)。
建立一个虚拟局域网,之后在局域网内自由访问各种你部署的服务,并且不用担心流量计费。
概览
我为了部署麦麦,访问麦机的shell,查看 napcat 的 webui,于是组了 Tailscale 的局域网。
?
在 iOS 设备上,你需要一个非中国大陆地区的 Apple ID 才可以获取到 Tailscale 的客户端,然后 Tailscale 在 iOS 上的连接原理是新建一个VPN profile,这和我们常用的那些小火箭等冲突,也就意味着我们在使用 Tailscale 时候,可能失联。
我使用 Google 登录,登录的时候,需要短暂断开 Tailscale 添加的VPN,然后使用自己的VPN profile才能正确登录。一旦登录之后,就可以继续使用了。
近期事件
我接到了一个单子,用 Django 做一个信息管理系统。这个服务部署在内网,通过直接输ip进行访问。现在到了测试的环节,客户在测试过程中提出了一些要求,于是我需要去改进,却又不能一次又一次往客户公司跑……
于是我在服务器上开了 Tailscale,将客户的服务器也拉进了我的虚拟局域网。远程 debug,重新部署,都非常方便。
之后客户的母公司来了要求,领导也需要登录到系统进行一个视察。
我想,不能给领导的机器装 Tailscale。于是,我使用 natfrp 转发了服务器的 ssh 上了一个免费的节点,建立了一个低权限用户,之后写了个脚本用这个低权限用户登录,启动 ssh local port forwarding,以使用 localhost 查看。领导现在很满意。
?
运行了一天,我发现了问题。
当时偷懒没有给领导生成一个 ssh key,由于我不能再去找领导,所以现在那个低权限用户还是密码登录。然而,密码是一个很简单的常用密码。
我现在有:
- 一个允许密码登录的用户
- 一个低安全性的密码
这会发生什么不言而喻。
虽然这个用户不在 sudoers 里,但是仍然可以使用 su 切换到其他用户,然而那些用户也是低安全性的密码,并且有高的权限。
我倒是不担心我的虚拟局域网中的设备被攻击者通过 ssh 登录,因为全部都是禁止密码登录的,那些苹果设备也是不启动 sshd 的。
所以:
1 |
|
我们直接阻止了非 root 用户执行 su,这样就避免了攻击者使用 su 切换到高权限用户。