一、概述
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
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
是否开启随机端口号,建议开启