948 字
5 分钟
tailscale异地组网教程

前言#

Tailscale 是一种新型组网工具. 它能帮助我们把安装了Tailscale服务的机器,都放到同一个局域网内,实现内网互联。 即公司或者家里的 PC 机器连到同一网络,包括云服务器等等都能放到同一个局域网。 并且能够自动发现点对点直连,如果无法直连则会通过他的公共中继服务器来转发,他的公共网络我实测大概有30M带宽,并且永久免费。 当然也可以自建中继服务器,本文有介绍。部署和使用过程都非常简单方便。

  • 安卓,ios,windows,mac 直接官网下载即可

Docker部署#

docker run -d \
--name tailscale \
--privileged \
--network host \
--restart always \
-v $(pwd)/tailscale:/var/lib/tailscale \
tailscale/tailscale:latest \
tailscaled --state=/var/lib/tailscale/tailscaled.state

进入容器:

docker exec -it tailscale sh

生成登录链接:

tailscale up

(可选)使用密钥连接:

tailscale up --auth-key=<你的AuthKey>

查看中继网络

tailscale netcheck

查看是否点对点直连

tailscale status

如果看到relay "tok"则说明使用了公共中继连接,tok代表日本公共节点

指定密钥运行#

docker-compose.yml

services:
tailscale:
image: tailscale/tailscale:latest
container_name: tailscale
privileged: true
network_mode: host
restart: always
volumes:
- ./tailscale:/var/lib/tailscale
command:
- tailscaled
- --state=/var/lib/tailscale/tailscaled.state
- --tun=tailscale0
- --auth-key=你的AuthKey

宿主机部署#

# 安装
sudo apt install tailscale -y
# 登录
sudo tailscale up
# 查看运行状态
sudo systemctl status tailscaled
# 开机自启
sudo systemctl enable tailscaled
# 停止运行
sudo systemctl stop tailscaled
# 重启
sudo systemctl restart tailscaled
# 查看日志
sudo journalctl -u tailscaled -f

自建derper中继服务器#

自动申请证书

services:
derper:
image: fredliang/derper:latest
container_name: derper
restart: unless-stopped
environment:
- DERP_DOMAIN=derper.your-domain.com # 替换为您的域名
- DERP_CERT_MODE=letsencrypt
- DERP_STUN=true
- DERP_HTTP_PORT=80
- DERP_ADDR=:443
- DERP_VERIFY_CLIENTS=true # 本地 tailscaled 实例验证客户端,只允许自己使用
ports:
- "80:80"
- "443:443"
- "3478:3478/udp"
volumes:
- ./certs:/app/certs # 证书持久化存储
- /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock

手动配置证书

services:
derper:
image: fredliang/derper:latest
container_name: derper
restart: unless-stopped
environment:
- DERP_DOMAIN=derper.your-domain.com # 替换为您的域名
- DERP_CERT_MODE=manual
- DERP_CERT_DIR=/app/certs
- DERP_STUN=true
- DERP_HTTP_PORT=80
- DERP_ADDR=:443
- DERP_VERIFY_CLIENTS=true # 通过本地 tailscaled 实例验证客户端
ports:
- "80:80"
- "443:443"
- "3478:3478/udp"
volumes:
- ./certs:/app/certs # 手动挂载证书
- /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock

修改Tailscale后台配置文件 添加如下内容

"derpMap": {
"OmitDefaultRegions": true,
// OmitDefaultRegions 忽略官方的中继节点
"Regions": {
// 这里的 901 从 900 开始随便取数字
"901": {
// RegionID 和上面的相等
"RegionID": 901,
// RegionCode 名称
"RegionCode": "Vultr-SG",
"Nodes": [
{
// Name 保持 1不动
"Name": "1",
// 这个也和 RegionID 一样
"RegionID": 901,
// 域名
"HostName": "<你的域名>",
// 端口号
"DERPPort": 443,
},
],
},
},
},
Docker变量必需描述
DERP_DOMAINderper 服务器主机名your-hostname.com
DERP_CERT_DIR存储证书的目录 (如果地址端口是 :443)/app/certs
DERP_CERT_MODE获取证书的模式。可选项: manual, letsencryptletsencrypt
DERP_ADDR服务器监听地址:443
DERP_STUN是否同时运行 STUN 服务器true
DERP_HTTP_PORT提供 HTTP 服务的端口。设置为 -1 禁用80
DERP_VERIFY_CLIENTS是否通过本地 tailscaled 实例验证此 DERP 服务器的客户端false

子网路由#

192.168.3.0/24根据自己需求更改,添加子网路由后,192.168.3.0/24网段的所有设备都能直接访问tailscale中的其他设备,无需安装tailscale

开启子网路由:

tailscale up --advertise-routes=192.168.3.0/24 --accept-routes --reset

开启后,在tailscale后台找到你路由器设备,点击右侧菜单(三个点),选择Edit route settings...,勾选192.168.3.0/24,点击Save

然后输入以下命令查看是否存在你广播的IP段

tailscale status --json | grep advertisedRoutes

能看到你广播的网段就说明成功了,但是这个检查方式不准确,最好还是手动ping测试

需要注意的坑#

子网路由功能依赖iptables,immortalwrt默认防火墙不是这个,需要安装iptables,immortalwrt默认不会让 LAN 网段流量被转发到tailscale0,需要手动加。

需要启用 IP 转发,请确保已经启用。

tailscale异地组网教程
https://blog.emohe.cn/posts/tailscale/
作者
阿涛の小破站
发布于
2025-03-11
许可协议
CC BY-NC-SA 4.0