INFO
一、为何选择Tailscale
序号 | 工具 | 需要公网IP? | 中转/打洞? | 说明 |
1 | Frp | √ | 受限于中转 | 要你何用? |
2 | Zerotier | No | P2P直连 | 备选,听说效率没有Tailscale高 |
3 | WireGuard | No | P2P直连 | 很好的技术,但设置较复杂 |
4 | Tailscale | No | P2P直连 | 较新技术,基于WireGuard |
二、各终端部署
安装各平台/操作系统的客户端程序即可,分别有Windows/IOS/Android/Linux。与其他系统傻瓜式的安装流程相比,Linux当然是最复杂的,鉴于稳定性及灵活性考虑,我们选择小虚拟机Docker安装。
三、Derp安装
# 更新软件包列表 & 升级系统
sudo apt update && sudo apt upgrade -y
# 安装基本依赖
sudo apt install -y wget git openssl curl
# 下载Golang,我使用的是x86_64版本,您也可以根据需要选择合适的版本 [All releases - The Go Programming Language](https://go.dev/dl/)
wget https://go.dev/dl/go1.24.4.linux-amd64.tar.gz
# 删除旧的Golang并解压新的内容
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.24.4.linux-amd64.tar.gz
# 配置环境变量
echo "export PATH=$PATH:/usr/local/go/bin" >> /root/.bashrc
echo "export PATH=$PATH:/usr/local/go/bin" >> /etc/profile
source /root/.bashrc
source /etc/profile
# 检查Golang是否安装成功
go version
# 配置Golang环境(国外服务器可跳过)
go env -w GO111MODULE=on
go env -w GOPROXY=https://goproxy.cn,direct
# 安装Tailscale Derper
go install tailscale.com/cmd/derper@main
# 创建 /etc/derp 文件夹并赋予权限,以便后续修改文件重新编译到这里
mkdir -p /etc/derp/
chmod 777 /etc/derp/
# 进入到编译好的文件夹
cd ~/go/pkg/mod/tailscale.com@v1.67.0-pre.0.20240527202236-f1d10c12acf6/cmd/derper(要根据自己情况改)
# 编辑 cert.go 文件
vi cert.go
# 找到以下内容并将部分代码注释
// 原始代码
func (m *manualCertManager) getCertificate(hi *tls.ClientHelloInfo) (*tls.Certificate, error) {
if hi.ServerName != m.hostname {
return nil, fmt.Errorf("cert mismatch with hostname: %q", hi.ServerName)
}
// 改为
func (m *manualCertManager) getCertificate(hi *tls.ClientHelloInfo) (*tls.Certificate, error) {
// if hi.ServerName != m.hostname {
// return nil, fmt.Errorf("cert mismatch with hostname: %q", hi.ServerName)
// }
# 编译文件到之前创建的文件夹
go build -o /etc/derp/derper
# 查看是否存在 derper 文件
ls /etc/derp
# 生成(自签)SSL证书
openssl req -x509 -newkey rsa:4096 -sha256 -days 3650 -nodes -keyout /etc/derp/derp.myself.com.key -out /etc/derp/derp.myself.com.crt -subj "/CN=derp.myself.com" -addext "subjectAltName=DNS:derp.myself.com"
# 开放端口(重要)
自行开放33445(tcp)、3478(udp)端口
开放端口(重要)
自行开放33445(tcp)、3478(udp)端口,如Centos8
firewall-cmd –zone=public –add-port=33445/tcp –permanent
firewall-cmd –zone=public –add-port=33445/udp –permanent
firewall-cmd –reload
firewall-cmd –list-ports
设置开机自启(创建derp.service)
sh -c "cat > /etc/systemd/system/derp.service <<EOF
[Unit]
Description=TS Derper
After=network.target
Wants=network.target
[Service]
User=root
Restart=always
ExecStart=/etc/derp/derper -hostname derp.myself.com -a :33445 -stun -stun-port 3478 -http-port 33446 -certmode manual -certdir /etc/derp
RestartPreventExitStatus=1
[Install]
WantedBy=multi-user.target
EOF
"
启动服务
systemctl enable derp
systemctl start derp
验证 DERP 服务
浏览器打开:https://ip+33445 页面正常显示 DERP 即可
修改Tailscale 配置文件
- IPv4 修改为自己服务器的 IP
- RegionCode 自定义即可
- RegionName 自定义即可
"derpMap": {
"OmitDefaultRegions": true,
"Regions": {
"901": {
"RegionID": 901,
"RegionCode": "JP",
"RegionName": "JP Derper",
"Nodes": [
{
"Name": "901",
"RegionID": 901,
"IPv4": "XXX.XXX.XXX.XXX",
"DERPPort": 33445,
"STUNPort": 3478,
"InsecureForTests": true,
},
],
},
},
},
检查可用性
在任意链接 Tailscale 的电脑上终端输入 tailscale netcheck
PS C:\Users\Administrator> tailscale netcheck
Report:
* UDP: false
* IPv4: (no addr found)
* IPv6: no, but OS has support
* MappingVariesByDestIP:
* PortMapping:
* CaptivePortal: false
* Nearest DERP: ivwv· Derper
* DERP latency:
- ivwv·derp: 157.4ms (ivwv· Derper)
PS C:\Users\Administrator>
看到 - ivwv·derp: 157.4ms (ivwv· Derper)
有回显延迟即正确部署完毕
或者在互相访问后输入tailscale status