前言哥们电脑比较多一台win台式一台linux台式和一个mac air也算是把所有的生态都体验完了但是一直想找一个方法解决一个需求——让我的所有电脑可以一起协作这个时候作为一个计算机类的学生一个虚拟专用网就是非常牛逼的然后就遇到了这个tailsacle这个软件这个应用可以帮你构建一个正文了解前提对称密码学这里的特点就是加密解密是一个密钥加密解密速度都快但是密钥的传递是问题非对称密码学这里的特点就是安全这里加密之后会有一个公钥一个私钥这里加密全部都是公钥必须需要私钥来进行解密https就是这种逻辑防火墙规则这里只有自己发出去的流量开放防火墙会自动检测这里只有对方的返回数据包才能回来NAT这里是解决IPV4地址不够用的一个方案通过一个地址进行NAT转换然后这里就有很多内网地址现在我们使用了192.168开头的都是内网地址然后这样创建多个内网就缓解了IPV4地址不够用的危机连接逻辑首先两台电脑访问这个域名然后域名服务器DNS通过CDN文件分发网络直接把公钥发给你两台电脑AB分别接收使用这个公钥加密数据发给tailscale服务器。这里通过tailscale服务器来接收并且用自己的私钥来进行解密这里获取的就是AB通过对称密码学生成的对称密钥然后tailscale发送对方的IP端口和对方的对称密钥这里的发送逻辑是通过分别获取AB的公钥进行加密的。根据防火墙规则这里AB就可以获取对方的密钥和IP端口然后AB互相接收属于自己的数据包并解密然后通过对称密钥互相发送数据包来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还是很方便的。