Headscale与Tailscale接入

原文:

https://icloudnative.io/posts/how-to-set-up-or-migrate-headscale/

版本更新了,命令变了

Headscale部署方式不变

需要修改listen_addr grpc_listen_addr0.0.0.0

原namespace已修改为user

所以命名变为

自动注册

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
# headscale服务器
# headscale出口不能有NAT
headscale users create t1
# 生成注册秘钥
headscale preauthkeys create -e 24h -u t1
headscale preauthkeys ls

# 服务器A 内网有docker网络(172.19.1.0/24)
# 多次up需要清理route缓存 headscale route delete -r ID
tailscale up --advertise-routes=172.19.1.0/24,172.19.2.0/24,172.19.3.0/24 --accept-dns=false --accept-routes --login-server=http://192.168.2.124:8080
服务器B
tailscale up --accept-dns=false --accept-routes=true --auth-key=xxx --login-server=http://192.168.2.124:8080
服务器C
tailscale up --accept-dns=false --accept-routes=true --auth-key=b57141f1ed0f4b2c078bb2dab5db09b058b8c4dd13253243 --login-server=http://192.168.2.124:8080

后续启动断开只需要tailscale up 和 tailscale down

headscale routes list
ID | Machine | Prefix | Advertised | Enabled | Primary
1 | v | 172.19.1.0/24 | true | true | true
2 | v | 172.19.2.0/24 | true | true | true
3 | v | 172.19.3.0/24 | true | false | false


headscale routes enable -i 1
headscale routes enable -i 2
headscale routes enable -i 3
# 开启路由时如果主机A无法访问路由会报错

在服务器B和C访问172.19.1.0/24网络即可通信

手动注册

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 将 换成自己的 Headscale 公网 IP 或域名

tailscale up --login-server=http://192.168.2.124:8080 --accept-routes=true --accept-dns=false

这里推荐将 DNS 功能关闭,因为它会覆盖系统的默认 DNS。如果你对 DNS 有需求,可自己研究官方文档,这里不再赘述。

执行完上面的命令后,会出现下面的信息:

To authenticate, visit:

http://192.168.2.124:8080/register?key=xxx

在浏览器中打开该链接,就会出现如下的界面: 将其中的命令复制粘贴到 headscale 所在机器的终端中,并将 USERNAME 替换为前面所创建的 user。
headscale nodes register --user USERNAME --key nodekey:xxxx

Machine xxx register

注册成功,查看注册的节点:

注意 此时服务器使用的公共derp

urls:
- https://controlplane.tailscale.com/derpmap/default