本文首发于知乎:大内网战略(1):使用 Tailscale 搭建 VLAN - 知乎

2023.08.30 更新:虽然下文以及本系列其他文章会将使用诸如 Tailscale 等 VPN (虚拟专用网)工具所构建的安全网络称之为 VLAN(虚拟局域网),但是这是不正确的,正确的称呼应该是 VNet(虚拟网络)。以下是来自 AI 生成的解释(仅供参考):

VLAN,VNET和VPN是什么?它们是一个概念吗?

VLAN(Virtual Local Area Network),VNET(Virtual Network),和VPN(Virtual Private Network)是计算机网络中的三个不同的概念,它们有些相似但也有着不同的作用和功能。

VLAN(虚拟局域网): VLAN 是一种将一个物理局域网(LAN)划分成多个逻辑上的虚拟子网的技术。每个 VLAN 都可以拥有自己的网络配置、安全策略和广播域,即使它们在同一个物理网络中。VLAN 的主要目的是增加网络的灵活性、安全性和管理性,以便更好地控制网络流量和组织网络设备。

VNET(虚拟网络): VNET 是在云计算环境中使用的概念,特别是在公共云服务提供商(如 Microsoft Azure、Amazon Web Services 等)中。VNET 是一种将云中的资源(虚拟机、存储、数据库等)组织在一个逻辑网络中的方式。通过创建 VNET,您可以为云中的资源定义网络拓扑、子网、路由规则等,以实现更好的网络隔离和管理。

VPN(虚拟私有网络): VPN 是一种通过公共网络(通常是互联网)建立安全连接的技术,用于在不安全的网络上创建加密的私有通信通道。VPN 允许远程用户或远程办公地点与公司内部网络建立安全连接,就好像它们直接连接到了内部网络一样。VPN 可以用于保护数据传输的隐私和安全,使远程访问变得更加安全可靠。

虽然这三个概念都涉及虚拟化和网络隔离,但它们具有不同的用途和适用场景。VLAN 主要用于物理局域网内的划分和管理,VNET 用于云环境中的资源组织和管理,而 VPN 则用于建立安全的远程连接。

tailscale,zerotier等应该属于哪个概念?

Tailscale 和 ZeroTier 都属于 VPN(Virtual Private Network)的概念,尤其是它们是现代化的、基于软件的 VPN 解决方案,用于在互联网上建立安全的虚拟网络连接。

我如果使用Tailscale,将许多不同地域的设备连接起来,这些设备组成的专用网络是算作VLAN还是VNET?

使用 Tailscale 将不同地域的设备连接起来时,这些设备组成的虚拟网络被称为 VNET(Virtual Network),而不是 VLAN(Virtual Local Area Network)。

VLAN 通常是在局域网内部划分的逻辑子网,用于在物理网络上实现逻辑隔离和管理。它通常限于一个物理地理位置,例如在同一办公室或数据中心内的不同部门之间。

VNET 则是一个更通用的概念,特别是在云计算和分布式网络环境中。它是一种通过软件方式创建的虚拟网络,可以跨越多个物理地域、数据中心和云提供商,将不同地区的设备连接在一起。Tailscale 正是一个用于创建这种跨地域虚拟网络的工具,使不同地理位置的设备能够通过加密通道安全地相互通信,就像它们在同一个网络中一样。

因此,如果您使用 Tailscale 将不同地域的设备连接起来,您将创建一个跨地域的虚拟网络,这个概念更接近于 VNET 而不是传统的 VLAN。

正文不作修改,请自行替换词语。

写在前面的警告

虽然理论上 Tailscale 组 VLAN 是非常安全的,链路上的数据都是加密的,但是由于是商业软件,未完全开源且控制服务器和中继服务器均由 Tailscale 私人运营,因此如果内网有极高的安全性与保密要求,慎重考虑使用 Tailscale 组 VLAN。

当然,Tailscale 有第三方开源的自托管解决方案 Headscale:GitHub - juanfont/headscale: An open source, self-hosted implementation of the Tailscale control server 。因为 Headscale 部署较为复杂且需要自行配置服务器,本专栏不会涉及,有需求自行搜索相关文档。

为什么需要 VLAN

众所周知,一般普通内网/局域网在外面是访问不了的。如果有一些需求,比如想在外网远程控制电脑、远程传文件之类的,就需要想办法在外网也能访问内网的设备,也就是内网穿透。常用的有以下方法:

FRP 反向代理

https://github.com/fatedier/frp

如果有一个带公网ip的服务器,可以把内网设备的端口暴露出来。这是我以前一直使用的方法。

优点

  • 操作方便
  • 访问端不需要安装任何软件
  • 完全开源,完全可控

缺点

  • 内网设备直接暴露到公网有安全风险(据说RDP暴露在公网容易中勒索病毒)
  • 端口要提前自定义映射,使用起来不方便(比如我新建一个服务用了12345端口,我得设置端口映射,然后使用服务器的端口来访问)

VPN

没用过,跳过。

VLAN

就是把设备拉到一个虚拟的局域网中,组成大内网。这里使用 Tailscale,此外类似应用还有 Zerotier 等。

优点

  • 无安全风险(不暴露到公网上,链路也是加密的)
  • 无需自定义端口映射,用起来就和真的局域网一样

缺点

  • 这玩意不是完全开源的(有开源的第三方实现 HeadScale)
  • 众所周知的原因,中国大陆没有中继服务器,所以延迟会emmmm(如果有公网ip,可以自己设立私有的国内中继服务器)
  • 后台要跑着软件。此外,安卓设备上 Tailscale 和梯子是不能一起开的,会互相挤下线。

安装之前的准备

把你的 Windows 设备的电脑名改成容易记住的名字(默认的 DESKTOP-XXXXXX 不是人记的),然后重启。

为什么要这么做呢?访问共享文件夹的时候可以通过计算机名字在真内网和VLAN中都能访问。要不然,真内网一个IP,大内网一个IP,访问共享文件夹很不方便。

然后就是注册一个 Tailscale 账号。https://login.tailscale.com/login

对于有公网 IP 的服务器来说,安全面板和防火墙放行 UDP 41641 端口可以帮助服务器间通过公网 IP 直连(而不是走中继)。详见:What firewall ports should I open to use Tailscale?

安装

首页上方点击下载。

按照自己的需求下载对应的客户端,并且按照页面的指示安装和授权。

安装并授权完成后,就连接上了 VLAN:

Windows 的托盘图标

建议开启选项 “Run unattended”,可以开机后即使未登录到用户也能连接到大内网。如果你的电脑是多用户,而且不想别的用户使用自己的大内网,那就不要开启这个选项。

手机和 linux 都可以按照官网来安装。

当你的设备都连接上 Tailscale VLAN 后,你就可以在 Admin Console 管理自己的设备了。

这里建议点一下“Disable key expiry”,以后设备授权就不会自动过期。

已知问题

在阿里云国内的云服务器上,因为阿里云使用了保留的 100.64.0.0/10 地址,和 tailscale 的 iptables 规则冲突,开启 tailscale 会导致无法安装包。因此,需要 sudo tailscale down 关闭,安装完软件后再 sudo tailscale up 。

详细请见:

Tailscale 与阿里云八字不合的解决方法(1) – Eterance的小窝

Tailscale 与阿里云八字不合的解决方法(2) – Eterance的小窝

内网域名解析

2023.09.12更新

可以购买域名之后,在 Cloudflare 新建指向 tailscale ip 的解析(不要开启小黄云)。

CF 会自动识别这是指向保留地址的解析

虽然在公共 DNS 上建立解析会让全世界都能看到你的 tailscale ip,但是因为这是内网(就像 192.168.x.x),没有安装 tailscale 并加入你的帐户的人就算知道解析也不能从外网访问,所以应该还是很安全的。

这样就可以在内网使用域名访问,适合自定义域名、建立内网网站甚至 nginx 反代之类的。

只有在你的大内网才能访问的网站

为了更加保险,nginx 可以设置只监听 tailscale 虚拟网卡:

卸载

Uninstalling Tailscale

自建中继服务器

凉拖捞佬Pro:大内网战略(6):自建 Tailscale DERP 中继服务器 保姆级教程