跳过正文
  1. 博客文章/

EasyTier 私有共享节点部署

·617 字·3 分钟·
DevOps Network EasyTier VPN Supervisor KCP QUIC DevOps
Zayn
作者
Zayn
专注 Kubernetes、CI/CD、可观测性等云原生技术栈,记录生产环境中的实战经验与踩坑复盘。
目录
生产变更复盘 - 这篇文章属于一个选集。
10: 本文
这套 EasyTier 私有网络由一台公网共享节点和多台客户端组成。共享节点负责发现、握手和转发,客户端主动连接并获取固定虚拟 IP。
示例使用 203.0.113.10et-private-netCHANGE_ME_NETWORK_SECRET。原始记录里的 network-secret 已经暴露过,生产环境应重新生成后再上线。

0. 部署边界
#

说明
组件EasyTier CLI / easytier-core
管理方式Supervisor
共享节点端口23451/tcp23451/udp
共享节点模式--private-mode true
客户端模式指定虚拟 IP,主动连接共享节点,--no-listener
传输优化--enable-kcp-proxy--enable-quic-proxy--use-smoltcp
示例虚拟网段10.144.66.0/24

拓扑关系:

hk-client 10.144.66.3  ── TCP/UDP 23451 ┐
                                        v
                              public-share 203.0.113.10
                                        ^
us-client 10.144.66.6  ── TCP/UDP 23451 ┘

1. 重新生成密钥
#

不要复用已经出现在聊天记录、文档或工单里的 network-secret

openssl rand -base64 32 | tr -d '=+/' | cut -c1-32

后续示例统一使用:

network-name: et-private-net
network-secret: CHANGE_ME_NETWORK_SECRET
public-server: 203.0.113.10
listen-port: 23451

network-namenetwork-secret 必须在共享节点和所有客户端上保持一致。

Supervisor 托管时不要把真实密钥直接写进 command。命令行参数可能通过 /proc/<pid>/cmdline、进程列表或程序启动日志暴露。下面的托管示例把密钥放到 root-only 配置文件中,Supervisor 只引用配置文件路径。

Review Gate:

检查项命令继续条件停止条件
端口占用ss -lntup | grep ':23451'未被未知进程占用端口冲突
防火墙nc -vz 203.0.113.10 23451 / UDP 按现场工具测TCP/UDP 放通安全组或防火墙未放通
二进制test -x /root/easytier-linux-x86_64/easytier-core可执行路径不存在
密钥人工确认 CHANGE_ME_NETWORK_SECRET 已替换所有节点一致仍是占位符或新旧不一致
密钥可见性ps -ef | grep easytier-core 和日志抽查参数、日志里看不到真实密钥密钥出现在 argv 或日志
虚拟 IP规划表检查每台客户端唯一地址冲突

2. 准备二进制
#

示例沿用解压目录:

test -x /root/easytier-linux-x86_64/easytier-core
test -x /root/easytier-linux-x86_64/easytier-cli

/root/easytier-linux-x86_64/easytier-core --version
/root/easytier-linux-x86_64/easytier-cli --version

如果要移动到 /opt/easytier/,先改 Supervisor 配置里的路径,再验证新路径可执行。

3. 配置文件
#

先创建 root-only 配置文件。这里使用 EasyTier 的 -c 配置文件模式,避免把真实 network-secret 放进启动命令和进程参数。

install -d -m 700 /etc/easytier
cat > /etc/easytier/easytier-share.toml <<'EOF'
instance_name = "easytier-share"
hostname = "easytier-share"
ipv4 = "10.144.66.1"
dhcp = false
listeners = [
  "tcp://[::]:23451",
  "udp://[::]:23451",
  "tcp://0.0.0.0:23451",
  "udp://0.0.0.0:23451"
]
rpc_portal = "127.0.0.1:15888"

[network_identity]
network_name = "et-private-net"
network_secret = "CHANGE_ME_NETWORK_SECRET"

[file_logger]
level = "off"

[flags]
private_mode = true
multi_thread = true
use_smoltcp = true
enable_kcp_proxy = true
enable_quic_proxy = true
EOF
chmod 600 /etc/easytier/easytier-share.toml

cat > /etc/easytier/easytier-hk-client.toml <<'EOF'
instance_name = "easytier-hk-client"
ipv4 = "10.144.66.3"
dhcp = false
listeners = []
hostname = "hk-client"

[[peer]]
uri = "tcp://203.0.113.10:23451"

[network_identity]
network_name = "et-private-net"
network_secret = "CHANGE_ME_NETWORK_SECRET"

[file_logger]
level = "off"

[flags]
no_listener = true
multi_thread = true
use_smoltcp = true
bind_device = false
enable_kcp_proxy = true
enable_quic_proxy = true
EOF
chmod 600 /etc/easytier/easytier-hk-client.toml

第二台客户端只换虚拟 IP:

ipv4 = "10.144.66.6"

关键配置说明:

配置项作用
[network_identity].network_name虚拟网络名称
[network_identity].network_secret网络密钥
ipv4当前节点虚拟 IP
[[peer]].uri初始连接 peer
[file_logger].level文件日志级别,生产托管默认关掉文件日志
[flags].no_listener客户端不监听端口
[flags].use_smoltcp启用用户态网络栈
[flags].enable_kcp_proxy用 KCP 优化虚拟网内 TCP
[flags].enable_quic_proxy启用 QUIC Proxy

4. 共享节点
#

共享节点需要公网可达,并开放 TCP/UDP 23451

/root/easytier-linux-x86_64/easytier-core -c /etc/easytier/easytier-share.toml

检查监听:

ss -lntup | grep ':23451'
ss -lnuap | grep ':23451'

防火墙放行:

ufw allow 23451/tcp
ufw allow 23451/udp

5. 客户端
#

客户端主动连接共享节点,不监听本地端口:

/root/easytier-linux-x86_64/easytier-core -c /etc/easytier/easytier-hk-client.toml

6. Supervisor 托管
#

安装:

apt update
apt install -y supervisor
systemctl enable --now supervisor

共享节点配置:

cat > /etc/supervisor/conf.d/easytier-share.conf <<'EOF'
[program:easytier-share]
command=/root/easytier-linux-x86_64/easytier-core -c /etc/easytier/easytier-share.toml
directory=/root
autostart=true
autorestart=true
startsecs=5
startretries=3
stopsignal=TERM
stopasgroup=true
killasgroup=true
user=root
redirect_stderr=true
stdout_logfile=/var/log/supervisor/easytier-share.log
stdout_logfile_maxbytes=5MB
stdout_logfile_backups=1
EOF
chmod 600 /etc/supervisor/conf.d/easytier-share.conf

客户端配置只把配置路径交给 Supervisor。节点名如果要跟随机器名变化,先在生成 TOML 时把 hostname 写成固定值或由配置管理工具渲染。

cat > /etc/supervisor/conf.d/easytier-hk-client.conf <<'EOF'
[program:easytier-hk-client]
command=/root/easytier-linux-x86_64/easytier-core -c /etc/easytier/easytier-hk-client.toml
directory=/root
autostart=true
autorestart=true
startsecs=5
startretries=3
stopsignal=TERM
stopasgroup=true
killasgroup=true
user=root
redirect_stderr=true
stdout_logfile=/var/log/supervisor/easytier-hk-client.log
stdout_logfile_maxbytes=5MB
stdout_logfile_backups=1
EOF
chmod 600 /etc/supervisor/conf.d/easytier-hk-client.conf

加载配置:

supervisorctl reread
supervisorctl update
supervisorctl status

上线后先查进程参数,再抽查日志。两处都不能出现真实密钥:

ps -ef | grep '[e]asytier-core'
grep -R "CHANGE_ME_NETWORK_SECRET\\|network_secret\\|network-secret" /var/log/supervisor/easytier-*.log || true

命中真实密钥时,不要继续上线。先轮换 network_secret,再清理日志保留策略,并确认 [file_logger].level = "off" 没有被后续配置覆盖。

7. 验证
#

共享节点:

supervisorctl status easytier-share
ss -lntup | grep ':23451'
ss -lnuap | grep ':23451'
tail -n 100 /var/log/supervisor/easytier-share.log

客户端:

supervisorctl status easytier-hk-client
tail -n 100 /var/log/supervisor/easytier-hk-client.log
ip addr | grep '10.144.66'

互通:

ping -c 3 10.144.66.6
ssh 10.144.66.6

查看代理状态:

/root/easytier-linux-x86_64/easytier-cli proxy

如果有虚拟网内 TCP 连接,输出里的 transport_type 可能出现 KcpQuic。KCP 和 QUIC 同时启用时,KCP 优先生效是正常现象。

验证矩阵:

验证项方法通过标准
共享节点进程supervisorctl status easytier-shareRUNNING
监听端口ss -lntupss -lnuapTCP/UDP 23451 都存在
客户端进程supervisorctl status easytier-hk-clientRUNNING
虚拟 IP`ip addrgrep ‘10.144.66’`
节点互通ping -c 3 10.144.66.6能返回
代理通道easytier-cli proxy有业务连接时能看到代理记录

8. no-root 模式边界
#

官方 no-root 模式需要加:

--no-tun

它适合没有 root 权限、不能创建 TUN 设备的环境。这个模式下节点仍可被访问,也支持 TCP、UDP、ICMP 和子网代理,但节点不能像普通 TUN 模式那样主动访问其他节点。需要主动访问时,要配合 SOCKS5。

当前这套 Supervisor 配置使用 user=root,目标是稳定创建虚拟网卡和虚拟 IP,不是 no-root 部署。

9. 回滚
#

备份配置:

tar czf /root/easytier-supervisor-backup-$(date +%F-%H%M%S).tar.gz \
  /etc/supervisor/conf.d/easytier-*.conf

停止实例:

supervisorctl stop easytier-share
supervisorctl stop easytier-hk-client

如果只是更换密钥,必须共享节点和所有客户端同步替换。只改一端会导致节点无法握手。

恢复旧配置:

tar xzf /root/easytier-supervisor-backup-YYYY-MM-DD-HHMMSS.tar.gz -C /
supervisorctl reread
supervisorctl update
supervisorctl restart easytier-share

停止条件很简单:共享节点端口不通、任一客户端虚拟 IP 冲突、或密钥无法确认一致时,不继续扩节点。

10. 参考
#

生产变更复盘 - 这篇文章属于一个选集。
10: 本文

相关文章

EasyTier Supervisor 部署
·1202 字·6 分钟
SRE VPN SRE DevOps EasyTier +2
用 Docker Compose 部署 Draw.io 并接入 GitLab 存储
·1060 字·5 分钟
SRE Nginx DevOps Draw.io GitLab +4
用 Docker Compose 部署 ALLinSSL 并接入 Nginx 反向代理
·564 字·3 分钟
SRE SSL TLS Nginx DevOps +4