1. headscale文件下载
# 下载地址 尽量选择新版本下载
https://github.com/juanfont/headscale/tags
linux机器下载上图选中文件
或者使用命令下载
wget --output-document=/usr/local/bin/headscale \
https://github.com/juanfont/headscale/releases/download/v<HEADSCALE VERSION>/headscale_<HEADSCALE VERSION>_linux_<ARCH>
< HEADSCALE VERSION> 为版本号
< ARCH> 为支持平台
2. 上传并赋予文件权限
上传 headscale_xxxx_linux_xxx 文件到服务器/usr/local/bin目录下并重命名为headscale
并赋予文件权限
服务器使用命令下载的无需上传
chmod +x /usr/local/bin/headscale
3. 创建以及修改相关配置文件
3.1 创建配置目录:
mkdir -p /etc/headscale
3.2 创建目录用来存储数据与证书:
mkdir -p /var/lib/headscale
3.3 创建空的 SQLite 数据库文件:
touch /var/lib/headscale/db.sqlite
3.4 创建 Headscale 配置文件:
# 下载官方的配置文件
wget https://github.com/juanfont/headscale/raw/main/config-example.yaml -O /etc/headscale/config.yaml
-
修改配置文件,将 server_url 改为公网 IP 或域名。如果是国内服务器,域名必须要备案。我的域名无法备案,所以我就直接用公网 IP 了。
-
server_url 设置为 http://<PUBLIC_IP>:8080,将 <PUBLIC_IP> 替换为公网 IP 或者域名。
-
若是listen_addr为127.0.0.1:8080,需要改为listen_addr: 0.0.0.0:8080,监听本地,后期url访问将会无效。
-
如果暂时用不到 DNS 功能,可以先将 magic_dns 设为 false。
-
可自定义私有网段,也可同时开启 IPv4 和 IPv6:
ip_prefixes:
# - fd7a:115c:a1e0::/48
- 10.1.0.0/16
3.5 创建 SystemD service 配置文件:
本人使用官网的的.service无法访问,就不再创建headscale用户和用户组,直接进行启动,所以跳过3.6,3.7步,也将 User,Group,NoNewPrivileges,PrivateTmp,ProtectSystem,ProtectHome,AmbientCapabilities 等参数给注释掉了;这一点自己看需要调整,下图的几个参数都是可选的,不一定需要。
# /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
3.6 创建 headscale 用户
useradd headscale -d /home/headscale -m
3.7 修改 /var/lib/headscale 目录的 owner
chown -R headscale:headscale /var/lib/headscale
3.8 修改配置文件中的 unix_socket
进入配置文件
vim /etc/headscale/config.yaml
unix_socket: /var/run/headscale/headscale.sock
4 启动及运行
4.1 Reload SystemD 以加载新的配置文件:
systemctl daemon-reload
4.2 启动 Headscale 服务并设置开机自启:
systemctl enable --now headscale
4.3 查看运行状态:
systemctl status headscale
4.4 查看占用端口:
ss -tulnp|grep headscale
Tailscale 中有一个概念叫 tailnet,你可以理解成租户,租户与租户之间是相互隔离的,具体看参考 Tailscale 的官方文档: What is a tailnet。Headscale 也有类似的实现叫 namespace,即命名空间。我们需要先创建一个 namespace,以便后续客户端接入,例如:
headscale namespaces create default
4.5 查看命名空间:
headscale namespaces list
ID | Name | Created
1 | default | 2022-03-09 06:12:06
4.6 查看、删除节点:
#查看
headscale nodes list
#删除
headscale nodes delete -i <节点id>
5 客户端接入
目前除了 iOS 客户端,其他平台的客户端都有办法自定义 Tailscale 的控制服务器。
OS | 是否支持 Headscale |
---|---|
Linux | Yes |
OpenBSD | Yes |
FreeBSD | Yes |
macOS | Yes |
Windows | Yes 参考 Windows 客户端文档 |
Android | 需要自己编译客户端 |
iOS | 暂不支持 |
官方静态编译的二进制文件
5.1 linux 接入
5.1.1下载
wget https://pkgs.tailscale.com/stable/tailscale_1.22.2_amd64.tgz
版本号可以自行更换,版本号查看
5.1.2 解压
tar zxvf tailscale_1.22.2_amd64.tgz
解压后目录
tailscale_1.22.2_amd64/
tailscale_1.22.2_amd64/tailscale
tailscale_1.22.2_amd64/tailscaled
tailscale_1.22.2_amd64/systemd/
tailscale_1.22.2_amd64/systemd/tailscaled.defaults
tailscale_1.22.2_amd64/systemd/tailscaled.service
5.1.3 将二进制文件复制到官方软件包默认的路径下,并赋予可以执行文件权限
cp tailscale_1.22.2_amd64/tailscaled /usr/sbin/tailscaled
cp tailscale_1.22.2_amd64/tailscale /usr/bin/tailscale
赋予执行文件权限
chmod +x /usr/sbin/tailscaled
chmod +x /usr/bin/tailscale
5.1.4 将 systemD service 配置文件复制到系统路径下
cp tailscale_1.22.2_amd64/systemd/tailscaled.service /lib/systemd/system/tailscaled.service
5.1.5 将环境变量配置文件复制到系统路径下
cp tailscale_1.22.2_amd64/systemd/tailscaled.defaults /etc/default/tailscaled
5.1.6 刷新服务启动并设置开机自启
systemctl daemon-reload
systemctl enable --now tailscaled
systemctl status tailscaled
5.1.7 Tailscale 接入 Headscale
# 将 <HEADSCALE_PUB_IP> 换成自己的 Headscale 公网 IP 或域名
tailscale up --login-server=http://<HEADSCALE_PUB_IP>:8080 --accept-routes=true --accept-dns=false
这里推荐将 DNS 功能关闭,因为它会覆盖系统的默认 DNS。如果你对 DNS 有需求,可自己研究官方文档,这里不再赘述。
执行完上面的命令后,会出现下面的信息:
To authenticate, visit:
http://xxxxxx:8080/register?key=905cf165204800247fbd33989dbc22be95c987286c45aac303393704
1150d846
在浏览器中打开该链接,就会出现如下的界面:
将其中的命令复制粘贴到 headscale 所在机器的终端中,并将 NAMESPACE 替换为前面所创建的 namespace。
headscale -n NAMESPACE nodes register --key 905cf165204800247fbd33989dbc22be95c987286c45aac3033937041150d846
Machine register
注册成功,查看注册的节点:
headscale nodes list
ID | Name | NodeKey | Namespace | IP addresses | Ephemeral | Last seen | Onlin
e | Expired
1 | coredns | [Ew3RB] | default | 10.1.0.1 | false | 2022-03-20 09:08:58 | onlin
e | no
回到 Tailscale 客户端所在的 Linux 主机,可以看到 Tailscale 会自动创建相关的路由表和 iptables 规则。路由表可通过以下命令查看:
ip route show table 52
查看 iptables 规则:
iptables -S
-P INPUT DROP
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N ts-forward
-N ts-input
-A INPUT -j ts-input
-A FORWARD -j ts-forward
-A ts-forward -i tailscale0 -j MARK --set-xmark 0x40000/0xffffffff
-A ts-forward -m mark --mark 0x40000 -j ACCEPT
-A ts-forward -s 100.64.0.0/10 -o tailscale0 -j DROP
-A ts-forward -o tailscale0 -j ACCEPT
-A ts-input -s 10.1.0.5/32 -i lo -j ACCEPT
-A ts-input -s 100.115.92.0/23 ! -i tailscale0 -j RETURN
-A ts-input -s 100.64.0.0/10 ! -i tailscale0 -j DROP
$ iptables -S -t nat
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A ts-postrouting -m mark --mark 0x40000 -j MASQUERADE
5.2 macos 接入
macOS 有 3 种安装方法:
直接通过应用商店安装,地址: https://apps.apple.com/ca/app/tailscale/id1475387142。前提是你需要一个美区 ID。
下载 安装包直接安装,绕过应用商店。
安装开源的命令行工具 tailscale 和 tailscaled。相关链接: https://github.com/tailscale/tailscale/wiki/Tailscaled-on-macOS。
这三种安装包的核心数据包处理代码是相同的,唯一的区别在于在于打包方式以及与系统的交互方式。
应用商店里的应用运行在一个 应用沙箱中,与系统的其他部分隔离。在沙箱内,应用可以是一个 网络扩展,以实现 VPN 或者类 VPN 的功能。网络扩展实现的功能对应用商店之外的应用是无法生效的。
从 macOS 从 10.15 开始新增了 系统扩展,说白了就是运行在用户态的内核扩展,它相比于传统的网络扩展增强了很多功能,比如内容过滤、透明代理、DNS 代理等。Tailscale 独立于应用商店的安装包使用的就是系统扩展,通过 DMG 或者 zip 压缩包进行分发。
相关对比参考
5.2.1 下载
下载地址
解压出来后,将xxxxx.app拖入应用程序里
5.2.2 下载并修改配置文件
Headscale 已经给我们提供了详细的操作步骤,你只需要在浏览器中打开 URL:http://<HEADSCALE_PUB_IP>:8080/apple,便会出现如下的界面:
如下图
使用文本编辑器打开并修改下载的配置文件:
非应用商店版本的 macOS 客户端需要将 io.tailscale.ipn.macos 替换为 io.tailscale.ipn.macsys
安装配置文件
打开设置,搜索配置文件,进行安装headscale配置文件,安装结束后。
搜索隐私和安全性,允许tailscale运行。
5.2.3 退出重启tailscale,并login
改完成后重启 Tailscale 客户端,在 macOS 顶部状态栏中找到 Tailscale 并点击,然后再点击 Log in。
然后立马就会跳转到浏览器并打开一个页面。
若没有跳出以下界面,可能是在设置中的隐私和安全性,没有允许tailscale运行。去设置先允许,在退出重新login。
接下来与之前 Linux 客户端相同,回到 Headscale 所在的机器执行浏览器中的命令即可,注册成功:
回到 Headscale 服务器主机,查看注册的节点:
headscale nodes list
ID | Name | NodeKey | Namespace | IP addresses | Ephemeral | Last seen | Onlin
e | Expired
1 | coredns | [Ew3RB] | default | 10.1.0.1 | false | 2022-03-20 09:08:58 | onlin
e | no
2 | carsondemacbook-pro | [k7bzX] | default | 10.1.0.2 | false | 2022-03-20 09:48:30 | online | no
回到 macOS,测试是否能 ping 通对端节点:
ping -c 2 10.1.0.1
PING 10.1.0.1 (10.1.0.1): 56 data bytes
64 bytes from 10.1.0.1: icmp_seq=0 ttl=64 time=37.025 ms
64 bytes from 10.1.0.1: icmp_seq=1 ttl=64 time=38.181 ms
--- 10.1.0.1 ping statistics ---
2 packets transmitted, 2 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 37.025/37.603/38.181/0.578 ms
也可以使用 Tailscale CLI 来测试:
/Applications/Tailscale.app/Contents/MacOS/Tailscale ping 10.1.0.1
pong from coredns (10.1.0.1) via xxxx:41641 in 36ms
其他相关的接入方式可以参考点击跳转文章来源:https://www.toymoban.com/news/detail-447660.html
若有机会,后期我会继续完善文章来源地址https://www.toymoban.com/news/detail-447660.html
到了这里,关于headscale的部署方法和使用教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!