Tailscale 客户端会自动测量所有可用 DERP 区域的延迟,并优先连接延迟最低的节点。在多线路环境下,核心在于确保自建节点或官方节点对所有运营商线路均可达,而非手动强制选择。
先说结论:客户端默认会自动选择最优节点,自建节点需确保多线路路由回包一致。
- 先定位:使用 netcheck 命令查看当前连接的中继区域和延迟。
- 先做:配置策略路由确保多 WAN 口回包路径正确,防火墙放行 UDP 3478 和 TCP 443。
- 再验证:切换不同网络环境客户端,确认均能连接至预期节点。
命令速用版
快速查看当前 DERP 连接状态和延迟,重点关注 Region 和 Latency:
tailscale netcheck
典型输出示例:
Region 1 (Singapore): 25ms Region 900 (MyDERP): 5ms <-- 期望连接的自建节点 UDP: true IPv4: true IPv6: false
查看当前节点连接的中继服务器区域:
tailscale status
服务端多线路优化
若服务器接入多条宽带线路,仅使用 UFW 放行端口无法解决回包路由问题,可能导致连接不稳定或单线失效。需配置 Linux 策略路由确保回包路径一致。
1. 配置策略路由
假设 eth0 为电信线路(IP: 1.1.1.1),eth1 为联通线路(IP: 2.2.2.2)。需确保来自某 IP 的请求回包仍从该 IP 发出:
# 创建路由表 echo "100 telecom" >> /etc/iproute2/rt_tables echo "200 unicom" >> /etc/iproute2/rt_tables# 添加规则:来自电信 IP 的流量走 telecom 表 ip rule add from 1.1.1.1 table telecom ip route add default via 1.1.1.254 dev eth0 table telecom# 添加规则:来自联通 IP 的流量走 unicom 表 ip rule add from 2.2.2.2 table unicom ip route add default via 2.2.2.254 dev eth1 table unicom
2. 防火墙与端口
确保服务器具备公网 IP,并开放以下标准端口:
- UDP 3478:用于 STUN 服务,帮助穿透 NAT。
- TCP 443:用于 HTTPS 中继流量(默认)。
使用 UFW 放行端口(配合上述策略路由):
sudo ufw allow 3478/udp sudo ufw allow 443/tcp
3. 系统服务配置
在 systemd 服务文件中添加`--verify-clients`参数,防止未授权访问。示例/etc/systemd/system/derper.service:
[Unit] Description=Tailscale DERP Server After=network.target[Service] Type=simple ExecStart=/usr/local/bin/derper -hostname derp.example.com -certmode=letsencrypt -verify-clients Restart=on-failure[Install] WantedBy=multi-user.target
客户端映射配置
官方 Tailscale 客户端会自动拉取控制平面下发的 DERP 地图。若使用自建控制平面(如 Headscale),需在配置文件中定义自定义 DERP 区域,客户端登录后即可自动识别。
Headscale 配置示例(config.yaml):
derp:server:enabled: trueregion_id: 900region_code: "myderp"region_name: "My Custom DERP"stun_listen_addr: "0.0.0.0:3478"private_key: "<private_key>"cert_mode: letsencryptcert_domain: "derp.example.com"
配置完成后,重启 Headscale 服务,客户端登录新账号或刷新连接即可在 netcheck 中看到该区域。
验证与排查
再次运行tailscale netcheck,检查输出结果:
- Region 字段:应显示你配置的自建区域代码(如 900)或最近的官方区域。
- Latency 字段:延迟数值应显著低于连接海外官方节点时的延迟。
- UDP 穿透:观察是否显示"UDP: true",若为 false 说明流量完全走中继。
常见坑
- 证书问题:自建节点若使用域名,需确保证书有效且受信任,否则客户端会拒绝连接。
- IPv6 兼容性:部分网络环境下 IPv6 优先级过高可能导致绕路,建议在服务器端同时配置 IPv4 和 IPv6 监听。
- 端口冲突:确保中继端口未被其他服务占用,默认 HTTPS 端口 443 可能需要 root 权限或改用高位端口(需同步修改客户端配置)。
- 路由回包:多线路环境下务必配置策略路由,否则可能出现请求从电信进、回包从联通出的情况,导致连接建立失败。
参考来源
- Tailscale Official Documentation: DERP Servers
- Headscale Configuration Reference
- Linux Policy Routing (ip-rule, ip-route)
原文链接:https://www.zjcp.cc/ask/11636.html
