← 返回 TimeAmber
logo NodeSeekbeta

世界上还没有发现比它好用的easytier一键组网脚本!完美支持 Debian/Ubuntu/Mac/Alpine/windows/openwrt!!!!!!!宇宙无敌好用!

项目地址:https://github.com/ceocok/onekeyeasytier/tree/main

Demo: https://et.cococ.co

Openwrt在95楼

差不多的教程,看最底下


bash <(curl -sL https://raw.githubusercontent.com/ceocok/c.cococ/refs/heads/main/easytier.sh)

windows 版本在这里!!直接复制所有内容在powershell里运行就可以了,也有一键脚本

iex(New-Object Net.WebClient).DownloadString('https://github.com/ceocok/onekeyeasytier/blob/main/easytier.ps1') 

https://github.com/ceocok/onekeyeasytier/blob/main/easytier.ps1

太简单太好用了,以至于不需要太多图片。

WX20250731-195420@2x

@Pepsi 这个是真的真的很好用!!!无敌好用

  • 这个脚本凭什么被称为“宇宙无敌好用”?
  • 🖥️ 全平台制霸
  • 完美适配主流系统,并为每个系统提供了最佳实践:
  • Linux (Debian/Ubuntu): 使用 Systemd 管理。
  • Alpine Linux: 使用 OpenRC + supervise-daemon 实现真·进程守护。
  • macOS: 使用 Launchd 实现标准服务管理。
  • 真正的一站式体验
  • 从安装到卸载,所有操作集成在一个清爽的交互式菜单中:
  • 安装/更新: 自动检测最新版,支持 aarch64 和 x86_64 架构。
  • 部署/加入网络: 引导式配置,告别手动编辑 toml 文件的烦恼。
  • 服务管理: 轻松实现启动、停止、重启、查看状态、设置/取消开机自启。
  • 配置/节点查看: 快速预览当前配置文件和网络节点信息。
  • 一键卸载: 干净、彻底,不留任何残余。
  • 🧠 超乎想象的智能化
  • 脚本内置了大量自动化逻辑,让你“只做选择,不干杂活”:
  • 自动 IP/DHCP: 在配置节点时,虚拟 IP 地址留空即可自动启用 DHCP,省心省力。
  • 默认公共节点: 加入网络时,如果忘记或懒得输入对端节点,脚本会自动使用官方公共节点作为默认值。
  • 自动快捷方式: 首次运行时,会自动在 /usr/local/bin 创建 et 命令,之后你可以在任何地方输入 et 快速唤出管理菜单。
  • 部署即自启: 在你选择“部署”或“加入”网络后,脚本会自动将服务启动并设置为开机自启,无需任何额外的手动操作!
  • 💪 绝对的稳定可靠
  • 为不同系统量身打造了最强的进程守护策略 (Restart=always, supervise-daemon, KeepAlive),确保你的 EasyTier 服务 7x24 小时稳定在线。
  • 自动检测 curl, jq 等核心依赖,如果缺失会提示并帮助你自动安装。
  • 内置 GitHub 代理选项,有效解决国内服务器下载困难的问题。

简单说下怎么用吧

如果自己不建节点,其实也不需要,每台VPS都是1安装好,然后3加入网络
用户、密码你随便填,每个都填一样的,然后一直回车就完了,内置了公用节点。
然后查看节点就能看到每台VPS的IP
Windows的话,是按2
然后"用户、密码你随便填,每个都填一样的,然后一直回车就完了,内置了公用节点。"
一样的操作,无法再简单了

用户名和密码就像你去YY开个私聊开房一样,只有一样的用户和密码才能进去你这个房间

https://www.nodeseek.com/post-390232-1

  • @jjaibb #46
    那你这样。
    所有都这么操作
    liunx是3,windows是按2,
    输入用户和密码,你随便填就行了(但是都要是一样的),然后一直回车就可以了。所有都这么操作。
    然后查看网络节点,你就能看到各自的Ip了

  • @精神科主任医师 #16 发布于2025/7/31 20:27:38

    @ceocok #12 发布于2025/7/31 20:12:57
    @精神科主任医师 #10 啊,对了,还有支持openwrt的,我找找去哪里了
    在哪 在哪 openwrt的,路由器immortal有救了

    @精神科主任医师

    #!/bin/sh
    
    #================================================================================
    # EasyTier OpenWrt 专属部署管理脚本
    # 适配 OpenWrt (aarch64) 环境,使用 procd 进行服务管理。
    #================================================================================
    
    # --- 脚本配置 ---
    GITHUB_PROXY="ghfast.top"
    
    # 颜色定义
    GREEN="\033[1;32m"
    RED="\033[1;31m"
    YELLOW="\033[1;33m"
    BLUE="\033[0;34m"
    NC="\033[0m"
    
    # --- OpenWrt 专属路径和文件名 ---
    INSTALL_DIR="/usr/bin"
    CONFIG_DIR="/etc/easytier"
    CONFIG_FILE="${CONFIG_DIR}/easytier.toml"
    CORE_BINARY_NAME="easytier-core"
    CLI_BINARY_NAME="easytier-cli"
    ALIAS_PATH="/usr/bin/et"
    SERVICE_NAME="easytier"
    SERVICE_FILE="/etc/init.d/${SERVICE_NAME}"
    
    # --- OpenWrt aarch64 专属下载链接 ---
    DOWNLOAD_URL="https://ghfast.top/https://github.com/EasyTier/EasyTier/releases/download/v2.3.2/easytier-linux-aarch64-v2.3.2.zip"
    
    
    # --- 辅助函数 ---
    check_root() {
        if [ "$(id -u)" -ne 0 ]; then
            echo -e "${RED}错误: 此脚本必须以 root 权限运行。${NC}"; exit 1
        fi
    }
    
    check_arch() {
        CURRENT_ARCH=$(uname -m)
        if [ "$CURRENT_ARCH" != "aarch64" ]; then
            echo -e "${RED}错误: 此脚本专为 aarch64 架构设计。检测到当前架构为: $CURRENT_ARCH${NC}"
            exit 1
        fi
    }
    
    check_dependencies() {
        local missing_deps=""
        # find 和 mktemp 通常是 busybox 自带的,但为保险起见加入检查
        for cmd in curl unzip find mktemp; do
            if ! command -v "$cmd" >/dev/null 2>&1; then
                missing_deps="$missing_deps $cmd"
            fi
        done
    
        if [ -n "$missing_deps" ]; then
            echo -e "${YELLOW}检测到缺失的依赖: ${missing_deps}${NC}"
            read -p "是否尝试使用 opkg 自动安装? (y/n): " choice
            if [ "$choice" != "y" ] && [ "$choice" != "Y" ]; then
                echo -e "${RED}操作中止。${NC}"; exit 1
            fi
            
            opkg update
            opkg install $missing_deps
            for dep in $missing_deps; do
                 if ! command -v "$dep" >/dev/null 2>&1; then
                    echo -e "${RED}依赖 '$dep' 安装失败。请手动安装后重试。${NC}"; exit 1
                 fi
            done
        fi
    }
    
    check_installed() {
        if [ ! -f "${INSTALL_DIR}/${CORE_BINARY_NAME}" ]; then
            echo -e "${YELLOW}EasyTier 尚未安装。请先选择选项 1。${NC}"; return 1
        fi
        return 0
    }
    
    set_toml_value() {
        sed -i.bak "s|^#* *${1} *=.*|${1} = ${2}|" "$3" && rm "${3}.bak"
    }
    
    
    # --- OpenWrt 服务管理功能 ---
    create_service_file() {
        mkdir -p "$(dirname "${SERVICE_FILE}")"
        cat > "${SERVICE_FILE}" << 'EOF'
    #!/bin/sh /etc/rc.common
    
    USE_PROCD=1
    START=95
    STOP=01
    
    PROG=/usr/bin/easytier-core
    CONFIG_FILE="/etc/easytier/easytier.toml"
    
    start_service() {
        if [ ! -f "$CONFIG_FILE" ]; then
            echo "配置文件 $CONFIG_FILE 未找到"
            return 1
        fi
        
        procd_open_instance
        procd_set_param command ${PROG} -c ${CONFIG_FILE}
        procd_set_param respawn
        procd_set_param file ${CONFIG_FILE}
        procd_close_instance
    }
    
    reload_service() {
        stop
        start
    }
    
    service_triggers() {
        procd_add_reload_trigger "easytier"
    }
    EOF
        chmod +x "${SERVICE_FILE}"
        echo -e "${GREEN}OpenWrt init 脚本创建成功: ${SERVICE_FILE}${NC}"
    }
    
    start_service() { service_action start; }
    stop_service() { service_action stop; }
    restart_service() { service_action restart; }
    enable_service() { service_action enable; }
    disable_service() { service_action disable; }
    status_service() { service_action status; }
    
    service_action() {
        if [ ! -f "${SERVICE_FILE}" ]; then
            echo -e "${YELLOW}服务脚本 ${SERVICE_FILE} 不存在。请先部署网络以创建它。${NC}"
            return 1
        fi
        ${SERVICE_FILE} "$1"
    }
    
    log_service() {
        echo "正在使用 logread 查看日志,按 Ctrl+C 退出。"
        logread -f -e ${CORE_BINARY_NAME}
    }
    
    # --- 主功能函数 ---
    create_shortcut() {
        local SCRIPT_PATH
        SCRIPT_PATH=$(realpath "$0" 2>/dev/null || (cd "$(dirname "$0")" && echo "$(pwd)/$(basename "$0")"))
        if [ -L "${ALIAS_PATH}" ] && [ "$(readlink "${ALIAS_PATH}")" = "${SCRIPT_PATH}" ]; then
            return 0
        fi
        echo -e "${YELLOW}正在创建 'et' 快捷命令...${NC}"
        chmod +x "${SCRIPT_PATH}"
        ln -sf "${SCRIPT_PATH}" "${ALIAS_PATH}"
        if [ $? -eq 0 ]; then
            echo -e "${GREEN}成功! 现在你可以在终端中直接输入 'et' 来运行此脚本。${NC}"
        else
            echo -e "${RED}创建快捷命令失败。请检查权限。${NC}"
        fi
    }
    
    remove_shortcut() {
        if [ -L "${ALIAS_PATH}" ]; then
            rm -f "${ALIAS_PATH}" >/dev/null 2>&1
        fi
    }
    
    install_easytier() {
        echo -e "${GREEN}--- 开始安装或更新 EasyTier (OpenWrt/aarch64) ---${NC}"
    
        local download_file_url="${DOWNLOAD_URL}"
        if [ -n "$GITHUB_PROXY" ] && ! echo "${download_file_url}" | grep -q "${GITHUB_PROXY}"; then
            download_file_url=$(echo "$DOWNLOAD_URL" | sed "s|https://|https://${GITHUB_PROXY}/|")
            echo -e "${YELLOW}1. 使用代理下载: ${download_file_url}${NC}"
        else
            echo "1. 直接下载: ${download_file_url}"
        fi
    
        local temp_file
        temp_file=$(mktemp)
        
        curl -L --progress-bar -o "$temp_file" "$download_file_url"
        if [ $? -ne 0 ]; then
            echo -e "${RED}下载失败!${NC}"; rm -f "$temp_file"; return 1
        fi
        
        echo "2. 创建临时解压目录并解压..."
        local extract_dir
        extract_dir=$(mktemp -d)
        
        unzip -o "$temp_file" -d "$extract_dir" > /dev/null
        if [ $? -ne 0 ]; then
            echo -e "${RED}解压失败! 请检查文件是否为有效的 zip 格式。${NC}"
            rm -f "$temp_file"; rm -rf "$extract_dir"; return 1
        fi
    
        echo "3. 查找核心文件..."
        local found_core
        found_core=$(find "$extract_dir" -type f -name "${CORE_BINARY_NAME}")
        local found_cli
        found_cli=$(find "$extract_dir" -type f -name "${CLI_BINARY_NAME}")
    
        if [ -z "$found_core" ] || [ -z "$found_cli" ]; then
            echo -e "${RED}错误: 在解压目录中未动态找到核心文件。${NC}"
            rm -f "$temp_file"; rm -rf "$extract_dir"; return 1
        fi
        
        echo "4. 安装文件..."
        mkdir -p "$INSTALL_DIR"
        mv -f "$found_core" "${INSTALL_DIR}/${CORE_BINARY_NAME}"
        mv -f "$found_cli" "${INSTALL_DIR}/${CLI_BINARY_NAME}"
        chmod +x "${INSTALL_DIR}/${CORE_BINARY_NAME}" "${INSTALL_DIR}/${CLI_BINARY_NAME}"
        
        rm -f "$temp_file"; rm -rf "$extract_dir"
        
        echo -e "${GREEN}--- EasyTier 安装/更新成功! ---${NC}"
        create_shortcut
        
        if [ -f "$SERVICE_FILE" ]; then
            echo -e "${YELLOW}检测到现有服务,正在重启以应用更新...${NC}"
            restart_service
        fi
    }
    
    create_default_config() {
        mkdir -p "$CONFIG_DIR"
        cat > "$CONFIG_FILE" << 'EOF'
    # === EasyTier 配置文件 (由脚本生成) ===
    ipv4 = ""
    dhcp = false
    listeners = ["udp://0.0.0.0:11010", "tcp://0.0.0.0:11010", "wg://0.0.0.0:11011", "ws://0.0.0.0:11011/", "wss://0.0.0.0:11012/", "tcp://[::]:11010", "udp://[::]:11010"]
    [network_identity]
    network_name = ""
    network_secret = ""
    [flags]
    default_protocol = "udp"
    dev_name = ""
    enable_encryption = true
    enable_ipv6 = true
    mtu = 1380
    latency_first = true
    enable_exit_node = false
    no_tun = false
    use_smoltcp = false
    foreign_network_whitelist = "*"
    disable_p2p = false
    relay_all_peer_rpc = false
    disable_udp_hole_punching = false
    enableKcp_Proxy = true
    EOF
        if [ $? -eq 0 ]; then
           echo "已成功创建默认配置文件: ${CONFIG_FILE}"; return 0
        else
           echo -e "${RED}错误: 创建配置文件失败!${NC}"; return 1
        fi
    }
    
    deploy_new_network() { 
        check_installed || return 1
        read -p "请输入网络名称: " network_name
        read -p "请输入网络密钥: " network_secret
        read -p "请输入此节点虚拟IP (留空则启用DHCP): " virtual_ip
        
        create_default_config || return 1
        
        set_toml_value "network_name" "\"$network_name\"" "$CONFIG_FILE"
        set_toml_value "network_secret" "\"$network_secret\"" "$CONFIG_FILE"
        
        if [ -z "$virtual_ip" ]; then
            echo -e "${YELLOW}未输入IP,将启用 DHCP 自动获取地址。${NC}"
            set_toml_value "dhcp" "true" "$CONFIG_FILE"
            set_toml_value "ipv4" "\"\"" "$CONFIG_FILE"
        else
            echo -e "${GREEN}已设置静态IP: ${virtual_ip}${NC}"
            set_toml_value "dhcp" "false" "$CONFIG_FILE"
            set_toml_value "ipv4" "\"$virtual_ip\"" "$CONFIG_FILE"
        fi
    
        create_service_file
        echo -e "${YELLOW}正在应用配置并启动服务...${NC}"
        start_service
        echo -e "${GREEN}--- 新网络部署并启动成功! ---${NC}"
        sleep 2; status_service
    }
    
    join_existing_network() { 
        check_installed || return 1
        read -p "请输入网络名称: " network_name
        read -p "请输入网络密钥: " network_secret
        read -p "请输入此节点虚拟IP (留空则启用DHCP): " virtual_ip
        read -p "请输入一个对端节点地址 (如 tcp://x.x.x.x:11010): " peer_address
        
        create_default_config || return 1
    
        set_toml_value "network_name" "\"$network_name\"" "$CONFIG_FILE"
        set_toml_value "network_secret" "\"$network_secret\"" "$CONFIG_FILE"
        echo -e "\n[[peer]]\n uri = \"${peer_address}\"" >> "$CONFIG_FILE"
    
        if [ -z "$virtual_ip" ]; then
            echo -e "${YELLOW}未输入IP,将启用 DHCP 自动获取地址。${NC}"
            set_toml_value "dhcp" "true" "$CONFIG_FILE"
            set_toml_value "ipv4" "\"\"" "$CONFIG_FILE"
        else
            echo -e "${GREEN}已设置静态IP: ${virtual_ip}${NC}"
            set_toml_value "dhcp" "false" "$CONFIG_FILE"
            set_toml_value "ipv4" "\"$virtual_ip\"" "$CONFIG_FILE"
        fi
    
        create_service_file
        echo -e "${YELLOW}正在应用配置并重启服务...${NC}"
        restart_service
        echo -e "${GREEN}--- 已加入网络并重启服务! ---${NC}"
        sleep 2; status_service
    }
    
    manage_service_menu() {
        check_installed || return 1
        
        while true; do
            echo "--- 服务管理菜单 ---"; echo " 1. 启动服务"; echo " 2. 停止服务"; echo " 3. 重启服务"; echo " 4. 查看状态"; echo " 5. 设为开机自启"; echo " 6. 取消开机自启"; echo " 7. 查看实时日志"; echo " 0. 返回主菜单"; echo "--------------------"
            read -p "请选择操作 [0-7]: " sub_choice
            case $sub_choice in
                1) start_service && echo -e "${GREEN}服务已启动。${NC}"; break ;;
                2) stop_service && echo -e "${GREEN}服务已停止。${NC}"; break ;;
                3) restart_service && echo -e "${GREEN}服务已重启。${NC}"; break ;;
                4) status_service; break ;;
                5) enable_service && echo -e "${GREEN}已设置开机自启。${NC}"; break ;;
                6) disable_service && echo -e "${GREEN}已取消开机自启。${NC}"; break ;;
                7) log_service; break ;;
                0) break ;;
                *) echo -e "${RED}无效输入,请重试。${NC}" ;;
            esac; done
    }
    
    uninstall_easytier() {
        read -p "警告: 此操作将停止服务并删除所有相关文件。确定要卸载吗? (y/n): " confirm
        if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then echo "操作已取消。"; return; fi
        
        echo "正在停止并禁用服务..."
        if [ -f "$SERVICE_FILE" ]; then stop_service >/dev/null 2>&1; disable_service >/dev/null 2>&1; fi
        
        echo "正在删除文件..."
        rm -f "${SERVICE_FILE}" "${INSTALL_DIR}/${CORE_BINARY_NAME}" "${INSTALL_DIR}/${CLI_BINARY_NAME}"
        rm -rf "${CONFIG_DIR}"; remove_shortcut
        
        echo -e "${GREEN}EasyTier 已成功卸载。${NC}"
    }
    
    # --- 主菜单 ---
    main() {
        check_root; check_arch; check_dependencies
        
        while true; do
            clear
            echo "======================================================="; echo -e "   ${GREEN}EasyTier OpenWrt 专属管理脚本 v6.2${NC}"; echo -e "   (架构: aarch64, 自动创建 'et' 快捷命令)"; echo "======================================================="
            echo " 1. 安装或更新 EasyTier"; echo " 2. 部署新网络 (首个节点)"; echo " 3. 加入现有网络"; echo "-------------------------------------------------------"
            echo " 4. 管理服务 (启停/状态/日志)"; echo " 5. 查看配置文件"; echo " 6. 查看网络节点 (easytier-cli)"; echo "-------------------------------------------------------"
            echo " 7. 卸载 EasyTier"; echo " 0. 退出脚本"; echo "======================================================="
            read -p "请输入选项 [0-7]: " choice
            
            echo
            case $choice in
                1) install_easytier ;;
                2) deploy_new_network ;;
                3) join_existing_network ;;
                4) manage_service_menu ;;
                5) if check_installed && [ -f "$CONFIG_FILE" ]; then cat "$CONFIG_FILE"; else echo -e "${YELLOW}配置文件不存在或 EasyTier 未安装。${NC}"; fi ;;
                6) if check_installed; then ${INSTALL_DIR}/${CLI_BINARY_NAME} peer; fi ;;
                7) uninstall_easytier ;;
                0) exit 0 ;;
                *) echo -e "${RED}无效输入${NC}" ;;
            esac
            echo -e "\n${YELLOW}按任意键返回主菜单...${NC}"; read -n 1 -s -r
        done
    }
    
    main "$@"
    
    
    
  • @精神科主任医师 #115

    在目录/usr/local/bin/
    创建文件et

    编辑et
    内容为

    #!/bin/bash
    bash <(curl -sL https://raw.githubusercontent.com/ceocok/c.cococ/refs/heads/main/easytier.sh)
    
    

    保存退出
    给权限

    chmod +x /usr/local/bin/et
    

    就可以了

    ✈️TG联系我|✉️站内信

  • bd

  • 支持技术大佬

  • 绑定

  • 已加鸡腿

  • 好东西收藏了 xhj006

  • 开始走技术路线了,明灯 xhj006

  • 好东西

  • 靠技术打赢运气攻坚战 ac01

  • @slugger #8 这个真的是无敌好用,我在eastier那边官方也看过,那里的脚本比这个差92公里。。不是,根本没有一键脚本

  • 好东西 arm架构有适配不~

论坛快捷回帖:
请选择
内容
预览
对照
快捷回复
图床已就绪
AC娘
洋葱头
小黄鸡
Fluent
App