自建 headscale
751 字
4 分钟
自建 headscale
headscale 安装配置
默认 headscale 的 ip 段配置为 100.64.0.0/10, 这个会和阿里云的ECS的默认 dns 冲突,改为 10.99.100.0/24 段
---server_url: https://${服务器地址}
listen_addr: 0.0.0.0:8080
prefixes: v4: 10.99.100.0/24
dns: magic_dns: false # 关闭dns
unix_socket: /var/run/headscale/headscale.sockunix_socket_permission: "0770"headscale 中用户可以理解为租户,不同的租户网络隔离
常用命令
# 创建 api key,用于 rest 调用headscale api create# 查询 api keyheadscale api ls# 创建用户headscale user create sephy# 查询用户headscale user ls# 显示节点列表headscale nodes ls# 创建 preauthkey 设备加入headscale authkey create --user 1 # 1 为用户# 查看 preauthkeyheadscale authkey ls --user 1# 删除节点headscale nodes delete -i <id>也可以通过 headscale-ui 设置 preauth

阿里云 tailscale 设置
阿里云 ECS 默认使用 100.100.2.136/100.100.2.138 作为内部 DNS 解析,会与 tailscale 默认的 iptables 规则冲突
添加 iptables 规则
sudo iptables -I INPUT 1 -s 100.100.2.0/24 -j ACCEPT
# 伪装sudo iptables -t nat -A POSTROUTING -s 10.250.0.0/24 -d 172.28.0.0/16 -j MASQUERADE开启 ipv4 转发
echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/sysctl.confecho 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/sysctl.confsudo sysctl -p /etc/sysctl.d/sysctl.conf# orecho 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.d/99-sysctl.confecho 'net.ipv6.conf.all.forwarding = 1' | sudo tee -a /etc/sysctl.d/99-sysctl.confsudo sysctl -p /etc/sysctl.d/99-sysctl.conf开放 41641 udp 端口

安装 tailscale
sudo apt install tailscale -y登录到headscale
# --login-server 指定自托管的 Headscale 控制服务器地址# --accept-routes=true 启用路由接受功能,允许接收其他节点宣告的路由# --accept-dns=false 禁用 Tailscale 的 DNS 功能,保留本地 DNS 设置# --advertise-routes 向网络宣告本地子网路由,使其他节点可访问该子网# --hostname 设置节点在 Tailscale 网络中的显示名称# --auth-key 使用预认证密钥进行无交互式登录# --reset 重置现有配置并重新初始化# --snat-subnet-routes=falsetailscale up --login-server ${服务器地址} \ --accept-routes=true \ --accept-dns=false \ --advertise-routes=172.28.0.0/16 \ --snat-subnet-routes=false --hostname=aliyun-ecs-1 \ --auth-key=${密钥} \ --reset—snat-subnet-routes=false 视情况加, 阿里云 RDS 如果只允许内网访问,需要 —snat-subnet-routes=true
macos tailscale 设置
启用命令行


通过事先创建好的 preauthkey 加入到网络
tailscale login --login-server https://${服务器地址} --auth-key ${密钥}添加成功后客户显示

iStoreOS tailscale 设置
官方 iStore 商店中安装的版本太老,需要 在官方地址 下载对应版本, 手动更新替换 /usr/sbin/tailscale /usr/sbin/tailscaled
cp tailscale /usr/sbin/cp tailscaled /usr/sbin/ssh 登录后通过以下命令进行登录
# --login-server 指定自托管的 Headscale 控制服务器地址# --accept-routes=true 启用路由接受功能,允许接收其他节点宣告的路由# --accept-dns=false 禁用 Tailscale 的 DNS 功能,保留本地 DNS 设置# --advertise-routes 向网络宣告本地子网路由,使其他节点可访问该子网# --hostname 设置节点在 Tailscale 网络中的显示名称# --auth-key 使用预认证密钥进行无交互式登录 通过 docker compose -f docker-compose/docker-compose.vps.yml exec headscale headscale authkey create -u 1 生成# --reset 重置现有配置并重新初始化# --snat-subnet-routes=falsetailscale up --login-server 'https://{服务器}' \--accept-routes=true \--accept-dns=false \--advertise-routes=192.168.50.0/24 \--snat-subnet-routes=false \--hostname=iStoreOS \--authkey={密钥} \--reset📎 参考文章
文章分享
如果这篇文章对你有帮助,欢迎分享给更多人!
相关文章智能推荐
1
我家当前的家庭网络部署:N5105 PVE、iKuai 与 iStoreOS 的分工
网络记录家中 N5105/PVE 网络设备的实际分工:iKuai 负责拨号、NAT 和默认出口,iStoreOS 负责旁路网关、Tailscale 接入以及部分终端的定向流量出口。
2
从 cc-connect 看 Codex CLI 的交互模式:stdin、stdio 与 HTTP
AI以 cc-connect 调用 Codex CLI 为例,拆解 exec、app-server、stdin/stdout 和 JSON-RPC,再和 HTTP 的通信模型做对照。
3
把 MCPHub 部署在 Homelab 上:统一管理 MCP 服务的实际体验
AI记录我把 Linear、Cloudflare、Bytebase 等 MCP 服务集中部署到 Homelab 后,解决多设备重复配置、token 分散和 MCP 地址过多问题的实际体验。
4
企业为什么需要 MCPHub:从统一接入到工具治理
企业AI从 MCP 服务集中接入、凭据治理、分组授权、监控审计和运维边界出发,讨论 MCPHub 在企业 AI 工具治理中的实际价值与局限。
5
什么是 MCP:从工具调用到标准化上下文协议
企业AI从协议分层、工具与 MCP 的区别,到 HTTP MCP 服务的 OAuth 授权发现流程,梳理 Agent 接入 MCP 时真正需要理解的标准和边界。
随机文章随机推荐
