tailscale收费有限制,headscale开源,可做服务端,然后用tailscale作为客户端来接入网络
服务端安装
拉取headscale
wget https://github.com/juanfont/headscale/releases/download/v0.20.0/headscale_0.20.0_linux_amd64 -O /usr/local/bin/headscale
赋权限
chmod +x /usr/local/bin/headscale
创建目录
mkdir -p /etc/headscale #配置目录
mkdir -p /var/lib/headscale #存储数据与证书
创建数据库文件
touch /var/lib/headscale/db.sqlite
拉取配置文件
wget https://github.com/juanfont/headscale/raw/main/config-example.yaml -O /etc/headscale/config.yaml
修改配置文件:
修改server_url服务端的ip地址和端口
unix_socket: /var/run/headscale/headscale.sock
创建服务
vi /etc/systemd/system/headscale.service
# /etc/systemd/system/headscale.service
[Unit]
Description=headscale controller
After=syslog.target
After=network.target
[Service]
Type=simple
User=headscale
Group=headscale
ExecStart=/usr/local/bin/headscale serve
Restart=always
RestartSec=5
# Optional security enhancements
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectHome=yes
ReadWritePaths=/var/lib/headscale /var/run/headscale
AmbientCapabilities=CAP_NET_BIND_SERVICE
RuntimeDirectory=headscale
[Install]
WantedBy=multi-user.target
创建headscale用户
useradd headscale -d /home/headscale -m
修改 /var/lib/headscale 目录的 owner
chown -R headscale:headscale /var/lib/headscale
重新加载
systemctl daemon-reload
开机自启
systemctl enable --now headscale
查看运行状态
systemctl status headscale
创建命名空间
headscale namespaces create default
查看命名空间
headscale namespaces list
查看节点列表
headscale nodes list
Linux客户端接入
拉取文件
wget https://pkgs.tailscale.com/stable/tailscale_1.22.2_amd64.tgz
解压
tar zxvf tailscale_1.22.2_amd64.tgz
将二进制文件复制到官方软件包默认的路径下
cp tailscale_1.22.2_amd64/tailscaled /usr/sbin/tailscaled
cp tailscale_1.22.2_amd64/tailscale /usr/bin/tailscale
将 systemD service 配置文件复制到系统路径下
cp tailscale_1.22.2_amd64/systemd/tailscaled.service /lib/systemd/system/tailscaled.service
将环境变量配置文件复制到系统路径下
cp tailscale_1.22.2_amd64/systemd/tailscaled.defaults /etc/default/tailscaled
开启自启
systemctl enable --now tailscaled
查看状态
systemctl status tailscaled
接入headscale
# 将 <HEADSCALE_PUB_IP> 换成你的 Headscale 公网 IP 或域名
tailscale up --hostname=<节点名称> --login-server=http://<HEADSCALE_PUB_IP>:8080 --accept-routes=true --accept-dns=false
执行完上面命令后,会出现
To authenticate, visit:
http://xxxxxx:8080/register?key=905cf165204800247fbd33989dbc22be95c987286c45aac303393704
1150d846
在浏览器打开会出现,注册节点的命令,如下
#USERNAME 为在服务端创建namespace
headscale nodes register --user USERNAME --key nodekey:08ec6e3c50b218fb63decc7636420129b758aa44873b67c83c9041a06699a566
在服务器端执行该命令即可
windows客户端接入
在浏览器打开地址:服务端的ip:端口/windows,例如http://1.1.1.1:9000/windows
![](https://img-blog.csdnimg.cn/img_convert/3d6650b9185d2ced5a7f3e9423ff54bc.png)
按照步骤在cmd下执行即可
然后用客户端登录,连接字符串在服务端注册
打通局域网
客户端命令
echo 'net.ipv4.ip_forward = 1' | tee /etc/sysctl.d/ipforwarding.conf
echo 'net.ipv6.conf.all.forwarding = 1' | tee -a /etc/sysctl.d/ipforwarding.conf
sysctl -p /etc/sysctl.d/ipforwarding.conf
重新接入headscale,添加参数 --advertise-routes=192.168.100.0/24 --reset
# 将 <HEADSCALE_PUB_IP> 换成你的 Headscale 公网 IP 或域名
tailscale up --hostname=<节点名称> --login-server=http://<HEADSCALE_PUB_IP>:8080 --accept-routes=true --accept-dns=false --advertise-routes=192.168.100.0/24 --reset
服务端
headscale routes list
headscale routes enable -r 1 //1为 routes list 的id
headscale routes disable -r 1 //删除路由
然后就可以 访问 那台客户端所在的局域网的所有ip了
如果异地的网段与本地的网段有冲突,还不知道怎么解决?
以上参考:https://icloudnative.io/posts/how-to-set-up-or-migrate-headscale
headscale常用命令
headscale namespace list # 查看所有的namespace
headscale namespace create default # 创建namespace
headscale namespace destroy default # 删除namespace
headscale namespace rename default myspace # 重命名namespace
headscale node list # 列出所有的节点
headscale -n default node ls # 只查看namespace为default下的节点
headscale node delete -i<ID> # 根据id删除指定的节点,这里面的id是node list查询出来的id
# 参考headscale nodes delete -i=6
headscale routes list -i 9 # 列出节点9的所有路由信息
headscale routes enable -r 9 #将节点9的路由中信息为192.168.10.0/24的设置为true,
# 这样除了虚拟内网ip,原先的内网ip网段为192.168.10的也能访问了
# 后面的/24表示子网掩码是24个1,就是255.255.255.0
# preauthkeys主要是方便客户端快速接入,创建了preauthkeys后客户端直接使用该key就可以直接加入namespace
headscale -n default preauthkeys list # 查看名称为default的namespace中已经生成的preauthkeys
headscale preauthkeys create -e 24h -n default # 给名称为default的namespace创建preauthkeys
# apikeys是为了客户端和headscale做http鉴权用的,http请求的时候需要设置头部authorization
# 值为固定的字符串"Bearer "加apikeys创建的key
headscale.exe apikeys create # 创建apikeys,在创建的时候需要记录下完整的值,后续查询出来的都是prefix
# 值类似于zs3NTt7G0w.pDWtOtaVx_mN9SzoM24Y02y6tfDzz5uysRHVxwJc1o4
headscale.exe apikeys list -o=json #查询headscale的apikeys,并将结果输出成json格式