配置环境
服务器环境 Ubuntu 22.04.3 LTS
(没有服务器可以去试用一下,学生优惠普遍都很便宜)
用root用户可以直接按顺序复制
设备架构
root@***:~# uname -m
x86_64
安装docker及docker-compose
安装docker
- 更新包列表:
sudo apt-get update
- 安装必要的依赖:
sudo apt-get install apt-transport-https ca-certificates curl software-properties-common
- 添加Docker官方GPG密钥:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
- 设置稳定存储库:
echo "deb [signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
- 安装Docker引擎:
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
- 验证安装:
sudo docker run hello-world
安装docker-compose
- 下载最新版本的Docker:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
网速慢可以直接下载到win主机用scp上传
https://github.com/docker/compose/releases/latest/download/docker-compose-(uname-s)-(uname -m)
scp -P 22 -i 密匙文件路径 "下载文件路径" root@<ip>:/usr/local/bin/docker-compose
- 赋予执行权限:
sudo chmod +x /usr/local/bin/docker-compose
- 赋予执行权限:
sudo chmod +x /usr/local/bin/docker-compose
配置headscale与管理员界面
headscale仓库:
https://github.com/juanfont/headscale
headscale-webui仓库
https://github.com/iFargle/headscale-webui
- 创建路径:
cd
mkdir -p /dockermnt/headscale
mkdir -p /dockermnt/headscale/config
mkdir -p /dockermnt/headscale/data
mkdir -p /dockermnt/headscale/web-ui
其中/dockermnt可以修改为自己想要的路径,如果修改,后文相同字段也须修改
- 下载配置文件模板
wget -O /docker/headscale/conf/config.yaml https://raw.githubusercontent.com/juanfont/headscale/main/config-example.yaml
用最新版可以使用连接
老版本建议去下载对应版本的source压缩包,用解压后的config-example.yaml文件
历史版本连接
本文用的版本为v0.22.3(Source code(zip))
- 修改配置文件
cd
vim /dockermnt/headscale/config
配置文件中可以用 /配置名段进行搜索
修改以下配置:
# 改成自己的域名+路由器转发的外网端口
server_url: https://aaa.bbb.com:8080 # headscale服务地址
# aaa.bbb.com可以用公网IP设置,后面的aaa.bbb.com同样要修改
# 8080端口可以修改为自己想要的端口,后面的8080同样要修改为设置的端口
# 改成0.0.0.0:8080
listen_addr: 0.0.0.0:8080
# 改成0.0.0.0:9090
metrics_listen_addr: 0.0.0.0:9090
# 改成0.0.0.0:50443
grpc_listen_addr: 0.0.0.0:50443
ip_prefixes:
- fd7a:115c:a1e0::/48
- 10.77.0.0/24 # 10.77.0.0可以修改为自己想要的端口
derp:
server:
# 改成true
enabled: true
region_id: 999
region_code: "headscale"
region_name: "Headscale Embedded DERP"
# 改成0.0.0.0:3478
stun_listen_addr: "0.0.0.0:3478"
urls:
- https://controlplane.tailscale.com/derpmap/default
dns_config:
# List of DNS servers to expose to clients.
# 可以用自己想要的,这里给出阿里云的
nameservers:
- 223.5.5.5
- 114.114.114.114
# Defines the base domain to create the hostnames for MagicDNS.
# 改成自己的域名
base_domain: aaa.bbb.com
disable_check_updates: true #不想显示最新的版本信息可以改为true
# 改成true
randomize_client_port: true
- 创建网络
docker network create -d bridge --subnet 172.20.0.0/24 --gateway 172.20.0.254 --ip-range 172.20.0.0/25 headscale-net
其中
172.20.0.0可以修改为自己想用的地址段
headscale-net可以修改为自己想要的网络名称
如果修改,后文中的相同部分进行修改
- docker-compose.yaml文件
生成加密key
openssl rand -base64 32
复制生成的字符
vim /dockermnt/headscale/docker-compose.yaml
version: "3"
services:
headscale:
# image: headscale/headscale:<headscale版本号>
image: headscale/headscale:0.22.3
container_name: headscale
networks:
headscale-net:
ipv4_address: 172.20.0.1
volumes:
- /dockermnt/headscale/config:/etc/headscale
- /dockermnt/headscale/data:/var/lib/headscale
ports:
- '8080:8080'
- '9090:9090'
- '3478:3478/udp'
command: 'headscale serve'
restart: always
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
headscale-webui:
# image: ifargle/headscale-webui:<headscale-webui版本号>
image: ifargle/headscale-webui:latest
container_name: headscale-webui
networks:
headscale-net:
ipv4_address: 172.20.0.2
environment:
- TZ=Asia/Shanghai
- COLOR=blue-gray
- 'HS_SERVER=http://172.20.0.1:8080'
- 'DOMAIN_NAME=https://aaa.bbb.com:5050' # 端口号可以改,改了后文5050也需要修改
- SCRIPT_NAME=/admin
- KEY= #通过openssl rand -base64 32生成的内容,直接复制就可
- AUTH_TYPE=Basic
- LOG_LEVEL=info
- BASIC_AUTH_USER=设定管理页面用户名
- BASIC_AUTH_PASS=设定管理页面用户密码
volumes:
- /dockermnt/headscale/web-ui:/data:rw
- /dockermnt/headscale/config/:/etc/headscale/:ro
ports:
- '5050:5000'
restart: always
networks:
headscale-net:
external: true
直接复制有问题可以用
nano /dockermnt/headscale/docker-compose.yaml
- 防火墙放行端口
上文中的 5050,8080.9090, 3478,50443都要放行
另外再放行端口 443部分服务器防火墙需要去官方管理控制台放行 - 运行docker-compose
cd /dockermnt/headscale && docker-compose up -d
查看镜像状态
docker ps -a
如果全部是up则可以,不是则可以查看日志
docker logs headscale
修改错误后重启
cd /dockermnt/headscale && docker-compose down
cd /dockermnt/headscale && docker-compose up -d
-
进入管理页面
https://aaa.bbb.com:5050/admin
输入刚刚的docker-compose用户民和密码 -
生成密匙
docker exec -it headscale headscale apikeys create
复制密匙输入到 api中
点保存便可以,不用test
- 创建用户
docker exec -it headscale headscale ns create test-net # test-net可以修改为自己想要的
查看创建结果
docker exec -it headscale headscale ns list
在管理页面的User中看到的和输出的一致,配置便成功了
一些命令:
查看namespace列表:docker exec -it headscale headscale ns list
创建namespace:docker exec -it headscale headscale ns create test-net
删除namespace:docker exec -it headscale headscale namespace destroy default
重命名namespace:docker exec -it headscale headscale namespace rename default
本地电脑添加
所有添加指令前加上docker exec -it headscale
https://icloudnative.io/posts/how-to-set-up-or-migrate-headscale/