安装 headscale 建立自己的 Tailnet
Tailscale 虽然是 mesh 的网络模式, 可以点对点的连接所有设备, 能直连会尽量直接连接, 然鹅还是需要一个默认的 server 来进行服务发现和临时中转流量.
那么大概的配置框架就已经出现了, 一个服务发现中心, 和多个不同的客户端.
开始的时候直接使用的 tailscale + github 账户登录的方式使用, 然后发现 github 账户直接托管的中心服务不能关闭国外的中转服务器, 这就比较难受, 本来可以直通的线路走了国外的中转不稳定, 会断, 最后还是走国内的便宜云服务器自己维护了一个开源的 headscale 作为中心服务.
安装 Headscale
headscale 官方文档
现在的 headscale 容器镜像的是有问题的, 不太好用, 还得花时间修。
Update: 看起来现在是修复了, 并且费点儿劲可以用起来, 但是不确定稳定性如何.
我准备了这些:
- 域名 和 域名证书
- 一台 Debian 的云服务器
- 公网 ip 地址
具体的安装步骤就是按照官方网站走下来就可以了.
一些条件:
需要注意的地方就是备案, 不备案会导致无法使用 443.
那么需要在tailscale的配置文件中指定端口, 让 tailscale 监听在一个不常用的端口上.
因为没有写清楚 server 的地址和端口, 折腾了一天… 一度怀疑是不是换端口也不行, 必须备案 …
配置文件
1 | headscale ~$ vim /etc/headscale/config.yaml |
大约在配置文件的77行左右, 会有一个 DEPR 集成的服务, 开启这个服务之后, 可以使用当前的服务器直接作为DEPR中转节点.
1 | 77 derp: |
绑定证书的位置在大约 151行之后, 我使用自己签发的证书, 就是直接配置 182 183 两行的参数就行.
1 | 181 ## Use already defined certificates: |
关闭了官方的DERP服务列表:
1 | 98 # List of externally available DERP maps encoded in JSON |
关闭了 OverwriteDNS, 总是会尝试将客户的默认DNS服务器重写为 TailNet DNS.
1 | 204 dns_config: |
安装tailscale客户端
按照安装文档直接安装, 不一样的发行版(是的, Windows 也是 Linux 发行版) 安装方式不同, 基本上启动之后都能用, 完成度非常高.
注册节点的命令
节点注册命令记录.
1 | sudo tailscale up --accept-dns=false --advertise-exit-node --advertise-routes=192.168.31.0/24 --login-server=https://YOURHOSTNAME.YOURDOMAIN:PORT --accept-routes |
这个命令执行完毕之后, 会返回一个网页, 网页打开里面有一个命令, 复制命令去 headscale 服务器的命令行(bash)里面执行一下,节点就注册进来了.
更新运行中的 Tailscale 客户端的设置
最近需要更新我的一个节点, 发布 VPC 内的 CIDR 块, 这个设置之前没有 advertise-route 参数进行更新 。
这个实例在我的默认VPC里面, 这样的话这个实例就直接变成了这个VPC内的IGW, 流量会通过这个实例发送到VPC内, 可以直接将这个网络范围内的DNS指向VPC内的 .2 Resolver, 甚至感觉可以直接在家用 EFS 这类的东西了.
当然, 如果节点需要变动之前运行的参数, 是需要给出和之前一致的参数, 然后添加 或者 变更其中的一部分的.
1 | sudo tailscale up --accept-dns=false --advertise-exit-node --login-server=https://YOURHOSTNAME.YOURDOMAIN:PORT --accept-routes --advertise-routes=172.31.0.0/16 |
问题汇总
查看当前客户端的网络状况
1 | ╰─>$ tailscale netcheck |
测试ping:
1 | ╰─>$ tailscale ping --until-direct -c 0 100.64.0.9 |


