203.0.113.10、et-private-net、CHANGE_ME_NETWORK_SECRET。原始记录里的 network-secret 已经暴露过,生产环境应重新生成后再上线。0. 部署边界#
| 项 | 说明 |
|---|---|
| 组件 | EasyTier CLI / easytier-core |
| 管理方式 | Supervisor |
| 共享节点端口 | 23451/tcp、23451/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-name 和 network-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 可能出现 Kcp 或 Quic。KCP 和 QUIC 同时启用时,KCP 优先生效是正常现象。
验证矩阵:
| 验证项 | 方法 | 通过标准 |
|---|---|---|
| 共享节点进程 | supervisorctl status easytier-share | RUNNING |
| 监听端口 | ss -lntup、ss -lnuap | TCP/UDP 23451 都存在 |
| 客户端进程 | supervisorctl status easytier-hk-client | RUNNING |
| 虚拟 IP | `ip addr | grep ‘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. 参考#
- EasyTier no-root 模式:https://easytier.rs/guide/network/no-root.html
- EasyTier 搭建共享节点:https://easytier.rs/guide/network/host-public-server.html
- EasyTier KCP / QUIC Proxy:https://easytier.rs/guide/network/kcp-proxy.html
