DreamLife_EasyTier/install-easytier-relay.sh

230 lines
4.6 KiB
Bash
Raw Permalink Normal View History

2026-05-27 19:03:20 +08:00
#!/usr/bin/env bash
set -e
echo "======================================"
echo " EasyTier 公益中继节点一键部署脚本"
echo "======================================"
if [ "$(id -u)" != "0" ]; then
echo "请使用 root 运行"
exit 1
fi
########################################
# 检测包管理器
########################################
if command -v dnf >/dev/null 2>&1; then
PM="dnf"
elif command -v yum >/dev/null 2>&1; then
PM="yum"
elif command -v apt >/dev/null 2>&1; then
PM="apt"
elif command -v zypper >/dev/null 2>&1; then
PM="zypper"
else
echo "不支持的 Linux 发行版"
exit 1
fi
echo "检测到包管理器: $PM"
########################################
# 安装基础组件
########################################
case $PM in
apt)
apt update
apt install -y curl wget sudo fail2ban
;;
dnf|yum)
$PM install -y epel-release || true
$PM install -y curl wget sudo fail2ban
;;
zypper)
zypper install -y curl wget sudo fail2ban
;;
esac
########################################
# 安装 EasyTier
########################################
echo "安装 EasyTier..."
wget -O /tmp/easytier.sh \
"https://raw.githubusercontent.com/EasyTier/EasyTier/main/script/install.sh"
bash /tmp/easytier.sh install --gh-proxy https://ghfast.top/
########################################
# 查找 easytier-core
########################################
EASYTIER_BIN=""
for p in \
/usr/local/bin/easytier-core \
/usr/bin/easytier-core \
/opt/easytier/easytier-core
do
if [ -f "$p" ]; then
EASYTIER_BIN="$p"
break
fi
done
if [ -z "$EASYTIER_BIN" ]; then
echo "未找到 easytier-core"
exit 1
fi
echo "EasyTier 路径: $EASYTIER_BIN"
########################################
# 主机名
########################################
HOSTNAME=$(hostname)
########################################
# 创建 systemd 服务
########################################
cat >/etc/systemd/system/easytier.service <<EOF
[Unit]
Description=EasyTier Service
After=network.target
[Service]
Type=simple
ExecStart=$EASYTIER_BIN \\
--hostname $HOSTNAME \\
--relay-network-whitelist "" \\
--relay-all-peer-rpc
Restart=on-failure
RestartSec=5
StartLimitIntervalSec=300
StartLimitBurst=10
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
EOF
########################################
# sysctl 优化
########################################
cat >/etc/sysctl.d/99-easytier.conf <<EOF
net.core.somaxconn = 4096
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 4096
net.core.netdev_max_backlog = 4096
net.ipv4.udp_rmem_min = 8192
net.ipv4.udp_wmem_min = 8192
net.ipv4.ip_forward = 0
EOF
########################################
# BBR
########################################
cat >/etc/sysctl.d/99-bbr.conf <<EOF
net.core.default_qdisc = fq
net.ipv4.tcp_congestion_control = bbr
EOF
sysctl --system
########################################
# fail2ban
########################################
mkdir -p /etc/fail2ban/filter.d
cat >/etc/fail2ban/filter.d/easytier.conf <<EOF
[Definition]
failregex = remote: \\S+://<HOST>:\\d+, err: wait resp error:.+
EOF
cat >/etc/fail2ban/jail.local <<EOF
[easytier]
enabled = true
filter = easytier
backend = systemd
journalmatch = _SYSTEMD_UNIT=easytier.service
maxretry = 3
findtime = 600
bantime = 3600
banaction = firewallcmd-ipset
EOF
########################################
# 防火墙
########################################
if systemctl is-active firewalld >/dev/null 2>&1; then
firewall-cmd --permanent --add-port=11010/tcp
firewall-cmd --permanent --add-port=11010/udp
firewall-cmd --permanent --add-port=11011/tcp
firewall-cmd --permanent --add-port=11011/udp
firewall-cmd --permanent --add-port=11012/tcp
firewall-cmd --permanent --add-port=11012/udp
firewall-cmd --permanent --add-port=11013/tcp
firewall-cmd --reload
fi
########################################
# 启动服务
########################################
systemctl daemon-reload
systemctl enable --now easytier
systemctl enable --now fail2ban
########################################
# 输出状态
########################################
echo
echo "======================================"
echo " EasyTier 公益节点部署完成"
echo "======================================"
echo
systemctl --no-pager --full status easytier || true
echo
echo "--------------------------------------"
fail2ban-client status || true
echo
echo "--------------------------------------"
echo "BBR 状态:"
sysctl net.ipv4.tcp_congestion_control
echo
echo "监听端口:"
ss -lntup | grep easytier || true
echo
echo "部署完成"