自建 Tailscale
的 Derper
节点并开启认证,需要在 Derper
节点也安装 Tailscale
客户端。
Docker Compose 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 version: "3" services: tailscale: image: tailscale/tailscale container_name: tailscale privileged: true restart: always volumes: - "./tailscale/data:/var/lib/tailscale" - "./tailscale/tmp:/tmp" - "/dev/net/tun:/dev/net/tun" cap_add: - net_admin - sys_module environment: TS_AUTHKEY: "从 https://login.tailscale.com/admin/settings/keys 获取" TS_STATE_DIR: "/var/lib/tailscale" TS_USERSPACE: "false" derper: image: starudream/derper container_name: derper restart: always command: /tailscale/derper -a :80 -verify-clients depends_on: - tailscale ports: - "3478:3478/udp" volumes: - "./tailscale/tmp:/var/run/tailscale"
Derper
的镜像请 于此 查看。
当前版本 1.60.1
中 tailscaled.sock
在 var/run/tailscale/tailscaled.sock
只是一个指向 /tmp/tailscaled.sock
的链接。
Nginx 不使用 Derper
内置 SSL
证书,使用 nginx
反向代理,需要注意 proxy_set_header Upgrade $http_upgrade;
开启 Websocket
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 server { location / { proxy_pass http://derper:80; proxy_set_header Host $host ; proxy_set_header X-Real-IP $remote_addr ; proxy_set_header X-Real-PORT $remote_port ; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for ; proxy_set_header X-Forwarded-Proto $scheme ; proxy_http_version 1 .1 ; proxy_set_header Upgrade $http_upgrade ; proxy_set_header Connection $connection_upgrade ; } }
Access Controls 最后在 https://login.tailscale.com/admin/acls/file 修改配置文件,添加 DERPMap 配置。
OmitDefaultRegions
会忽略官方的 Derper
节点,自建建议开启以保护隐私。
下面的配置文件示例,分成内网与公网两个配置,Tailscale
客户端会通过延迟自动选择使用内网还是公网。
Nodes
内详细配置请看 DERPNode 。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 { // ... acls ssh "derpMap": { "OmitDefaultRegions": true, "Regions": { "900": { "RegionID": 900, "RegionCode": "private", "Nodes": [ { "Name": "private-aliyun", "RegionID": 900, "HostName": "derper.52xckl.cn", "IPV4": "内网ip 172.17.0.1", "STUNPort": 3478, "DERPPort": 443 } ] }, "901": { "RegionID": 901, "RegionCode": "public", "Nodes": [ { "Name": "public-aliyun", "RegionID": 901, "HostName": "derper.52xckl.cn", "IPV4": "公网ip", "STUNPort": 3478, "DERPPort": 443 } ] } } } }
Test 1 docker exec -it tailscale tailscale netcheck
1 2 3 4 5 6 7 8 9 10 11 Report: * UDP: true * IPv4: yes, 172.19.0.1:34143 * IPv6: no, unavailable in OS * MappingVariesByDestIP: true * HairPinning: false * PortMapping: * Nearest DERP: * DERP latency: - private: 200µs () - public: 3.1ms ()
1 docker exec -it tailscale tailscale ping <node name>
1 2 3 pong from <node name> (<node ip>) via DERP(public) in 11ms pong from <node name> (<node ip>) via DERP(public) in 11ms pong from <node name> (<node ip>) via DERP(public) in 11ms
Ref
https://tailscale.com/kb/1118/custom-derp-servers