本文未使用headscale来管理用户,此教程建立在本地软路由环境下。
由于tailscale服务器都在海外,如果直接使用它的服务器进行异地组网,速度异常缓慢,因此在软路由下搭建derper服务器替换官方的服务器来达到提升速度的目的,管理用户依旧使用tailscale进行用户管理。
搭建过程
1.使用 Cloudflare API 申请 Let’s Encrypt 证书
如果域名托管在 Cloudflare ,可以用 Cloudflare 的 DNS API 验证:
sudo apt install certbot python3-certbot-dns-cloudflare -y
然后,在 /root/.cloudflare.ini 文件中填入:
dns_cloudflare_api_token = YOUR_CLOUDFLARE_API_TOKEN #cloudflare后台申请的API TOKEN
申请证书:
sudo certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /root/.cloudflare.ini \
-d 域名
成功后,证书会存放在:
/etc/letsencrypt/live/域名/fullchain.pem
/etc/letsencrypt/live/域名/privkey.pem
如果提示 File “/usr/bin/certbot”, line 33, in
pip install --upgrade pyopenssl cryptography certbot certbot-dns-cloudflare
再次申请:
certbot certonly \
--dns-cloudflare \
--dns-cloudflare-credentials /root/.cloudflare.ini \
-d 域名
2.docker拉取derper
services:
derper:
image: fredliang/derper
container_name: derper
restart: always
network_mode: host
ports:
- "3478:3478/udp"
- "23479:23479"
volumes:
- /etc/letsencrypt/live/域名/fullchain.pem:/app/certs/域名.crt
- /etc/letsencrypt/live/域名/privkey.pem:/app/certs/域名.key
environment:
- DERP_DOMAIN=域名
- DERP_ADDR=:23479
- DERP_CERT_MODE=manual
- DERP_CERT_FILE=/app/certs/域名.crt
- DERP_KEY_FILE=/app/certs/域名.key
- DERP_VERIFY_CLIENTS=true #防止白嫖
- DERP_TAILSCALE_DOMAIN=your-tailscale-network-name # 只允许你的 Tailscale 网络设备连接
登陆tailscale后台查看your-tailscale-network-name:
3.映射端口
openwrt下映射3478和23479端口
4.修改tailscale后台的ACL
打开https://login.tailscale.com/ 登陆你的账户,修改如下内容:
// Example/default ACLs for unrestricted connections.
{
// Declare static groups of users beyond those in the identity service.
"groups": {
"group:example": ["[email protected]", "[email protected]"],
},
// Declare convenient hostname aliases to use in place of IP addresses.
"hosts": {
"example-host-1": "100.100.100.100",
},
"acls": [
// Match absolutely everything. Comment out this section if you want
// to define specific ACL restrictions.
{"Action": "accept", "Users": ["*"], "Ports": ["*:*"]},
],
// derper 配置主要是下面这段
"derpMap": {
"OmitDefaultRegions": true, // 是否只连接自建 derper 节点
"Regions": {
"901": {
"RegionID": 901, // 整数,自定义
"RegionCode": "sd", // 字符串,代表地区
"RegionName": "Shandong", // 字符串,代表地区
"Nodes": [
{
"Name": "901a", // 字符串,自定义
"RegionID": 901, // 整数,上面的 RegionID
"HostName": "域名", // 字符串,域名
"STUNPort": 3478, // 整数,stun 端口
"DERPPort": 23479, // 整数,自定义的 derper 端口
},
],
},
},
},
}
5.docker拉取tailscale
可以和derper拉取命令放在一起
主要用于数据互通来让derper读区你tailscale网络下的设备数据,从而防止derper服务器被白嫖,docker-compose命令如下:
services:
tailscale:
image: tailscale/tailscale:latest
container_name: tailscale
restart: always
network_mode: host
privileged: true
cap_add:
- NET_ADMIN
- SYS_MODULE
devices:
- "/dev/net/tun:/dev/net/tun"
volumes:
- /root/tailscale:/var/lib/tailscale # 存储 Tailscale 数据
- /var/run/tailscale:/var/run/tailscale # 共享 tailscaled.sock
environment:
- TS_AUTHKEY=你的AUTHKEY
command: >
/bin/sh -c "
tailscaled --tun=userspace-networking --socks5-server=localhost:1055 &
sleep 5;
tailscale up --authkey=$TS_AUTHKEY --hostname=my-tailscale;
tail -f /dev/null"
登陆tailscale后台获取TS_AUTHKEY:
debian宿主机执行如下命令进行授权:
docker exec -it tailscale /bin/sh
tailscale up --reset \
--auth-key=你的TS_AUTHKEY
然后在tailscale后台进行授权。
6.使用
各平台下载tailscale,登陆自己的账号即可使用。
文章中域名改成你自己的域名
开通服务端的子网功能
对应docker执行如下命令(更换成自己的子网段):
docker exec -it tailscale tailscale up --advertise-routes=192.168.2.0/24 --reset
在ACL中添加如下内容:
"autoApprovers": {
"routes": {
"192.168.2.0/24": ["[email protected]"],
},
然后找到对应的设备开启子网:
💡Tips:
- 如果tailscale连接速度慢,记得UPnP里面调整一下速度。
- openclash开启fake-ip模式会造成tailscale无法连接derper服务器进行验证,fake-ip-filter添加你的域名即可