Tailscale headscale部署

tailscale收费有限制,headscale开源,可做服务端,然后用tailscale作为客户端来接入网络

  1. 服务端安装

拉取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
  1. 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

在服务器端执行该命令即可

  1. windows客户端接入

在浏览器打开地址:服务端的ip:端口/windows,例如http://1.1.1.1:9000/windows

按照步骤在cmd下执行即可

然后用客户端登录,连接字符串在服务端注册

  1. 打通局域网

客户端命令

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

  1. 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格式

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值