230 lines
4.6 KiB
Bash
230 lines
4.6 KiB
Bash
|
|
#!/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 "部署完成"
|