文章

备选的虚拟局域网方案

备选的虚拟局域网方案

笔者之前使用的虚拟局域网方案 tailscale 最近被南京大学 ITSC 查水表了,收到一份漏洞通报。笔者在第一时间关闭了 tailscale,并寻找替代方案。现在使用的 Easytier 几乎能满足笔者的需求,并已经稳定使用近半年。

漏洞通报详情

笔者收到的漏洞通报为境外 IPv6 发起的连接,经查询该 IPv6 属于 tailscale 的中继服务。结合 LUG 群其他群友的信息推测,尽管 ITSC 正确识别了该漏洞属于 tialscale,但并不是通过流量特征这种手段,而是通过 DNS 或类似方法。使用自建中继的部分群友并未受到打击。

笔者推测,ITSC 只会对高风险 IP 告警,因此如果使用国内服务器自建中继应该能完全避免此类事件,但笔者除虚拟局域网外并无其他的公网服务器需求,因此优先考虑其他替代方案。

失败的尝试:禁用中继

既然境外中继会触发告警,tailscale 又没有国内中继,那禁用中继是否可行?很遗憾,禁用 tailscale 的全部中继服务器后,这个个设备会不可见——tailscale没有对中继服务器和控制平面解耦,想要使用 tailscale 至少需要一个官方或自建中继服务器。

Easytier

经过深度调研,笔者发现了几乎可以满足所有需求的开源软件 Easytier:控制平面相对独立、有国内的公益中继服务器。唯二的缺点是配置金额使用不够傻瓜,以及不完善的多人协同支持。

Easytier 有完善的多平台支持,笔者的软路由、Windows 和 MacOS PC、安卓手机上均可以成功配置并正常使用。Easytier同时提供 Web 控制台托管服务,但由于无法配置公网 IP 的路由规则,笔者并没有使用这项服务。

Easytier 提供了易用的配置助手用户手册,多台设备只需配置相同的 network-name 和 network-secret (并配置相同的控制服务器)即可加入同一网络,并可以根据文档进一步配置子网路由、出口节点。这里提供笔者的配置文件参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
hostname = "NanoPi"
instance_name = "****"
instance_id = "*******"
ipv4 = "100.100.1.1/16"
dhcp = false
listeners = [
    "tcp://0.0.0.0:11010",
    "udp://0.0.0.0:11010",
    "wg://0.0.0.0:11011",
]

[network_identity]
network_name = "*****"
network_secret = "******"

[[peer]]
uri = "tcp://{public server}:11010"

[[proxy_network]]
cidr = "114.212.***.***"

[[proxy_network]]
cidr = "114.212.***.***"

[[proxy_network]]
cidr = "192.168.1.0/24"

[flags]
private_mode = true
enable_exit_node = true
proxy_forward_by_system = true

其中 [peer] 为公网控制服务器,可以使用自建或公益服务器。Easytier 同时支持 p2p 连接,但需要任意一台设备公网可达,受限于 NJU 校园网防火墙,p2p 实际不可用。

Easytier在使用上还存在稍许不便。首先,Easytier 不支持运行时动态更新配置,每次更新必须重启。例如将代理从指定 CIDR 改为全局,可以通过完善代理网段避免此类需求。

此外,Easytier 没有提供完善的鉴权和多人协同支持,但这并非对 Easytier 维护者的要求,只是从 tailscale 迁移过来的体验落差。事实上,我也不支持在 Easytier 中加入此类功能——这样做势必会牺牲 p2p 等特性。笔者只是想将不太熟悉相关技术的亲友拉入局域网,以方便访问局域网内的 jellyfin 和其他服务。

本文由作者按照 CC BY 4.0 进行授权