一、概述

Tailscale 是一款基于 Wireguard协议构建的现代异地组网工具,和使用原生wireguard不同的是Tailscale支持NAT穿透。使用Tailscale几乎支持90%的NAT网络穿透,在不支持NAT穿透的网络情况下则可以通过DERP进行流量中继,这几乎是一个当下非常完美的组网方案。Tailscale除了没有开源Windows和macOS/iOS的GUI客户端,但是DERP和控制服务器都能够通过自建的方式进行自托管。Tailscale控制服务器充当 Tailscale 网络中节点的 Wireguard 公钥交换点。它分配客户端的 IP 地址、在每个用户之间创建边界、允许用户之间共享机器,并公开节点的通告路由。本文即将介绍Headscale,它是由 Kristoffer Dalby 和 Juan Font开发基于Tailscale控制服务器的替代开源版本

二、使用容器构建Headscale

docker run  \
  --restart always \
  --name headscale \
  -v ~/headscale/config:/etc/headscale/ \
  -v ~/headscale/data:/var/lib/headscale \
  -p 8080:8080 \
  -p 9090:9090 \
  -d headscale/headscale:0.22.3 \
  headscale serve
  • 参数说明

    • -p 8080:8080 登录地址使用端口
    • -v ~/headscale/config:/etc/headscale/ 挂载配置目录
    • -v ~/headscale/data:/var/lib/headscale 挂载存储目录
  • 推荐使用命令

    • docker exec -it headscale headscale configtest 测试配置语法是否正常
    • docker exec -it headscale headscale apikey create 创建apikey用于登录web界面

三、安装WEB-UI

目前推荐使用的Web UI - Headscale,本教程搭建的为headscale-admin

image.png

docker run  --restart always  -d -p 8000:80 goodieshq/headscale-admin:latest
  • 参数说明

    • -p 8000:80 8000端口用来做反向代理

四、配置nginx

注意查看这段nginx配置文件,需要你准备SSL证书到/etc/nginx/ssl/目录,请提前准备,你也可以指定使用其它目录

map $http_upgrade $connection_upgrade {
    default      keep-alive;
    'websocket'  upgrade;
    ''           close;
}

server {
        listen 80;
        listen 443 ssl;
        server_name {替换成你的域名};
        ssl_certificate  /etc/nginx/ssl/{替换成你的域名}.pem;
        ssl_certificate_key  /etc/nginx/ssl/{替换成你的域名}.key;
           
        location /admin {
            proxy_pass http://127.0.0.1:8000;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header Host $server_name;
            proxy_redirect http:// https://;
            proxy_buffering off;
            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 $http_x_forwarded_proto;
            add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
        }


        
        location / {

            proxy_pass http://127.0.0.1:8080;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_set_header Host $server_name;
            proxy_redirect http:// https://;
            proxy_buffering off;
            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 $http_x_forwarded_proto;
            add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;

        }
        

}

当然你也使用除nginx之外的反向代理工具,配置好nginx之后,使用浏览器进行访问 https://{替换成你的域名} 即可,然后在设置里面配置好api key,如何获取在第二部分有提供命令

五、headscale配置文件简单讲解

  • listen_addr: 127.0.0.1:8080 headscale监听端口
  • ip_prefixes: 客户端地址划分
  • derp下的urls 为Tailscale官方DERP服务器节点信息
  • derp下的paths 可以自定义为你自己的DERP节点
  • randomize_client_port 是否开启随机端口号,建议开启

六、参考链接

最后修改:2024 年 06 月 07 日
如果觉得我的文章对你有用,请随意赞赏