站点图标 姿势小王子

headscale异地组网工具搭建方法,外地电脑也可以像家里电脑一样访问家里局域网

相比于Tailscale,headscale虽然性能看你稍微差点,但是开源,各种限制比较少。自己用还是比价推荐的。

GitHub:https://github.com/juanfont/headscale

1、服务端安装:

#已ubuntu为例,自己将链接换成最新版的,下载最新deb安装包
wget https://github.com/juanfont/headscale/releases/download/v0.22.0-alpha2/headscale_0.22.0-alpha2_linux_amd64.deb

#安装
dpkg -i headscale_*.deb

安装过程会自动创建用户headscale。

2、服务端配置:

配置文件在:/etc/headscale/config.yaml

nano /etc/headscale/config.yaml

#修改
server_url: http://你的公网ip或者域名:8080

#自定义私有网段
ip_prefixes:
 # - fd7a:115c:a1e0::/48
  - 100.64.0.0/10

#监听地址修改为0.0.0.0,端口开源修改成自己需要的
metrics_listen_addr: 0.0.0.0:9090
listen_addr: 0.0.0.0:8080

#打开随机端口
randomize_client_port: true

#修改一下headscale.sock目录,其他文件都是保存在/var/lib/headscale,默认配置文件这里是保存到/var/run/headscale可能导致无法运行,所以要修改一下
unix_socket: /var/lib/headscale/headscale.sock

3、启动服务端:

#修改一下开机自启文件
vim /etc/systemd/system/headscale.service

#修改成以下内容
[Unit]
After=syslog.target
After=network.target
Description=headscale coordination server for Tailscale
X-Restart-Triggers=/etc/headscale/config.yaml

[Service]
Type=simple
User=root
#Group=headscale
ExecStart=/usr/bin/headscale serve
Restart=always
RestartSec=5

WorkingDirectory=/var/lib/headscale
ReadWritePaths=/var/lib/headscale /var/run

AmbientCapabilities=CAP_NET_BIND_SERVICE CAP_CHOWN
NoNewPrivileges=true
PrivateTmp=true
ProtectHome=yes
ProtectSystem=strict
RuntimeDirectory=headscale

[Install]
WantedBy=multi-user.target


#重启daemon-reload
systemctl daemon-reload

#重启一下headscale
systemctl restart headscale

#设置开机自启
systemctl enable headscale

#查看运行状态
systemctl status headscale

4、客户端安装。基本上所有客户端都能搞。

服务端先创建一个用户:

#需要先创建用户,在服务端运行:
headscale users create zsxwz
#创建一个zsxwz的用户

4.1、比如Windows版本,先安装tailscale客户端[没错就是这个客户端]:https://tailscale.com/download/windows

安装注册表:

浏览器打开:http://你服务器ip:8080/windows

根据提示修改一下注册表,或者直接下载reg文件,运行一下就可以了。

运行tailscale客户端,点击图标,浏览器会自动跳转nodekey获取地址。或者Windows cmd窗口运行:

#第一次登录,注册,Windows客户端打开cmd执行
tailscale login --login-server http://你服务器ip:8080
#打开链接获取服务端验证命令
#比如:
headscale nodes register --user USERNAME --key nodekey:8a5183bd416b2b490328595f908647fbcc0fedca5bc92424d8607ba28c1b3b75

#这边的USERNAME用户名,需要先创建,在服务端运行:
headscale users create zsxwz
#创建一个zsxwz的用户

#然后修改一下验证命令,服务端再执行
headscale nodes register --user 你创建的用户名 --key nodekey:8a5183bd416b2b490328595f908647fbcc0fedca5bc92424d8607ba28c1b3b75

#重新登录,Windows客户端执行
tailscale up --login-server http://你服务器ip:8080 --advertise-exit-node

服务端查看在线设备:

headscale nodes list

4.2、安卓客户端。也一样先安装客户端:https://play.google.com/store/apps/details?id=com.tailscale.ipn

反复点击右上角三个点,就会出现,change server,就可以使用自己的服务器。

填一下你服务器地址:http://你服务器ip:8080

然后使用sign with other登录,后面和电脑端一样,出现服务端验证命令,和上面一样操作一下就可以了。

#然后修改一下验证命令,再执行
headscale nodes register --user 你的创建的用户名 --key nodekey:xxxxxxxxxxxxxxxxxx

4.3、linux客户端,也是一样先安装tailscale,已ubuntu为例

#安装软件源
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null
curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/focal.tailscale-keyring.list | sudo tee /etc/apt/sources.list.d/tailscale.list

#安装
apt-get update
apt-get install tailscale

#第一次登录,linux客户端执行,会返回一条带nodekey的链接,记一下nodekey
tailscale login --login-server http://你服务器ip:8080

#然后修改一下验证命令,服务端再执行
headscale nodes register --user 你的创建的用户名 --key nodekey:xxxxxxxxxxxxxxxxxx

#重新登录,Linux客户端执行
tailscale up --login-server http://你服务器ip:8080 --advertise-exit-node

这样这几台设备已经是可以异地组网了,就和局域网内一样互相访问。

5、内网穿透,你的电脑A,headscale服务端B,服务端B安装一个tailheadscale客户端,这样局域网内A和B可以互相访问。如果你想让另外一台电脑C,在不加入这个局域网中,就可以访问电脑A搭建的服务,可以在服务端B,安装nginx,反代一下局域网就可以了。

nginx配置:

比如:穿透电脑A的8000端口。

server {
        listen 8000 default_server;
        server_name web1;

        location / {
            proxy_pass http://电脑A组网后局域网ip:8000;
        }
    }

6、打通局域网,比如家里Windows电脑A,安装了tailscale客户端,外地电脑B,也安装了tailscale客户端,但是家里其他设备比如nas,手机都没有安装tailscale客户端。外地电脑B也可以像家里电脑A一样访问家里局域网内的手机,nas等等设备,就可以用Windows电脑A做路由网关。

就是在外使用任何网络,也可以像在家里一样访问家里局域网内的手机,电脑,nas,路由等等。

只需要修改一下注册登录命令即可,后面服务器验证都是一样的。

家里Windows电脑A:

#如果是第一次登录,注册,192.168.0.0/24改为你局域网ip段
tailscale login --login-server http://服务器ip:8080 --accept-routes=true --accept-dns=false --advertise-routes=192.168.0.0/24

#重新登录,192.168.0.0/24改为你局域网ip段
tailscale up --login-server http://服务器ip:8080 --advertise-exit-node --accept-dns=false --advertise-routes=192.168.0.0/24

如果家里是linux电脑,或者openwrt等软路由:

上面也是一样的,只是多一个端口转发:

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

headtail服务端添加一下路由即可:

#查看路由列表,获取需要打通的局域网序号
headscale routes list

#比如打通序号1的路由
headscale routes enable -r 1
退出移动版