惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Stack Overflow Blog
Stack Overflow Blog
WordPress大学
WordPress大学
罗磊的独立博客
S
Secure Thoughts
Schneier on Security
Schneier on Security
博客园 - Franky
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
爱范儿
爱范儿
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News: Ask HN
Hacker News: Ask HN
PCI Perspectives
PCI Perspectives
Google DeepMind News
Google DeepMind News
S
Security Affairs
SecWiki News
SecWiki News
博客园 - 聂微东
Security Archives - TechRepublic
Security Archives - TechRepublic
Google Online Security Blog
Google Online Security Blog
H
Heimdal Security Blog
S
Security @ Cisco Blogs
Engineering at Meta
Engineering at Meta
C
CXSECURITY Database RSS Feed - CXSecurity.com
Cloudbric
Cloudbric
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
V
Visual Studio Blog
P
Proofpoint News Feed
Project Zero
Project Zero
T
Threat Research - Cisco Blogs
Webroot Blog
Webroot Blog
Blog — PlanetScale
Blog — PlanetScale
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
W
WeLiveSecurity
Last Week in AI
Last Week in AI
月光博客
月光博客
Microsoft Azure Blog
Microsoft Azure Blog
M
MIT News - Artificial intelligence
有赞技术团队
有赞技术团队
S
Securelist
GbyAI
GbyAI
Application and Cybersecurity Blog
Application and Cybersecurity Blog
C
CERT Recently Published Vulnerability Notes
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyberwarzone
Cyberwarzone
B
Blog RSS Feed
P
Palo Alto Networks Blog
H
Hacker News: Front Page
D
Docker
雷峰网
雷峰网
Latest news
Latest news
Microsoft Security Blog
Microsoft Security Blog

泠泫凝的异次元空间

通过串口安装Linux | 泠泫凝的异次元空间 curl自编译 | 泠泫凝的异次元空间 Minecraft 认证服务器代理 | 泠泫凝的异次元空间 飞塔分流配置实战 | 泠泫凝的异次元空间 Windows 安全启动证书检查 | 泠泫凝的异次元空间 Lxn-OneDriveCLI | 泠泫凝的异次元空间 华三交换机配置 ERPS 环网 | 泠泫凝的异次元空间 PVE 配置 VLAN 感知 | 泠泫凝的异次元空间 MT7922 无线网卡安装 | 泠泫凝的异次元空间 无显示输出 Linux 主机配置桌面显示 | 泠泫凝的异次元空间 Wireguard 部署 SOP 手册(自用) | 泠泫凝的异次元空间 Zabbix 7.4 通过钉钉发送告警提醒 | 泠泫凝的异次元空间 Debian with xfce 通过 VNC 共享屏幕 华三S6860 IRF堆叠 | 泠泫凝的异次元空间 iPad 应用侧载 | 泠泫凝的异次元空间 Smart DNS 分区解析 | 泠泫凝的异次元空间 建立 NFS 服务器并挂载到客户端 | 泠泫凝的异次元空间 将 Android 以 MTP 方式连接至 Debian PVE 虚拟机迁移至 vCenter | 泠泫凝的异次元空间 vCenter 虚拟机迁移至 PVE | 泠泫凝的异次元空间 PVE迁移时提示密钥验证失败 | 泠泫凝的异次元空间 修改Windows设备设置区域 | 泠泫凝的异次元空间 恢复 SecureCRT 7.x 保存的密码 | 泠泫凝的异次元空间 PVE 超融合下电与上电流程 | 泠泫凝的异次元空间 记一次Zabbix异常处理 | 泠泫凝的异次元空间 苹果设备保存SHSH2 | 泠泫凝的异次元空间 PVE超融合部署 | 泠泫凝的异次元空间 树莓派启用zram | 泠泫凝的异次元空间 在 Hyper-V 上安装 EVE-NG | 泠泫凝的异次元空间 Zabbix 部署与 Windows 硬件信息收集 | 泠泫凝的异次元空间 在WSL2中安装CUDA支持 | 泠泫凝的异次元空间 MinIO 集群部署 | 泠泫凝的异次元空间 vmware 虚拟化平台备份工具 Veeam 12 安装及配置 ubuntu 24.04 安装 nVidia 驱动后网卡消失 XMRig 自编译 | 泠泫凝的异次元空间 云桌面通过组策略统一体验配置 | 泠泫凝的异次元空间 Fortigate SSLVPN 无法连接内网 VNC 服务器 CentOS 7 使用镜像作为本地源并将自身作为YUM源服务器 | 泠泫凝的异次元空间 CentOS 7 离线更新 OpenSSH 服务 使用KubeKey离线部署Kubernetes | 泠泫凝的异次元空间 使用PGP对消息进行签名 | 泠泫凝的异次元空间 禁止MinIO展示桶内文件列表 | 泠泫凝的异次元空间 华为 Fusion Access 云桌面部署 | 泠泫凝的异次元空间 vmware Horizon 模板机部署 | 泠泫凝的异次元空间 vmware Horizon 云桌面与云应用部署 | 泠泫凝的异次元空间 Citrix XenApp 云应用交付 | 泠泫凝的异次元空间 Citrix XenDesktop 云桌面部署 | 泠泫凝的异次元空间 PVE LVM 扩容 | 泠泫凝的异次元空间 Linux 网络聚合(bond方式) | 泠泫凝的异次元空间 Citrix XenServer 7.2 部署教程 | 泠泫凝的异次元空间 在 Windows Server 2019 上安装 AMD 显卡驱动 openEuler 安装并使用 EPEL 源 | 泠泫凝的异次元空间 从已有Linux系统创建带桌面环境的Docker镜像 | 泠泫凝的异次元空间 下载联想原厂镜像及解密 | 泠泫凝的异次元空间 在基于 arm 架构的服务器上安装 PVE | 泠泫凝的异次元空间 自制 EVE-NG 镜像 | 泠泫凝的异次元空间 不使用 Snap 在 ubuntu 上安装 Chromium 浏览器 Fortigate 6.2 固件从 PPPoE 获得 IPv6 地址 Fortigate 手记 | 泠泫凝的异次元空间 Fortigate 通过命令行自定义 NTP 服务器 | 泠泫凝的异次元空间 arm 架构 CentOS 7 安装 MySQL 5.7 版本 ubuntu 20 安装计算卡驱动和 CUDA Toolkit 锐捷诺客云添加设备后一直显示“等待同步” | 泠泫凝的异次元空间 Windows 10 自动登录 | 泠泫凝的异次元空间 OpenWRT IPv6 防火墙设置 | 泠泫凝的异次元空间 k8s 部署踩坑合集 | 泠泫凝的异次元空间 改变 Ubuntu TTY 终端字体 | 泠泫凝的异次元空间 Parted 无损扩容磁盘分区 | 泠泫凝的异次元空间 NTP服务器测试 | 泠泫凝的异次元空间 【相亲相爱】2024祝大家!新年快乐!!! ESXi中重新挂载数据盘 | 泠泫凝的异次元空间 使用 MediaMTX + RTSP 搭建低延迟直播服务器 Firewalld 手记 | 泠泫凝的异次元空间 Ubuntu 上不使用 snapd 安装 Firefox 在 armbian 上安装 xfce 和 VNC 做远程桌面 在 ubuntu 20 上使用 TigerVNC 做远程桌面 在 openEuler 上部署安装 openGauss | 泠泫凝的异次元空间 Wireguard 组网笔记 | 泠泫凝的异次元空间 让特定IP(段)走VPN连接 | 泠泫凝的异次元空间 在Wireguard中排除部分IP(段) | 泠泫凝的异次元空间 CentOS 7 上升级 OpenSSL | 泠泫凝的异次元空间 将黑群晖部署到ESXi(笔记) | 泠泫凝的异次元空间 apk 代码反编译笔记 | 泠泫凝的异次元空间 Windows 搭建 iSCSI 服务器全攻略 | 泠泫凝的异次元空间 CentOS 7 编译安装 Python 3 开源语音识别工具 Whisper | 泠泫凝的异次元空间 Ubuntu 下 Python 编译安装及关联问题解决 | 泠泫凝的异次元空间 Ansible Tower 安装 | 泠泫凝的异次元空间 提高 PowerPoint 导出到图片时的分辨率 | 泠泫凝的异次元空间 利用亚马逊云服务器和VPC 构建安全可靠的虚拟网络 | 泠泫凝的异次元空间 Windows Server 多网卡链路聚合 | 泠泫凝的异次元空间 MT3000路由+移远EC20模块体验 | 泠泫凝的异次元空间 Python安装依赖时出现ctype问题 | 泠泫凝的异次元空间 GL-MT3000日用设置 | 泠泫凝的异次元空间 解除 vCenter 的最低内存限制 | 泠泫凝的异次元空间 跳过Windows 11的强制联网和账户登录 | 泠泫凝的异次元空间 Cloudflare Trace API 信息详解 | 泠泫凝的异次元空间 在CentOS中搭建由nginx反代和Apache2作为后端的Wordpress | 泠泫凝的异次元空间 通过nginx进行文件共享 | 泠泫凝的异次元空间 禁用 sudo 时密码认证 | 泠泫凝的异次元空间
【Headscale】自部署 Tailscale 服务端 | 泠泫凝的异次元空间
Lxn's Area · 2022-04-27 · via 泠泫凝的异次元空间

自部署开源 Tailscale 服务端 —— Headscale。

Tailscale 是一个优秀的内网穿透和异地组网工具,基于 Wireguard ,配合 Tailscale 的穿透策略,基本上可以应用于大多数NAT场景。

Tailscale 是一款商用产品,对个人提供免费服务,就个人使用来说基本上是完全够用了(限制20台设备)。但是其后端服务器全都位于国外,在国内延迟实在有点高,而且完全依赖于第三方SSO认证,且官方支持的SSO平台也都在国外,在国内每况愈下的网络环境想快速的连接这些平台实在是有些困难,于是我们就需要自己部署后端了。

有人认为 Tailscale 后台不开源不够透明不够开放,于是自行开发了一套后端,命名为Headscale,很恶趣味的名字,这套后端完全开源,可自行部署,最重要的是比 Netmaker 部署要容易得多,而且打洞失败可以自动转中继,比较智能。

配置服务端

基础配置

下载 Headscale 的服务端二进制文件:Github Release

目前官方支持arm架构(意味着可以部署在路由器和其他嵌入式设备上)和x86架构,原则上来说可以部署在任一节点上,但这里建议部署在具有公网IP的、没有NAT的服务器上以确保服务的稳定性。

将下载好的二进制文件移动到/usr/local/bin/目录下并改名headscale,然后进行部署准备:

1
2
3
4
5
6
7
8

chmod +x /usr/local/bin/headscale

mkdir -p /etc/headscale

mkdir -p /var/lib/headscale

touch /var/lib/headscale/db.sqlite

下载 示例配置文件 存放到/etc/headscale/目录下并改名config.yaml,需要修改的配置项如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

server_url: http://<server_Address>:8080

ip_prefixes:
- fd7a:115c:a1e0::/48
- 10.249.249.0/16

dns_config:
nameservers:
- 114.114.114.114

magic_dns: false

unix_socket: /var/run/headscale/headscale.sock

接着再创建 gRPC socket :

1
2
mkdir /var/run/headscale
touch /var/run/headscale/headscale.sock

权限和安全配置(可选):

1
2
3
4

adduser --no-create-home --disabled-login --shell /sbin/nologin --disabled-password headscale

chown -R headscale:headscale /var/lib/headscale

此时就可以试运行一下 Headscale 了:

1
headscale serve

如果没有报错就可以进入下一步了。

后台和开机自启

新建Service文件:/etc/systemd/system/headscale.service

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[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


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

随后启动即可:

1
2
3
4
5
6

systemctl start headscale

systemctl enable headscale

systemctl status headscle

新建命名空间(Tailnet)

Tailscale 中有一个概念叫 tailnet,你可以理解成租户,租户与租户之间是相互隔离的,具体看参考 Tailscale 的官方文档: What is a tailnet 。Headscale 也有类似的实现叫 namespace,即命名空间。我们需要先创建一个 namespace,以便后续客户端接入。

创建命名空间:

1
2

headscale namespaces create <namespace>

查看命名空间:

1
headscale namespaces list

配置客户端

支持的客户端

并非全部客户端都支持(或全部支持)将 Headscale 作为后端,目前适配情况如下:

操作系统支持情况解决方案
Linux原生支持
Windows修改注册表
macOS需要添加描述文件
Android需要自编译APK
iOS目前不支持

查询已注册的节点

在经过下面的步骤注册完客户端后可通过这条命令查询已注册的节点:

1
headscale nodes list

输出:

1
2
3
4
5
6
ID | Name                      | NodeKey | Namespace | IP addresses  | Ephemeral | Last seen           | Online  | Expired
1 | lxn-testbench-ubuntu-v34 | [0] | main | 192.168.5.1 | false | 2022-04-27 00:59:57 | offline | no
2 | lxn-testbench-windows-v35 | [0] | main | 192.168.5.2 | false | 2022-04-27 06:04:50 | online | no
3 | lxn-testbench-macos-v37 | [0] | main | 192.168.5.3 | false | 2022-04-27 08:33:23 | offline | no
4 | lxn-testbench-ubuntu-v36 | [0] | main | 192.168.5.4 | false | 2022-04-27 09:22:11 | online | no
5 | lxn-testbench-mia5-v11 | [0] | main | 192.168.5.6 | false | 2022-04-27 11:49:33 | online | no

Linux

这一小节操作基于 Ubuntu 20.04(Focal) LTS Desktop Edition。

先下载Linux的Tailscale客户端,可以使用官方的一键脚本:

1
curl -fsSL https://tailscale.com/install.sh | sh

其他的安装说明和安装包下载可以在 Tailscale Packages - stable track 找到。

安装完成后可以执行如下命令将 Tailscale 加入 Headscale 网络:

1
2

tailscale up --login-server=http://<server_Address>:8080 --accept-routes=true --accept-dns=false

如果连接成功会有如下输出:

1
2
3
4
5
6
root@lxn-testbench-v35:~# tailscale up --login-server=http://0.0.0.0:8080 --accept-routes=true --accept-dns=false

To authenticate, visit:

http://0.0.0.0:8080/register?key=0

把这段网址复制到浏览器打开,会返回如下输出:

1
2
3
4
5
headscale
Machine registration
Run the command below in the headscale server to add this machine to your network:

headscale -n NAMESPACE nodes register --key 0

把最后一行的命令复制到 headscale 服务器上并将NAMESPACE替换为刚才创建的命名空间后执行,执行成功后会返回Machine register,同时在客户机上也应该有返回输出Success.,之后再按照上面查看已连接客户端的方法在服务端查询确认设备在线就可以了。

Windows

这一小节操作基于 Windows 11 Dev。

先下载 Windows 的 Tailscale 客户端,下载地址 ,下载后正常安装即可,不必登录。找到状态栏右下角的Tailscale图标,右键退出。

然后在客户端浏览器上打开http://<server_Address>:8080/windows,并按照屏幕提示添加对应的注册表项或下载导入由服务器提供的注册表文件,随后再重新打开 Tailscale 客户端。

由于众所周知的原因,国内可能无法正常连接到Github,某些必要的文件也就无法从Github下载。如果此时无法正常打开http://<server_Address>:8080/windows请按照如下方法添加注册表项。

打开命令提示符(管理员),输入以下命令:

1
2
3
REG ADD "HKLM\Software\Tailscale IPN" /v UnattendedMode /t REG_SZ /d always
# 将<server_Address>替换为你服务器的地址
REG ADD "HKLM\Software\Tailscale IPN" /v LoginURL /t REG_SZ /d "http://<server_Address>:8080"

此时右键Tailscale的托盘图标,点击登录(Log in…),会返回如下输出:

1
2
3
4
5
headscale
Machine registration
Run the command below in the headscale server to add this machine to your network:

headscale -n NAMESPACE nodes register --key 0

把最后一行的命令复制到 headscale 服务器上并将NAMESPACE替换为刚才创建的命名空间后执行,执行成功后会返回Machine register,同时在客户机上Tailscale的托盘图标也会发生变化,右键可以看到Connected字样,之后再按照上面查看已连接客户端的方法在服务端查询确认设备在线就可以了。

macOS

这一小节的操作基于 macOS 12.5.7。

macOS加入Headscale网络的方式可能略显麻烦,因为需要一个美区的Apple ID,据说国区是没有 Tailscale 这个软件的。

直接在App Store下载 Tailscale ,下载后正常安装即可,不必登录,也先不要打开 Tailscale 。

在客户端的浏览器上打开http://<server_Address>:8080/apple,并按照屏幕提示在 Terminal 做相应的操作或直接下载导入由服务器提供的描述文件,随后打开 Tailscale 客户端。

由于众所周知的原因,国内可能无法正常连接到Github,某些必要的文件也就无法从Github下载。如果此时无法正常打开http://<server_Address>:8080/apple请按照如下方法添加注册表项。

打开 Terminal (终端),输入以下命令:

1
defaults write io.tailscale.ipn.macos ControlURL http://<server_Address>:8080

然后打开 Tailscale ,点击Get StartAllow VPN ConfigurationsSign in to your network,然后会自动打开Safari,把最后一行的命令复制到 headscale 服务器上并将NAMESPACE替换为刚才创建的命名空间后执行,执行成功后会返回Machine register,同时在客户机上Tailscale的托盘图标上的感叹号会消失,右键可以看到Connected字样,之后再按照上面查看已连接客户端的方法在服务端查询确认设备在线就可以了。

如果打开 Tailscale 后仍然是 Tailscale 官方的登录界面,则重启一下mac就可以了。

Android

这一小节的操作配置如下:
编译系统:Ubuntu 20.04 LTS Server Edition;
客户端运行环境:Android 5.1.1/MIUI 10 稳定版。

编译需要较强的性能,否则可能会被卡CPU检测Kill掉。

Android 的 Tailscale 客户端需要自行编译,方法如下:

安装依赖:

  1. 安装GoLang的步骤请看 Ubuntu 安装 Golang 最新版本

  2. 安装Git:apt update&&apt install git

首先将 Tailscale 的客户端 clone 到本地:

1
git clone https://github.com/tailscale/tailscale-android.git

(可选)预编译和运行确保没有数据错误:

1
make tailscale-debug.apk

修改后端地址。找到文件/tailscale-android/cmd/tailscale/backend.go,查找如下代码段:

1
2
3
4
5
6
func (b *backend) Start(notify func(n ipn.Notify)) error {
b.backend.SetNotifyCallback(notify)
return b.backend.Start(ipn.Options{
StateKey: "ipn-android",
})
}

修改为:

1
2
3
4
5
6
7
8
9
10
func (b *backend) Start(notify func(n ipn.Notify)) error {
b.backend.SetNotifyCallback(notify)
prefs := ipn.NewPrefs()
prefs.ControlURL = "http://<server_Address>:8080"
opts := ipn.Options{
StateKey: "ipn-android",
UpdatePrefs: prefs,
}
return b.backend.Start(opts)
}

其中<server_Address>修改为Headscale服务器的地址。

编译:

1
make tailscale-debug.apk

安装:

1
adb install tailscale-debug.apk

安装后在手机上打开,点击Get start,登录时选择Sign in with others,会自动跳转到浏览器,把最后一行的命令复制到 headscale 服务器上并将NAMESPACE替换为刚才创建的命名空间后执行,执行成功后会返回Machine register,同时在客户机上会自动跳转到主界面,将主界面上方的开关打开后,再按照上面查看已连接客户端的方法在服务端查询确认设备在线就可以了。

iOS

iOS暂不支持使用Headscale作为后端,因为Tailscale的iOS客户端没有开源,而且官方的解决方案经过尝试也是不可用的(在iOS上安装由服务端提供的描述文件),所以只能等官方适配了。

总结

Headscale 的部署方式实在是简单多了,建议大力推广

参考资料

排名不分先后

 上一篇

Linux