S5一键搭建脚本 附无限换IP教程

 这是一键搭建S5教程 将此脚本命名为 s5.sh,放到服务器上

bash <(curl -sSL http://你的服务器的IP/s5.sh)

S5格式为
IP:5555
无账密

如果说机器更换IP了,此脚本可自动进行更换

image

配合AWS,用面板进行更换IP,即可获取无限制的S5代理


# 定义SOCKS代理端口
SOCKS_PORT=5555

# 定义配置文件路径
CONFIG_FILE="/etc/danted.conf"

# --- 函数定义 ---

# 安装dante-server
install_dante_server() {
    echo "正在安装 dante-server..."
    if command -v apt-get &> /dev/null; then
        sudo apt-get update
        sudo apt-get install -y dante-server
    elif command -v yum &> /dev/null; then
        sudo yum install -y dante-server
    else
        echo "无法识别您的包管理器,请手动安装 dante-server。"
        exit 1
    fi
    echo "dante-server 安装完成。"
}

# 配置dante-server
configure_dante_server() {
    echo "正在配置 dante-server..."
    # 写入danted.conf文件,明确指定外部接口为 ens5
    cat << EOF | sudo tee ${CONFIG_FILE}
logoutput: stderr
internal: 0.0.0.0 port=${SOCKS_PORT} # 内部监听地址,监听所有接口的指定端口
external: ens5 # <-- 已替换为你的实际外部网络接口名称
socksmethod: none
clientmethod: none

client pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: error connect disconnect
}

socks pass {
    from: 0.0.0.0/0 to: 0.0.0.0/0
    log: error connect disconnect
}
EOF
    echo "dante-server 配置完成,配置文件路径:${CONFIG_FILE}"
}

# 启动或重启dante服务
start_dante_service() {
    echo "正在启动或重启 dante 服务..."
    # 停止所有旧的danted进程,确保干净启动
    sudo killall danted &> /dev/null
    # 尝试禁用systemd管理的服务,以防冲突
    sudo systemctl stop danted.service &> /dev/null
    sudo systemctl disable danted.service &> /dev/null

    # 启动danted服务,使用非daemon模式并在后台运行
    sudo danted -f ${CONFIG_FILE} &

    if [ $? -eq 0 ]; then
        echo "SOCKS5 代理已在 ${SOCKS_PORT} 端口启动,无认证。"
    else
        echo "SOCKS5 代理启动失败,请检查日志。"
    fi
}

# 获取当前公网IP
get_current_ip() {
    # 尝试多种方式获取公网IP,确保兼容性
    # 使用 timeout 避免卡死
    IP=$(curl -s --max-time 10 ip.sb || curl -s --max-time 10 checkip.amazonaws.com || curl -s --max-time 10 ifconfig.me)
    if [ -z "$IP" ]; then
        echo "无法获取公网IP,请检查网络连接。" >&2
        return 1
    fi
    echo "$IP"
}

# --- 主逻辑 ---

echo "--- S5 代理自动部署脚本启动 ---"

# 检查dante-server是否已安装,如果没有则安装
if ! command -v danted &> /dev/null; then
    install_dante_server
fi

# 配置dante-server
configure_dante_server

# 首次启动SOCKS代理
start_dante_service

# 获取初始IP
OLD_IP=$(get_current_ip)
if [ $? -ne 0 ]; then
    echo "脚本无法继续,因为无法获取初始IP。"
    exit 1
fi
echo "初始公网IP: ${OLD_IP}"

# 进入循环检测IP
while true; do
    sleep 60 # 每分钟检测一次
    NEW_IP=$(get_current_ip)

    if [ $? -ne 0 ]; then
        echo "获取新IP失败,将使用旧IP继续检测。"
        # 即使获取IP失败,也继续下一次循环,不中断服务
    elif [ "$NEW_IP" != "$OLD_IP" ]; then
        echo "IP地址已变化!旧IP: ${OLD_IP}, 新IP: ${NEW_IP}"
        start_dante_service # 重新启动SOCKS代理
        OLD_IP="$NEW_IP"
    else
        echo "IP地址未变化:${OLD_IP}"
    fi
done

发表评论

0 评论