赞
踩
# 下载地址 尽量选择新版本下载
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> 为支持平台
上传 headscale_xxxx_linux_xxx 文件到服务器/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 或域名。如果是国内服务器,域名必须要备案。我的域名无法备案,所以我就直接用公网 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
本人使用官网的的.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
useradd headscale -d /home/headscale -m
chown -R headscale:headscale /var/lib/headscale
进入配置文件
vim /etc/headscale/config.yaml
unix_socket: /var/run/headscale/headscale.sock
systemctl daemon-reload
systemctl enable --now headscale
systemctl status headscale
ss -tulnp|grep headscale
Tailscale 中有一个概念叫 tailnet,你可以理解成租户,租户与租户之间是相互隔离的,具体看参考 Tailscale 的官方文档: What is a tailnet。Headscale 也有类似的实现叫 namespace,即命名空间。我们需要先创建一个 namespace,以便后续客户端接入,例如:
headscale namespaces create default
headscale namespaces list
ID | Name | Created
1 | default | 2022-03-09 06:12:06
#查看
headscale nodes list
#删除
headscale nodes delete -i <节点id>
目前除了 iOS 客户端,其他平台的客户端都有办法自定义 Tailscale 的控制服务器。
OS | 是否支持 Headscale |
---|---|
Linux | Yes |
OpenBSD | Yes |
FreeBSD | Yes |
macOS | Yes |
Windows | Yes 参考 Windows 客户端文档 |
Android | 需要自己编译客户端 |
iOS | 暂不支持 |
wget https://pkgs.tailscale.com/stable/tailscale_1.22.2_amd64.tgz
版本号可以自行更换,版本号查看
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
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
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 daemon-reload
systemctl enable --now tailscaled
systemctl status tailscaled
# 将 <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
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 压缩包进行分发。
相关对比参考
下载地址
解压出来后,将xxxxx.app拖入应用程序里
Headscale 已经给我们提供了详细的操作步骤,你只需要在浏览器中打开 URL:http://<HEADSCALE_PUB_IP>:8080/apple,便会出现如下的界面:
如下图
使用文本编辑器打开并修改下载的配置文件:
非应用商店版本的 macOS 客户端需要将 io.tailscale.ipn.macos 替换为 io.tailscale.ipn.macsys
安装配置文件
打开设置,搜索配置文件,进行安装headscale配置文件,安装结束后。
搜索隐私和安全性,允许tailscale运行。
改完成后重启 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
其他相关的接入方式可以参考点击跳转
若有机会,后期我会继续完善
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。