普通的使用方式之前写过一篇文章:开源组网工具-easytier

但是试想一下如果你有 100 个 easytier 节点,现在想批量修改一个配置,那是比较痛苦的事情。easytier-web 就是个管理控制台,可以统一在控制台管理所有节点的配置。

搭建 easytier-web 服务

官方提供的有两种服务,官方文档在:https://easytier.cn/guide/network/web-console.html

EasyTier 的 web 控制台有 2 个版本:

  • easytier-web(仅 web api 后端)
  • easytier-web-embed(web 前端 + web api 后端)

如果你只搭建 web api 后端的话,需要登录官方的前端,api 配置你的后端地址,不过都选择自建了,那就前后端一起部署吧。

我是用 docker 搭建的,但是官方的 docker 镜像写死了 entrypoint 是 easytier-core ,不能启动 easytier-web 服务,所以自己构建镜像。

dockerfile

避免镜像变大,我使用多阶段构建。

1
2
3
4
5
6
7
8
FROM alpine:latest AS downloader
ADD https://github.com/EasyTier/EasyTier/releases/download/v2.6.1/easytier-linux-x86_64-v2.6.1.zip /
RUN unzip /easytier-linux-x86_64-v2.6.1.zip && \
mv /easytier-linux-x86_64 /easytier

FROM alpine:latest
COPY --from=downloader /easytier /easytier
WORKDIR /easytier

启动服务

1
2
3
4
5
6
7
8
9
10
11
12
13
docker run --name easytier-web -d \
-e TZ=Asia/Shanghai \
--network iuxt \
-p 22020:22020/udp \
-v ./data:/easytier/data \
--restart=always \
iuxt/easytier:2.6.1 \
/easytier/easytier-web-embed \
--db /easytier/data/et.db \
--api-server-port 11211 \
--api-host https://et.example.com \
--config-server-port 22020 \
--config-server-protocol udp

说明

  1. 我指定了 docker network ,是为了和 nginx 镜像放在同一个网络下,入口统一是 nginx,配置 tls 证书和 mtls 双向认证。
  2. udp 22020 端口是分发配置的端口,映射到公网。
  3. data 目录存储的是数据库,记录的是控制台账号密码以及机器的配置信息。
  4. --api-server-port 11211 这个是指定的 web 控制台界面的端口。
  5. --api-host https://et.example.com 这个是对外的控制台地址。

配置 nginx 入口

控制台我用了 nginx 反向代理,有两个好处:

  1. 可以配置 tls 证书,https 安全访问。
  2. 配置 mtls 双向认证,只有携带客户端证书才可以访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
server {
listen 443 ssl;
server_name et.example.com;
client_max_body_size 0;

ssl_certificate ssl/example.com.crt;
ssl_certificate_key ssl/example.com.key;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_session_timeout 10m;
add_header Strict-Transport-Security "max-age=31536000";
error_page 497 https://$host$request_uri;

ssl_client_certificate ssl/ca.crt; # 配置 CA 证书,用于验证客户端证书的签发者
ssl_verify_client on; # 启用客户端证书验证
ssl_crl ssl/crl.pem; # 配置 CRL 文件路径,用于检查吊销的证书

location / {
proxy_set_header Host $http_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;

proxy_cache_convert_head off;

proxy_connect_timeout 300;
proxy_http_version 1.1;
proxy_set_header Connection "";
chunked_transfer_encoding off;

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

proxy_pass http://easytier-web:11211;
}
}

客户端接入

客户端启动的时候,只需要指定参数即可接入。

1
2
3
4
5
6
7
8
docker run --name easytier-core -d \
--network host \
-e TZ=Asia/Shanghai \
-v /etc/machine-id:/etc/machine-id \
--privileged \
--restart=always \
easytier/easytier:v2.6.1 \
-w udp://et.example.com:22020/yourusername

说明:

  1. 挂载了/etc/machine-id,控制台上的 machine id 是根据这个生成的,为了避免容器重新创建的时候 id 发生变化,所以挂载此文件,或者手动指定 machine id ,增加参数:--machine-id
  2. -w udp://et.example.com:22020/yourusername 这里是控制台的配置下发地址,和你的控制台上注册的用户名。

控制台设置

第一步先注册、登录控制台。
接入了节点后,在控制台可以看到节点的信息:
image.png

点击设置按钮,create network,配置好后点击保存即可。后续可以在控制台修改配置,无须更新节点。
image.png