Tailscale流量代理
本文仅为技术交流分享,部署时请遵守当地网络法规!
WireGuard协议
Tailscale代理服务基于WireGuardVPN协议。后者是下一代现代VPN协议,其设计目标为简单、安全、高性能,且已被集成到Linux Kernel中,广泛被应用于服务器、云网络和个人VPN服务中。WireGuard本质上是“基于UDP的加密隧道协议”,其网络通信流程如下:
- 客户端发送数据
- WireGuard对数据包加密
- 加密后报文使用UDP封装
- 发送到接收端
- 接收端解密并恢复原始IP报文
WireGuard协议加密
WireGuard只使用一组固定的现代加密算法,且采用AEAD(Authenticated Encryption with Associated Data)加密模式。其通过组合使用ChaCha20 + Poly1305算法同时提供加密和完整性校验服务。
| 功能 | 算法 |
|---|---|
| 密钥交换 | Curve25519 |
| 加密 | ChaCha20 |
| 数据认证 | Poly1305 |
| 哈希 | BLAKE2s |
| 密钥派生 | HKDF |
WireGuard网络模型
WireGuard本质上为三层VPN架构,运行时会创建一个虚拟网卡(eg,wg0),类似
1 | $ ifconfig |
Tailscale代理服务
Linux使用官方源安装:
1 | # 官方安装源 |
登陆后查看服务状态,可以查看目前账号所有tailscale服务节点状态。正常情况下,已经可以使用tailscale分配的IP进行VPN通信。
1 | $ tailscale status |
Tailscale exit-node服务
为了使云服务器可以访问本地内网,或某些被过滤的网站,可以使用Tailscale的代理转发服务。云服务器使用Ubuntu操作系统,本地平台使用Windows操作系统。
Windows平台
查看本地tailscale状态无误后,开启本机exit-node转发功能。
1 | $ tailscale status |
如果需要使用其他VPN代理服务,可以开启代理的TUN(虚拟网卡)模式,同时查询云服务器SSH连接路由表后设置转发规则,以免开启TUN后SSH连接断开(请求报文和回复报文路由路径不同)。
Ubuntu平台
开启Tailscale服务并查看节点状态无误后,可开启指定节点转发服务:
1 | $ tailscale up |
如果最初SSH连接的是云服务器公网IP,在开启exit-node服务后,由于路由路径改变(云服务器所有流量强制由Tailscale虚拟网卡走本地转发),SSH连接会断开,因此推荐换到Tailscale分配的虚拟IP连接。
Tailscale Router服务
启用Tailscale的exit-node服务,会让云服务器端所有流量都由exit-node转发。若仅仅想让一部分流量被转发,官方推荐Subnet Router + routes方法
使用云端作为流量转发服务器,使本地终端访问其内网网段(192.168.1.0/24),相关步骤如下
在Ubuntu中开启IP转发(IP Forwarding),让系统从 “终端主机(Host)”模式 变成 “路由器(Router)”模式,允许内核转发不是发给本机的数据包。
1 | # 开启流量转发 |
本地客户端只需要接受该路由
1 | $ tailscale set --accept-routes=true |
