前言:
Wireguard尽管非常简单可靠,不过要实现互联还是需要有一定配置能力的。点对点的技术呈现的架构是网状结构,如果有10个节点要做到互相联通,则需要维护(10-1)*10=90 条有向链路。互相连接的节点至少有1个是可以直接访问的,如果2个节点都在不同的局域网内部,没有对外映射,不通过中继服务器是比较困难做到点对点通讯的。
如果我告诉你,你可以免配置,用你连在酒店无线的笔记本电脑与家里的一台电脑直接通讯,无需在家里路由器或请酒店管理员(通常不可能)做相关调整,你可能认为是在开玩笑。没错,这个神器就是TailscaleVPN。
TailscaleVPN基于wireguard技术互连,又在此基础上开发了NAT穿越技术,甚至在极端的内部网络环境比如完全限制UDP通讯的情况下也能实现点对点通讯。各个节点不用配置公钥私钥端点端口等信息,全部自动完成,您需要的只是一个微软、谷歌或github账户,Tailscale本身也不维护账户信息,全交给第三方。
下面让我们来看看怎么做。
假设有如下场景:用户携带Macbook出差住酒店,有事需要访问家里的电脑查看一些资料,并需要访问公司的ubuntu服务器。拓扑见下图左侧。
三个点的设备都是通过NAT上网的,不建立中继服务器用wireguard是做不到互联的。而我们只需在每个节点安装TailscaleVPN,就能自动帮我们建立起网状网络,见上图右则。所有的防火墙规则、安全设备都能轻松越过。过程也非常方便:
- 访问tailscale.com。用微软、谷歌或github账户登录,考虑到国内情况,用微软账户比较合适,微软验证后,tailscale就激活了,就这么简单。
- 安装tailscale。访问 https://tailscale.com/download,查看安装方法。都非常简单,下面分别介绍:
Ubuntu:安装只需一个命令:curl -fsSL https://tailscale.com/install.sh | sh安装后启动:sudo tailscale up这里会给了一个链接,https://login.tailscale.com/***,只需在浏览器上访问并用关联的微软账号就可以完成验证。完成了验证之后,可以查一下当前节点在虚拟局域网的地址:tailscale ip -4
Windows 10:下载安装文件安装:安装后在系统驻留的图标右键点击,选择 Log in…,然后完成验证。
完成验证后,再右键点击能看到该节点的IP
苹果MacBook:如windows一样简单,从应用市场安装,登录,查看IP。分别如下 - 各客户端安装并验证之后,就完成了互连。登录tailscale可以看到各节点的IP地址。如图,酒店MacBook是 100.95.68.22,家里的电脑是100.101.150.23,公司的服务器是100.93.63.95。下面我们来测试一下。
- 从酒店ping家里电脑和公司服务器。成功!
- 从酒店远程桌面到家里的windows电脑,SSH到公司的ubuntu,都畅通无阻,完美!!!这里仅以ubuntu为例截图 。
进阶(服务器节点特殊需要,普通用户节点可以忽略):
- 如果需要访问服务器节点所在的局域网其他未装tailscale的计算机,需要开启服务器转发功能并设置允许访问哪些网段,具体如下:
- 开启转发,设定允许转发的网段。echo ‘net.ipv4.ip_forward = 1’ | sudo tee -a /etc/sysctl.confecho ‘net.ipv6.conf.all.forwarding = 1’ |sudo tee -a /etc/sysctl.confsudo sysctl -p /etc/sysctl.confsudo tailscale up –advertise-routes=10.X.X.0/24 –以实际网段代替
- 登入控制台,设置允许路由 上一步设置的网段。点“Edit route settings…”。
- 开启转发,设定允许转发的网段。echo ‘net.ipv4.ip_forward = 1’ | sudo tee -a /etc/sysctl.confecho ‘net.ipv6.conf.all.forwarding = 1’ |sudo tee -a /etc/sysctl.confsudo sysctl -p /etc/sysctl.confsudo tailscale up –advertise-routes=10.X.X.0/24 –以实际网段代替
- Tailscale每隔6个月要进行重新授权,对于服务器,建议关掉过期重新授权设置,如下,选择Disable key expiry。
- 这样之后,用酒店的Macbook就可以连通ubuntu服务器所在的局域网内其他计算机。完美!!
讨论:
- 有人也许会说,各个终端安装软件实现互连不是什么新鲜事,很多软件都能做到,比如teamview,向日葵,ngrok,甚至群晖自带的控制台就能做到这个功能,但请注意,上述这些实现都是通过服务器中转的,而tailscale是真正的直接点对点通讯的。
- tailscale基于wireguard技术,可以保证数据的安全性。实际上tailscale只负责公钥的分发以及连接的打通协调工作。自始至终,客户端未向tailscale发送私钥,换句话说,tailscale也无法解密用户之间的通讯内容。
- tailscale的安全性在于,数据一离开端点就是加密的,在网络上基本不存在数据被获取并读出的可能。
- tailscale是个开源项目,她的核心技术是创造性地开发出一揽子穿透NAT的协议,甚至在内网完全禁止UDP的情况也能伪装在https中,基本是目前最强的VPN软件。当然对于企业的信息审计来说,这不是个好消息。
- tailscale详细公布了他们的NAT穿透技术,对这方面有兴趣的人不能错过这篇史诗级的文章。https://tailscale.com/blog/how-nat-traversal-works/
结束语:
本文是本人第三篇关于Wireguard的原创技术文章,刚好这段时间工作中碰到的项目与wireguard有关,就深入了解了一下,顺便以此为契机开始了订阅号的写作,其中第一篇文章就是实际工作项目过程的脱敏精简版,读者基本可以照做完成项目。
wireguard告一段落,下一篇将转移目标,敬请期待。