珂珂的个人博客 - 一个程序猿的个人网站

headscale 部署

    一直想通过公网的阿里云服务器打通和家里的网络,因为在外面不一定有ipv6, 以前知道有ZeroTier和TailScale  ,但官方服务器在国外,所以尝试私有化部署,这次使用的是headscale 没想到还折腾了很久。

官方不推荐用docker方式安装,那么按照官方的ubuntu步骤首先下载dep安装包

HEADSCALE_VERSION="" # See above URL for latest version, e.g. "X.Y.Z" (NOTE: do not add the "v" prefix!)
HEADSCALE_ARCH="" # Your system architecture, e.g. "amd64"
wget --output-document=headscale.deb \
 "https://github.com/juanfont/headscale/releases/download/v${HEADSCALE_VERSION}/headscale_${HEADSCALE_VERSION}_linux_${HEADSCALE_ARCH}.deb"

我这里用迅雷下载再上传到阿里云上面的

然后安装

sudo apt install ./headscale.deb

如果在root目录下,则会抛出警告,我这里在/home下新建了个headscale目录,把deb放进去了

然后新建个配置文件,把官方的配置文件粘贴进去

sudo nano /etc/headscale/config.yaml

我这里只把第一句改了

server_url: https://hs.kecq.com

然后启动服务

sudo systemctl enable --now headscale

这里有个坑,因为以前有尝试安装过,注意删除 /lib/systemd/system/headscale.service  不然有可能按这个配置启动了,路径什么的有可能报错

查看运行状态

sudo systemctl status headscale

跑起来后通过  https://hs.kecq.com/admin   访问,刚开始能访问不知后面为啥报404 了,一直没解决

并且windows客户端cmd运行后一直没反应....

后面阴差阳错问千问,发现可能是nginx 配置问题,下面是我的网站配置的,可能缺少了协议

        location / {
           proxy_pass http://localhost:8080;
           proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
           proxy_set_header request_uri $request_uri;
           index  index.html index.htm;
        }

正确的配置

       location / {
           proxy_pass http://127.0.0.1:8080;
           #proxy_http_version 1.1;
           proxy_set_header Upgrade $http_upgrade;
           proxy_set_header Connection "upgrade";
           
           proxy_set_header Host $host;
           proxy_set_header X-Real-IP $remote_addr;
           proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
           proxy_set_header X-Forwarded-Proto $scheme;
           index  index.html index.htm;

        }

另外安卓客户端一直没找到入口,实际上是要先登录官方账号,然后再添加

查看headscale日志

journalctl -u headscale -f -o cat

创建apikey

headscale apikeys create --expiration 9999d

好像是之前创建过再创建一次就访问不了/admin 了 ?感觉不应该

windows 安装官方客户端后运行,好像要先启动客户端再运行?

tailscale up --reset --advertise-routes=192.168.31.0/24 --login-server=https://hs.kecq.com --accept-dns --accept-routes

如果之前运行过则需要加 --reset  

然后手机再连接上,我以为这样就能通过这台windows访问所在局域网了,后面了解到还需要服务端配置

实际上没有 headscale routes 了

正确的是

headscale nodes approve-routes --identifier 1 --routes "192.168.31.0/24"

其中1 为机器ID 可以下面方式查看

headscale machines list

其它有用的命令

headscale preauthkeys create -u 1 -e 24h
tailscale up --login-server https://hs.kecq.com --authkey hskey-auth-jMaJEVcLyVWY-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
headscale nodes register --key ACJU7WFpxxxxxxxxxxxxxxxxxx --user fyj

然后windows客户端勾选Run unattended  开机自动启动,不然需要远程桌面进入到桌面才行


搭建Derp服务器

headscale 自带一个

derp:
  server:
    # If enabled, runs the embedded DERP server and merges it into the rest of the DERP config
    # The Headscale server_url defined above MUST be using https, DERP requires TLS to be in place
    enabled: false

但我这里不知设为true为何没有成功,还是保持原状false不启用,改为docker 搭建

首先在/home下新建了文件夹 derp/certs 然后将之前的证书放进来并改为域名.crt 和域名.key

然后运行

docker run --restart always \
  -p 50443:443 -p 3478:3478/udp \
  -e DERP_CERT_MODE=manual \
  -v /home/derp/certs:/app/certs \
  -e DERP_ADDR=:443 \
  -e DERP_DOMAIN=derp.kecq.com \
  -e DERP_VERIFY_CLIENTS=false \
  fredliang/derper

然后访问

然后去/etc/headscale中增加derp.yaml

regions:
  901:
    regionid: 901
    regioncode: cd
    regionname: Aliyun ChengDu
    nodes:
      - name: 1
        regionid: 901
        hostname: derp.kecq.com
        ipv4: 47.108.255.170
        stunport: 3478
        stunonly: false
        derpport: 50443

貌似 regioncode 不能为数字

然后注释掉headscale配置文件中derp的urls 增加 paths

  urls:
    #- https://controlplane.tailscale.com/derpmap/default

  # Locally available DERP map files encoded in YAML
  #
  # This option is mostly interesting for people hosting
  # their own DERP servers:
  # https://tailscale.com/kb/1118/custom-derp-servers/
  #
  # paths:
  #   - /etc/headscale/derp-example.yaml
  paths:
    - /etc/headscale/derp.yaml

然后重启服务

systemctl restart headscale

然后去客户端重新连接运行

tailscale netcheck

说明成功

阿里云上运行下面命令查看实时日志

journalctl -u headscale -f --no-pager

查看实时流量

nload eth0 -m

发现没有安装

apt install nload

但是我还是没有p2p成功...

服务器配置

randomize_client_port: true #打开以增强打洞能力

貌似也无效


上一篇:个人代码全部开源

下一篇:headscale 部署


0 评论

查看所有评论

给个评论吧