tailscale原理解析
前言
哥们电脑比较多,一台win台式,一台linux台式,和一个mac air,也算是把所有的生态都体验完了,但是一直想找一个方法,解决一个需求——让我的所有电脑可以一起协作,这个时候作为一个计算机类的学生,一个虚拟专用网就是非常牛逼的,然后就遇到了这个tailsacle这个软件,这个应用可以帮你构建一个
正文
了解前提
- 对称密码学:这里的特点就是加密解密是一个密钥,加密解密速度都快,但是密钥的传递是问题
- 非对称密码学:这里的特点就是安全,这里加密之后会有一个公钥一个私钥,这里加密全部都是公钥,必须需要私钥来进行解密,https就是这种逻辑
- 防火墙规则:这里只有自己发出去的流量开放,防火墙会自动检测,这里只有对方的返回数据包才能回来
- NAT:这里是解决IPV4地址不够用的一个方案,通过一个地址进行NAT转换,然后这里就有很多内网地址,现在我们使用了192.168开头的都是内网地址,然后这样创建多个内网,就缓解了IPV4地址不够用的危机
连接逻辑
- 首先两台电脑访问这个域名,然后域名服务器(DNS)通过CDN(文件分发网络)直接把公钥发给你,两台电脑A,B分别接收,使用这个公钥加密数据发给tailscale服务器。
- 这里通过tailscale服务器来接收,并且用自己的私钥来进行解密,这里获取的就是A,B通过对称密码学生成的对称密钥,然后tailscale发送对方的IP+端口和对方的对称密钥(这里的发送逻辑是通过分别获取A,B的公钥进行加密的)。
- 根据防火墙规则,这里A,B就可以获取对方的密钥和IP+端口,然后A,B互相接收属于自己的数据包并解密,然后通过对称密钥互相发送数据包来NAT打洞(这里意思是通过NAT来)试图建立P2P连接(A-B的端到端无损连接)
- 关于对称NAT:但是这里如果A是对称NAT就很不方便,这里的对称NAT会让你们的打洞变得困难。这里比如A主机现在收到了B的密钥和地址和端口,它通过1234这个内网端口发送给B(刚刚也通过这个端口发给tailscale的服务器),但是这里对应的公网端口会变化,因为这里访问的对象不一样(如果是普通NAT一个内网端口对应一个公网端口)。也就是说这里tailscale传给B的A的端口和A现在实际发数据包的端口不是一个端口,那这个时候NAT检测我没有从这个端口发送给B数据,于是这里直接丢包(但是这里tailscale会指挥双方给对面发送UDP数据包,双方同时疯狂发送,疯狂为对方开只允许对方进来的端口,直到对方的UDP数据包到达这里开放的端口)
- 关于IPV6
嘿嘿😁,以上所有说法基于IPV4,但是IPV6可就不一样了,IPV6地址很多啊,随便玩,根本不需要NAT和相关规则,所以这个直接可以建立P2P连接
总结
这个东西很好用,当你的设备绑到一个局域网的时候,这个时候协作就可以很方便,你可以部署smb文件服务器当你的NAS,可以享受高速的远程控制体验,比如我写这个是用的MAC,但是画图用的却是Win,还是很方便的。
