Clouldon Blog
    • 版块
    • 最新
    • 用户
    • 友链
    • 注册
    • 登录
    1. 主页
    2. clouldon
    3. 帖子
    离线
    • 资料
    • 关注 1
    • 粉丝 1
    • 主题 9
    • 帖子 18
    • 群组 2

    帖子

    最新
    • RE: 哈基 项目推荐

      @四折光曲 你可以找我重置密码啊

      发布在 软件教程
      clouldonC
      clouldon
    • MosDNS本地服务器安装

      以下是 MosDNS-X + EasyMosdns 组合的详细安装教程。教程将严格遵循您指定的目录结构和文件处理方式,所有文件将下载至 /etc/mosdns,二进制文件复制到 /usr/local/bin/,并包含权限设置、服务管理及用户自定义修改的方法。


      一、准备工作

      在开始之前,请确保满足以下条件:

      1. 操作系统:Linux 系统(如 Debian/Ubuntu/CentOS/AlmaLinux 等)。
      2. 权限:拥有 root 或具有 sudo 权限的用户。
      3. 网络:能够访问 GitHub 及互联网以下载所需文件。
      4. 端口:确保 53 端口未被其他 DNS 服务(如 systemd-resolved)占用,并已安装 unzip、wget、curl 等工具:
      # 更新包索引并安装必要工具(以 Debian/Ubuntu 为例)
      sudo apt update && sudo apt install -y wget unzip curl iptables
      
      1. 备份:如果已有 MosDNS 配置,请先备份 /etc/mosdns 目录。

      二、下载所有必需文件

      我们将所有文件集中下载并解压到 /etc/mosdns 目录中。请依次执行以下命令:

      1. 创建并进入工作目录

        sudo mkdir -p /etc/mosdns
        cd /etc/mosdns
        
      2. 下载 EasyMosdns 配置文件压缩包 (v3.5-2)
        源地址

        # 此处使用最新提供的 v3.5-2 版本配置,如链接失效请访问 GitHub Releases 页面查找最新版本
        sudo wget https://github.com/pmkol/easymosdns/archive/refs/tags/v3.5-2.zip -O easymosdns.zip
        
      3. 下载 MosDNS-X 二进制文件压缩包 (v26.05.25)
        源地址

        # 下载适用于 Linux amd64 架构的二进制文件,如需其他架构请前往 Releases 页面选择对应版本
        sudo wget https://github.com/pmkol/mosdns-x/releases/download/v26.05.25/mosdns-linux-amd64.zip -O mosdns-x.zip
        

      此时,/etc/mosdns 目录下应包含两个文件:easymosdns.zip 与 mosdns-x.zip,文件名是重命名的效果。


      三、解压与文件部署

      cd /etc/mosdns
      
      # 1. 解压 EasyMosdns 配置文件(注意:此压缩包内含有顶级目录 easymosdns-3.5-2,我们需要其内部所有内容)
      sudo unzip -q easymosdns.zip
      sudo mv easymosdns-3.5-2/* .   # 将配置内容移至 /etc/mosdns 根目录
      sudo rm -rf easymosdns-3.5-2 easymosdns.zip   # 清理解压残留与原始压缩包
      
      # 2. 解压 MosDNS-X 二进制文件,仅提取内部的 mosdns 可执行文件
      sudo unzip -q mosdns-x.zip mosdns
      sudo cp mosdns /usr/local/bin/   # 将二进制文件移入系统 PATH 路径
      sudo chmod +x /usr/local/bin/mosdns   # 赋予可执行权限
      sudo rm -f mosdns-x.zip   # 删除已使用完毕的压缩包
      

      四、初始化配置文件

      EasyMosdns 提供了一套完整的示例配置文件 config.yaml,我们需要基于此文件进行首次启动前的微调。

      cd /etc/mosdns
      
      # 1. 检查是否存在 config.yaml 文件
      ls -l config.yaml
      
      # 2. (可选)如存在旧配置文件,先创建备份
      sudo cp config.yaml config.yaml.bak
      

      五、安装并启动 MosDNS 系统服务

      MosDNS-X 内置了便捷的服务管理命令(install、start、stop、restart、uninstall)。我们使用以下命令将 MosDNS 安装为系统服务,并立即启动。

      # 1. 将 MosDNS 安装为系统服务,指定工作目录为 /etc/mosdns,并使用 config.yaml 作为主配置文件
      sudo mosdns service install -d /etc/mosdns -c config.yaml
      
      # 2. 启动服务
      sudo mosdns service start
      
      # 3. 查看服务状态(确认是否正常运行)
      sudo mosdns service status
      # 4. 重启服务
      sudo mosdns service restart
      # 5. 停止服务
      sudo mosdns service stop
      

      六、验证 DNS 服务

      服务启动后,可通过以下方式测试 DNS 解析是否正常:

      # 使用 dig 或 nslookup 测试本地 DNS(需提前安装 dnsutils 或 bind-utils)
      dig @127.0.0.1 google.com
      dig @127.0.0.1 qq.com
      
      #或使用nslookip 查看是否默认使用mosdns查询
      nslookup qq.com
      nslookup qq.com 127.0.0.1
      

      如果返回正确的解析结果,说明服务已正常运行。

      # 日志文件优化
      crontab -e
      
      # 在文件末尾添加以下内容
      0 5 * * * sudo truncate -s 0 /etc/mosdns/mosdns.log && /etc/mosdns/rules/update
      

      七、用户自定义修改

      EasyMosdns 提供了高度可定制的配置文件,所有配置均位于 /etc/mosdns/config.yaml。用户可根据注释说明进行个性化修改,例如:

      • 修改监听端口:搜索 protocol: udp 和 protocol: tcp 下方的 addr: 字段,默认端口为 53,可按需更改。
      • 调整上游 DNS 服务器:搜索 upstream 或 remote 相关段落,替换为符合需求的上游地址(如 HTTPS、DoT 等)。
      • 自定义 Hosts 或黑白名单:配置文件中包含丰富的示例,可根据注释轻松添加。

      修改配置后,需手动重启。若需强制重启,可使用以下命令:

      sudo mosdns service restart
      

      八、其他常用管理命令

      操作 命令
      停止服务 sudo mosdns service stop
      重启服务 sudo mosdns service restart
      查看日志 sudo journalctl -u mosdns -f
      卸载服务 sudo mosdns service uninstall (将删除服务但保留配置文件)
      重置配置 sudo /etc/mosdns/tools/config-reset (恢复至初始默认配置)

      九、附录:全自动安装脚本(可选)

      为方便批量部署,您可将以下代码保存为 install_mosdns.sh,一键完成上述所有操作:

      #!/bin/bash
      set -e
      
      echo ">>> 开始安装 MosDNS-X + EasyMosdns ..."
      
      # 安装依赖
      echo ">>> 安装依赖工具..."
      sudo apt update && sudo apt install -y wget unzip curl
      
      # 创建工作目录并进入
      sudo mkdir -p /etc/mosdns
      cd /etc/mosdns
      
      # 下载文件
      echo ">>> 下载 EasyMosdns 配置包..."
      sudo wget https://github.com/pmkol/easymosdns/archive/refs/tags/v3.5-2.zip -O easymosdns.zip
      echo ">>> 下载 MosDNS-X 二进制包..."
      sudo wget https://github.com/pmkol/mosdns-x/releases/download/v26.05.25/mosdns-linux-amd64.zip -O mosdns-x.zip
      
      # 解压与部署
      echo ">>> 解压并部署文件..."
      sudo unzip -q easymosdns.zip
      sudo mv easymosdns-3.5-2/* ./
      sudo rm -rf easymosdns-3.5-2 easymosdns.zip
      
      sudo unzip -q mosdns-x.zip mosdns
      sudo cp mosdns /usr/local/bin/
      sudo chmod +x /usr/local/bin/mosdns
      sudo rm -f mosdns-x.zip
      
      # 安装并启动服务
      echo ">>> 安装系统服务..."
      sudo mosdns service install -d /etc/mosdns -c config.yaml
      sudo mosdns service start
      
      echo ">>> 安装完成!"
      echo ">>> 服务状态:"
      sudo mosdns service status
      

      赋予执行权限并运行:

      chmod +x install_mosdns.sh
      sudo ./install_mosdns.sh
      

      自用config.yaml

      # =============================================
      # EasyMosdns v3.5 - 节点IP自动分流版
      # 项目地址:https://apad.pro/easymosdns
      # 本配置文件用于 MosDNS-X 或原版 MosDNS
      # Github:
      # 配置https://github.com/pmkol/easymosdns
      # 二进制:https://github.com/pmkol/mosdns-x/
      # =============================================
      
      # ---------------------------------------------
      # 日志配置
      # ---------------------------------------------
      log:
        file: "./mosdns.log"          # 日志文件存放路径
        level: info                    # 日志级别:debug/info/warn/error
      
      # ---------------------------------------------
      # 数据源配置(规则文件)
      # 所有规则文件位于 ./rules/ 目录下
      # ---------------------------------------------
      data_providers:
        - tag: chinalist               # 中国域名列表(常见国内域名)
          file: ./rules/china_domain_list.txt
          auto_reload: true
      
        - tag: gfwlist                 # GFW 封锁域名列表(需要代理的域名)
          file: ./rules/gfw_domain_list.txt
          auto_reload: true
      
        - tag: cdncn                   # 国内 CDN 域名列表(使用本地 DNS 解析更优)
          file: ./rules/cdn_domain_list.txt
          auto_reload: true
      
        - tag: chinaip                 # 中国 IP 地址段
          file: ./rules/china_ip_list.txt
          auto_reload: true
      
        - tag: gfwip                   # GFW 相关 IP 地址段(用于响应检测)
          file: ./rules/gfw_ip_list.txt
          auto_reload: true
      
        - tag: adlist                  # 广告域名黑名单
          file: ./rules/ad_domain_list.txt
          auto_reload: true
      
        - tag: hosts                   # 自定义 hosts 映射文件
          file: ./hosts.txt
          auto_reload: true
      
      # ---------------------------------------------
      # 插件列表(按顺序处理)
      # ---------------------------------------------
      plugins:
        # ----- 1. Hosts 映射插件 -----
        - tag: hosts
          type: hosts
          args:
            hosts:
              - "provider:hosts"       # 从 data_providers 中加载 hosts
      
        # ----- 2. ECS (EDNS Client Subnet) 自动获取插件 -----
        - tag: ecs_auto
          type: ecs
          args:
            auto: true                 # 自动获取客户端真实 IP 子网
            force_overwrite: false     # 不强制覆盖已有的 ECS
      
        # ----- 3. ECS 局域网匹配插件(用于判断客户端是否在内网)-----
        - tag: ecs_is_lan
          type: query_matcher
          args:
            ecs:                       # 匹配以下私有/特殊 IP 段的 ECS
              - "0.0.0.0/8"
              - "10.0.0.0/8"
              - "100.64.0.0/10"
              - "127.0.0.0/8"
              - "169.254.0.0/16"
              - "172.16.0.0/12"
              - "192.168.0.0/16"
              - "224.0.0.0/3"
              - "::1/128"
              - "fc00::/7"
              - "fe80::/10"
      
        # ----- 4. 缓存插件(用于局域网客户端)-----
        - tag: cache_lan
          type: cache
          args:
            size: 1024                 # 缓存条目数量
            lazy_cache_ttl: 180        # 懒加载缓存 TTL(秒)
            cache_everything: true     # 缓存所有响应(包括错误)
            lazy_cache_reply_ttl: 1    # 懒加载回复的临时 TTL
      
        # ----- 5. 缓存插件(用于广域网查询)-----
        - tag: cache_wan
          type: cache
          args:
            size: 4096                 # 缓存条目数量(比 LAN 更大)
            compress_resp: true        # 压缩响应以节省内存
            lazy_cache_ttl: 180
            cache_everything: true
            lazy_cache_reply_ttl: 5
      
        # ----- 6. TTL 修改插件(1 分钟)-----
        - tag: ttl_1m
          type: ttl
          args:
            minimal_ttl: 60            # 最小 TTL 60 秒
            maximum_ttl: 3600          # 最大 TTL 1 小时
      
        # ----- 7. TTL 修改插件(5 分钟)-----
        - tag: ttl_5m
          type: ttl
          args:
            minimal_ttl: 300           # 最小 TTL 5 分钟
            maximum_ttl: 18000         # 最大 TTL 5 小时
      
        # ----- 8. TTL 修改插件(1 小时)-----
        - tag: ttl_1h
          type: ttl
          args:
            minimal_ttl: 3600          # 最小 TTL 1 小时
            maximum_ttl: 18000
      
        # ----- 9. 黑洞插件(返回空响应,用于广告屏蔽)-----
        - tag: black_hole
          type: blackhole
          args:
            rcode: 0                   # 返回 NOERROR 空应答
            ipv4: "0.0.0.0"           # A 记录返回 0.0.0.0
            ipv6: "::"                # AAAA 记录返回 ::
      
        # ----- 10. 查询匹配:非域名格式(如纯 IP 查询)-----
        - tag: query_is_non_domain
          type: query_matcher
          args:
            domain:
              - "keyword::"            # 匹配空关键字(通常用于识别非标准域名)
      
        # ----- 11. 查询匹配:本地域名(中国域名)-----
        - tag: query_is_local_domain
          type: query_matcher
          args:
            domain:
              - "provider:chinalist"
      
        # ----- 12. 查询匹配:非本地域名(GFW 列表域名)-----
        - tag: query_is_non_local_domain
          type: query_matcher
          args:
            domain:
              - "provider:gfwlist"
      
        # ----- 13. 查询匹配:国内 CDN 域名-----
        - tag: query_is_cdn_cn_domain
          type: query_matcher
          args:
            domain:
              - "provider:cdncn"
      
        # ----- 14. 查询匹配:广告域名-----
        - tag: query_is_ad_domain
          type: query_matcher
          args:
            domain:
              - "provider:adlist"
      
        # ----- 15. 响应匹配:响应中包含中国 IP-----
        - tag: response_has_local_ip
          type: response_matcher
          args:
            ip:
              - "provider:chinaip"
      
        # ----- 16. 响应匹配:响应中包含 GFW IP-----
        - tag: response_has_gfw_ip
          type: response_matcher
          args:
            ip:
              - "provider:gfwip"
      
        # ----- 17. 查询匹配:QType = 12 (PTR 记录)-----
        - tag: qtype12
          type: query_matcher
          args:
            qtype: [12]
      
        # ----- 18. 查询匹配:QType = 65 (HTTPS 记录)-----
        - tag: qtype65
          type: query_matcher
          args:
            qtype: [65]
      
        # ----- 19. 查询匹配:QType = 255 (ANY 查询)-----
        - tag: qtype255
          type: query_matcher
          args:
            qtype: [255]
      
        # ----- 20. 上游转发:本地 DNS(国内)-----
        - tag: forward_local
          type: fast_forward
          args:
            upstream:
              - addr: "udpme://119.29.29.29"          # 腾讯 DNS(UDP + 多路复用)
              - addr: "udpme://223.5.5.5"             # 阿里 DNS(UDP + 多路复用)
              - addr: "https://dns.alidns.com/dns-query"   # 阿里 DoH
                enable_pipeline: true
                bootstrap: "223.6.6.6"
              - addr: "https://doh.pub/dns-query"          # DNSPod DoH
                enable_pipeline: true
                bootstrap: "119.29.29.29"
      
        # ----- 21. 上游转发:远程 DNS(国际)-----
        - tag: forward_remote
          type: fast_forward
          args:
            upstream:
              - addr: "udpme://1.1.1.1"               # Cloudflare
              - addr: "udpme://8.8.8.8"               # Google
              - addr: "udpme://9.9.9.9"               # Quad9
              - addr: "udp://185.222.222.222"         # 备用 UDP
                #enable_pipeline: true
                #socks5: "127.0.0.1:1080"             # 可通过 SOCKS5 代理(需自行配置)
      
        # ----- 22. 主逻辑序列(核心处理流程)-----
        - tag: main_sequence
          type: sequence
          args:
            exec:
              # 步骤 1:应用 hosts 映射
              - hosts
      
              # 步骤 2:处理非域名查询(如纯 IP 反向查询)
              - if: "(query_is_non_domain)"
                exec:
                  - _new_nxdomain_response   # 返回 NXDOMAIN
                  - _return
      
              # ============================================================
              # 步骤 3:处理 PTR 查询(QType=12)- 修改后直接返回 NXDOMAIN
              # 原因:Windows nslookup 默认会查询 PTR 记录,国内 DNS 对 PTR 支持不佳导致超时
              # 直接返回 NXDOMAIN 可避免超时,不影响正常 A/AAAA 查询
              # ============================================================
              - if: "[qtype12]"              # PTR 反向查询
                exec:
                  - _no_ecs                  # 移除 ECS 信息
                  - _new_nxdomain_response   # 直接返回 NXDOMAIN(域名不存在)
                  - _return
      
              # 步骤 3b:处理 ANY 查询(QType=255)
              - if: "[qtype255]"             # ANY 查询
                exec:
                  - _no_ecs
                  - forward_local
                  - ttl_1h
                  - _return
      
              # 步骤 4:自动获取 ECS(EDNS Client Subnet)
              - ecs_auto
              - _edns0_filter_ecs_only      # 过滤只保留 ECS 信息
      
              # 步骤 5:根据 ECS 是否为局域网选择缓存
              - if: ecs_is_lan
                exec:
                  - cache_lan
                  - _no_ecs
                else_exec:
                  - cache_wan
      
              # 步骤 6:如果是局域网 ECS,再次移除 ECS(避免泄露)
              - if: ecs_is_lan
                exec:
                  - _no_ecs
      
              # 步骤 7:广告域名直接黑洞并返回
              - if: query_is_ad_domain
                exec:
                  - black_hole
                  - ttl_1h
                  - _return
      
              # 步骤 8:本地域名或 CDN 域名 → 使用本地 DNS,并检查响应是否被污染
              - if: "(query_is_local_domain) || (query_is_cdn_cn_domain)"
                exec:
                  - forward_local
                  - if: "(! response_has_gfw_ip)"   # 如果响应中没有 GFW IP,则正常返回
                    exec:
                      - ttl_1m
                      - _return
      
              # 步骤 9:GFW 列表域名 → 直接使用远程 DNS(代理)
              - if: query_is_non_local_domain
                exec:
                  - _prefer_ipv4                # 优先返回 IPv4 地址
                  - forward_remote
                  - ttl_5m
                  - _return
      
              # 步骤 10:其余未分类域名 → 优先远程,如果响应包含中国 IP 则回落到本地 DNS
              - _prefer_ipv4
              - primary:
                  - forward_remote
                  - if: response_has_local_ip
                    exec:
                      - forward_local
                      - _return
                secondary:
                  - forward_local
                  - _return
                fast_fallback: 2500            # 主上游超时后快速切换到备用
                always_standby: false
      
              # 最后设置 TTL 为 5 分钟
              - ttl_5m
      
      # ---------------------------------------------
      # DNS 服务器监听配置
      # ---------------------------------------------
      servers:
        - exec: main_sequence          # 使用上面定义的 main_sequence 处理逻辑
          timeout: 6                   # 查询超时时间(秒)
          listeners:
            - protocol: udp
              addr: "0.0.0.0:53"       # 监听所有网卡的 UDP 53 端口
            - protocol: tcp
              addr: "0.0.0.0:53"       # 监听所有网卡的 TCP 53 端口
      
      # ---------------------------------------------
      # API 接口(可选,默认注释)
      # ---------------------------------------------
      #api:
        #http: "0.0.0.0:9080"          # 开启后可通过 HTTP 查看统计信息
      

      结束语

      至此,您已成功部署了一套基于 MosDNS-X 与 EasyMosdns 的 DNS 分流服务器。它不仅具备极高的性能,还内置了针对中国大陆地区的优化规则,可有效解决 DNS 污染问题,并提供 ECS 支持以加速 CDN 调度。如有任何自定义需求(如修改上游、调整缓存策略、添加广告过滤等),均可通过编辑 /etc/mosdns/config.yaml 轻松实现。

      发布在 软件教程
      clouldonC
      clouldon
    • Win11安装Debian12.14软路由

      本教程以 Debian 12.14 在 VirtualBox / Hyper-V / VMware 中的虚拟机为例,采用桥接本机网卡方式,实现软路由功能(主要用于 LAN 侧转发 + 代理)。不需要配置 WAN 口,仅配置一个 LAN 接口。

      1. 安装 Debian 12.14 并启用 Root SSH 密码登录

      1. 下载 Debian 12.14 ISO 镜像(官方 netinst 或 full CD 均可)。

      2. 在虚拟机软件(VirtualBox / Hyper-V / VMware)中新建虚拟机:

        • 网络适配器:选择 桥接(Bridged) 到你的本机物理网卡(这样虚拟机能直接获得局域网 IP)。
        • CPU、内存、硬盘根据需求分配(推荐 2 核 + 1GB内存)。
        • 挂载 ISO 并启动安装。
      3. 安装过程中:

        • 选择语言、键盘等。
        • 分区:推荐整个磁盘(Guided - use entire disk)。
        • 设置 root 密码(重要!必须设置)。
        • 安装 SSH server(在任务选择中勾选 “SSH server”)。
      4. 安装完成后重启,进入系统。

      5. 启用 Root SSH 密码登录:

        nano /etc/ssh/sshd_config
        

        找到并修改以下两行(去掉注释 #

        PermitRootLogin yes
        PasswordAuthentication yes
        

        保存退出(Ctrl+O → Enter → Ctrl+X)。

        重启 SSH 服务:

        systemctl restart ssh
        

      2. 配置 LAN 接口(静态 IP 或 DHCP)

      1. 查看网卡名称:
      ip a
      

      例如:

      ens18
      

      或者:

      eth0
      
      1. Debian 默认使用 /etc/network/interfaces 管理网络。

      编辑配置文件:

      nano /etc/network/interfaces
      

      配置示例(静态 IP,适合软路由):

      # This file describes the network interfaces
      # and how to activate them
      
      source /etc/network/interfaces.d/*
      
      # The loopback network interface
      auto lo
      iface lo inet loopback
      
      # LAN 接口(根据虚拟机网卡名称替换见上方名称)
      auto eth0                           # 这里使用eth0示例
      iface eth0 inet static              # static静态
          address 192.168.1.11/24         # 软路由 LAN IP
          gateway 192.168.1.1             # 上级网关(通常是你的主路由器 IP)
          dns-nameservers 119.29.29.29 223.5.5.5 #dns填入
      iface eth0 inet6 dhcp                 #DHCPv6 有v6情况才写入
       post-up sysctl -w net.ipv6.conf.eth0.accept_ra=2 >/dev/null 2>&1 #RA 获取默认v6路由上网
      
      • 说明:
      • address:设置本机 LAN IP。
      • gateway:上级路由器(主路由器)的 IP,用于软路由访问外网(可选,根据需求)。
      • 如果想用 DHCP,改为:
      • 注意改为DHCP需要在路由器根据MAC地址查看IP才能连接SSH;或者虚拟机连接,查看ip
        auto eth0            
        iface eth0 inet dhcp   # dhcp顾名思义
        
      1. 保存后应用配置并重启网络及电脑:
        systemctl restart networking
        # 最好重启虚拟机
        reboot
        

      此时即可使用 SSH 客户端(推荐Netcatty;;或如 Xshell、MobaXterm、FinalShell 等),或cmd/powershell以 ssh root@IP 登录。

      1. 重启后验证:
        ip addr show
        ip route
        ping 119.29.29.29
        

      3. SSH 登录并开启 IPv4/IPv6 转发

      1. 使用 SSH 客户端以 root 登录虚拟机。

      2. 开启 IPv4/IPv6 转发(必需):


      sudo cp /etc/sysctl.conf /etc/sysctl.conf.bk_$(date +%Y%m%d_%H%M%S) && \
      sudo tee /etc/sysctl.conf << 'EOF'
      net.ipv4.ip_forward=1
      net.ipv4.conf.all.forwarding=1
      net.ipv6.conf.all.forwarding=1
      net.ipv4.tcp_congestion_control=bbr
      net.core.default_qdisc=fq
      EOF
      sudo sysctl -p
      

      1. 验证转发是否开启:
      sysctl net.ipv4.ip_forward
      sysctl net.ipv6.ip_forward
      

      应输出 net.ipv4.ip_forward = 1;net.ipv6.ip_forward = 1。

      4. 启用代理(二选一)

      选项 A:OPENPPP2(推荐隧道工具)

      内容 链接
      安装脚本 https://github.com/picetor/openppp2_install
      原版仓库 https://github.com/liulilittle/openppp2
      改版,更多特性 https://github.com/Miaocchi/openppp2
      自编译版本,兼容openwrt https://github.com/picetor/openppp2

      拉取脚本

      直连 GitHub(海外服务器或网络良好)

      wget -4 -O ppp_install.sh https://raw.githubusercontent.com/picetor/openppp2_install/main/ppp_install.sh && chmod +x ppp_install.sh && ./ppp_install.sh
      

      使用Github加速

      wget -4 -O ppp_install.sh https://git.apad.pro/https://raw.githubusercontent.com/picetor/openppp2_install/main/ppp_install.sh && chmod +x ppp_install.sh && ./ppp_install.sh
      

      运行后进入交互菜单,根据提示选择客户端模式安装配置,需准备服务端信息、修改启动脚本/opt/ppp/ppp.sh;工作目录opt/ppp

      选项 B:Clash for Linux

      项目地址: https://github.com/wnlen/clash-for-linux
      Github直连

      git clone --branch master --depth 1 https://github.com/wnlen/clash-for-linux.git
      cd clash-for-linux
      bash install.sh
      

      Github加速

      git clone --branch master --depth 1 ```
      https://ghfast.top/https://github.com/wnlen/clash-for-linux.git
      cd clash-for-linux
      bash install.sh
      

      安装完成后使用 clashon 启动,clashctl 管理订阅、节点等。详情看原仓库

      客户端配置方法

      1. Windows 手动配置

      • 打开「控制面板」→「网络和共享中心」→「更改适配器设置」
      • 右键点击当前使用的网卡(以太网或 WLAN)→「属性」
      • 双击「Internet 协议版本 4 (TCP/IPv4)」
      • 选择「使用下面的 IP 地址」:
        • IP 地址:与 Debian 同网段,例如 192.168.1.50
        • 子网掩码:255.255.255.0
        • 默认网关:192.168.1.11(Debian 的 IP)
        • DNS 服务器:可填写 223.5.5.5、119.29.29.29;;或 Debian 的 IP 192.168.1.11 前提有dns服务器
      • 点击「确定」保存。

      2. macOS 手动配置

      • 「系统设置」→「网络」→ 选择当前网络(如 Wi-Fi 或以太网)
      • 点击「详细信息」→「TCP/IP」
      • 配置 IPv4 为「手动」
        • IP 地址:192.168.1.51
        • 子网掩码:255.255.255.0
        • 路由器:192.168.1.11(Debian 的 IP)
      • DNS 可手动添加 223.5.5.5 等
      • 点击「好」保存。

      4. 手机 / 平板(Android / iOS)

      • 进入 Wi-Fi 设置,长按当前连接的 Wi-Fi →「修改网络」或「配置网络」
      • 将「IP 设置」从 DHCP 改为「静态」
      • IP 地址:例如 192.168.1.53
      • 网关:192.168.1.11(Debian 的 IP)
      • DNS:223.5.5.5 等
      • 保存。

      验证客户端是否通过软路由

      在客户端上打开浏览器,访问 https://ip.skk.moe 或 https://ipcheck.ing/,显示的 IP 应为代理出口 IP(而非上级路由的 IP)。

      也可在客户端命令行执行:

      tracert 119.29.29.29   # Windows
      traceroute 119.29.29.29  # Linux/macOS
      

      第一跳应显示 192.168.1.11(Debian 软路由地址)。


      最终结构

      +-------------+
      |  上级路由   |
      +-------------+
             │
             │ (桥接网络)
             ▼
      +-------------+
      | Debian 12.14|
      |  软路由  |
      +-------------+
             │
             ├── openppp2
             │   或
             └── Clash for Linux
             │
             │ (LAN 同网段)
             ▼
      +-------------+
      |   客户端    |
      | (PC/手机等) |
      +-------------+
      

      后续常用操作:

      • 查看网络:ip addr、ip route
      • 编辑网络接口nano /etc/network/interfaces
      • 重启网络:systemctl restart networking
      • 安装mosdns本地DNS服务端
      发布在 软件教程
      clouldonC
      clouldon
    • RE: 哈基 项目推荐

      @四折光曲 可以单开一页了

      发布在 软件教程
      clouldonC
      clouldon
    • RE: 哈基 项目推荐

      自托管服务器监控系统:https://dash.mjiji.top/

      Link Preview Image
      GitHub - Ithildur/Ithiltir: Self-hosted server monitoring dashboard with agent metrics, traffic stats, alerts, theming, and a bundled web admin console.

      Self-hosted server monitoring dashboard with agent metrics, traffic stats, alerts, theming, and a bundled web admin console. - Ithildur/Ithiltir

      favicon

      GitHub (github.com)


      Link Preview Image
      Ithiltir 文档 | Ithiltir

      Ithiltir 是一套自托管服务器监控系统,支持 Dash 集中管理与 Node 本地监控。

      favicon

      (www.ithiltir.dev)

      发布在 软件教程
      clouldonC
      clouldon
    • RE: openppp2简易使用教程

      因为在移动平台ppp的支持不好,所以我们可以采取ppp支持的代理来连接到ppp。电脑或软路由(windows,macos,linux(openwrt除外)),运行ppp,其中启动命令 --yun-host=no ,不更改系统路由。示例如下,客户端启动命令,我们甚至可以通过代理软件来分流:
      windows

      start ppp.exe --mode=client --tun-ip=10.0.0.5 --tun-gw=10.0.0.0 --tun-flash=yes --tun-mask=24 --tun-host=no --tun-vnet=yes --tun-static=no --block-quic=yes --config=./config/bwgUS.json --tun-mux=4
      

      linux:

      ./ppp --mode=client --config=./HKBN.json --tun-ip=10.0.0.8 --tun-gw=10.0.0.0 --tun-mask=24 --tun-host=no --link-restart=3 --tun-mux-acceleration=3 --tun-static=no --tun-ssmt=4/st --block-quic=yes > ./ppp.log
      

      然后根据配置文件里面的http或sock项来填写代理,当然可以通过ppp应用看到
      替代文字

      替代文字

      因为0.0.0.0代表本机地址,所以在局域网下,填入ppp客户端的IP,端口,代理类型即可达到效果
      替代文字
      效果如图
      替代文字

      发布在 软件教程
      clouldonC
      clouldon
    • Docker mongodb备份还原数据库

      查看容器名字

      docker ps
      

      进入mongodb

      docker exec -it 容器名 mongosh \
        -u '数据库应用账号' -p '数据库应用密码' \
        --authenticationDatabase admin \
      

      备份mongodb

      docker exec 容器名 mongodump \
        -u '数据库应用账号' -p '数据库应用密码' \
        --authenticationDatabase admin \
        --db nodebb --archive --gzip \
        > /home/nodebb-mongo-backup-$(date +%Y%m%d-%H%M%S).archive.gz
      

      还原mongodb

      cat /home/nodebb-mongo-backup-20250401-120000.archive.gz |
      docker exec -i 容器名 mongorestore \
        -u '数据库应用账号' -p '数据库应用密码' \
        --authenticationDatabase admin \
        --archive --gzip \
        --drop
      
      发布在 软件教程
      clouldonC
      clouldon
    • RE: 哈基 项目推荐

      @四折光曲 基于WireGuard

      发布在 软件教程
      clouldonC
      clouldon
    • RE: 四折の股票之路.WEBP

      貌似长线收益多一些,每日的波动,上下上下,不也是归零了嘛

      发布在 讨论
      clouldonC
      clouldon
    • Rustdesk自托管中继服务端安装教程

      下面就是 只安装 hbbs + hbbr 的简单版本。


      1)先看当前最新版本

      浏览器打开:

      Link Preview Image
      Release 1.1.15 · rustdesk/rustdesk-server

      RustDesk Server Program. Contribute to rustdesk/rustdesk-server development by creating an account on GitHub.

      favicon

      GitHub (github.com)

      现在会跳到 1.1.15。

      2)在 Debian 上判断你的架构

      执行:

      dpkg --print-architecture
      

      记住输出结果。
      常见是 amd64 或 arm64。

      这里我只示范 amd64。
      如果你的输出不是 amd64,只需要把下面所有命令里的 amd64 换成你的架构名。

      3)创建下载目录

      执行:

      mkdir -p ~/rustdesk-server
      cd ~/rustdesk-server
      

      4)下载第一个包:hbbs

      将下面的1.1.15换成Latest的版本号
      执行:

      wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.15/rustdesk-server-hbbs_1.1.15_amd64.deb
      

      5)下载第二个包:hbbr

      执行:

      wget https://github.com/rustdesk/rustdesk-server/releases/download/1.1.15/rustdesk-server-hbbr_1.1.15_amd64.deb
      

      6)确认两个包已经下好了

      执行:

      ls -lh *.deb
      

      正常会看到这两个文件:

      • rustdesk-server-hbbs_1.1.15_amd64.deb
      • rustdesk-server-hbbr_1.1.15_amd64.deb

      7)开始安装

      先执行:

      sudo apt update
      

      然后依次安装:

      sudo dpkg -i rustdesk-server-hbbs_1.1.15_amd64.deb
      
      sudo dpkg -i rustdesk-server-hbbr_1.1.15_amd64.deb
      

      8)如果提示依赖问题,再补一次

      执行:

      sudo apt-get -f install -y
      

      9)检查服务是否已经就绪

      先检查:

      systemctl status rustdesk-hbbs --no-pager
      
      systemctl status rustdesk-hbbr --no-pager
      

      你希望看到的是:

      active (running)
      

      10)如果没运行,就手动启动

      执行:

      sudo systemctl start rustdesk-hbbs
      
      sudo systemctl start rustdesk-hbbr
      

      然后再检查一次:

      systemctl status rustdesk-hbbs --no-pager
      
      systemctl status rustdesk-hbbr --no-pager
      

      11)查看公钥

      执行:

      cat /var/lib/rustdesk-server/id_ed25519.pub
      

      把输出内容保存好。


      12)补充端口使用

      RustDesk 官方文档给出的核心端口是:

      • TCP 21114-21119

      • UDP 21116

      其中 最小可工作端口集合 是:

      • TCP 21115

      • TCP/UDP 21116

      • TCP 21117


      这些端口分别做什么官方链接


      到底该开哪些端口

      如果你只是部署 普通 OSS 自建服务器,最稳妥的做法是直接开放:

      • 21115/tcp

      • 21116/tcp

      • 21116/udp

      • 21117/tcp

      这是官方文档定义的最小可工作端口集合。


      如果你想少折腾、一步到位,也可以直接开放:

      • 21114-21119/tcp

      • 21116/udp


      如果你用 UFW,就这样放行端口,只开最小必需端口

      sudo ufw allow 21115/tcp
      sudo ufw allow 21116/tcp
      sudo ufw allow 21116/udp
      sudo ufw allow 21117/tcp
      

      如果你想一步全开官方建议范围

      sudo ufw allow 21114:21119/tcp
      sudo ufw allow 21116/udp
      

      12)客户端怎么填

      客户端里填:

      • ID 服务器:你的服务器 IP 或域名
      • Key:刚才看到的公钥
      • 中继服务器:同ID 服务器
      • API服务器:留空

      示例

      如果你的服务器 IP 是 1.2.3.4,那客户端里填:

      • ID 服务器:1.2.3.4
      • Key:粘贴 id_ed25519.pub 的内容
      • 中继服务器:ID 服务器
      • API服务器:留空

      13)如果服务异常,先看日志

      执行:

      journalctl -u rustdesk-hbbs -n 100 --no-pager
      
      journalctl -u rustdesk-hbbr -n 100 --no-pager
      

      也可以直接看文件:

      tail -n 50 /var/log/rustdesk-server/hbbs.log
      
      tail -n 50 /var/log/rustdesk-server/hbbr.log
      

      一句话记住

      先用 dpkg --print-architecture 看架构;
      然后把我示范里的 amd64 替换成你的架构;
      下载 GitHub release 的 2 个 .deb;
      安装后检查 rustdesk-hbbs 和 rustdesk-hbbr;
      最后读取 /var/lib/rustdesk-server/id_ed25519.pub 给客户端用。

      发布在 软件教程
      clouldonC
      clouldon
    • RE: 作为生活本身的哲学基础的操练

      安稳代表着平淡,折腾生活追求刺激,活着的感觉

      发布在 哲学基础
      clouldonC
      clouldon
    • Mumble 语音服务器搭建

      所实践过的GPT可用的安装流程
      不使用 Docker 的 Mumble(Murmur)服务器完整搭建流程,以常见的 Linux(Ubuntu/Debian)为例,直接能用。


      🧱 一、准备环境

      推荐系统:

      • Ubuntu 20.04 / 22.04 / 24.04
      • Debian 11 / 12

      更新系统:

      sudo apt update && sudo apt upgrade -y
      

      📦 二、安装 Mumble 服务器(Murmur)

      直接用官方仓库:

      sudo apt install mumble-server -y
      

      安装过程中会问两个问题:

      1️⃣ 是否开机自启

      👉 选 Yes

      2️⃣ 设置 SuperUser 密码

      👉 设置一个管理员密码(很重要)


      ⚙️ 三、基础配置

      配置文件位置:

      /etc/mumble-server.ini
      

      编辑:

      sudo nano /etc/mumble-server.ini
      

      🔑 常用关键配置(建议改)

      # 监听端口(默认 64738)
      port=64738
      
      # 最大用户数
      users=50
      
      # 欢迎消息
      welcometext="欢迎来到我的语音服务器"
      
      # 带宽限制(单位 bit/s)
      bandwidth=72000
      
      # 是否允许匿名用户
      allowanonymous=true
      
      # 服务器名称
      registerName=My Mumble Server
      

      👉 保存退出(Ctrl+O → Enter)


      🔐 四、设置管理员密码(如果刚才没设)

      sudo murmurd -ini /etc/mumble-server.ini -supw yourpass
      

      🚀 五、启动服务

      sudo systemctl start murmurd
      

      开机自启(如果没选):

      sudo systemctl enable murmurd
      

      检查状态:

      sudo systemctl status murmurd
      

      🌐 六、开放端口(非常关键)

      Mumble 默认端口:

      • 64738 UDP(语音)
      • 64738 TCP(控制)

      如果你用 UFW:

      sudo ufw allow 64738/tcp
      sudo ufw allow 64738/udp
      sudo ufw reload
      

      如果是云服务器(阿里云 / AWS / GCP)
      👉 还要在安全组里放行端口


      🧪 七、连接测试

      客户端(Mumble)连接:

      地址: 你的服务器IP
      端口: 64738
      用户名: 随便
      

      管理员登录:

      • 用户名:SuperUser
      • 密码:你刚设的

      ⚡ 八、优化建议(进阶)

      1️⃣ 降低延迟

      bandwidth=128000
      

      2️⃣ 限制公网注册(防炸服)

      allowanonymous=false
      

      3️⃣ 只允许注册用户

      registerPassword=你的服务器密码
      

      🔒 九、安全建议(很重要)

      • 改默认端口(防扫描)
      • 禁止匿名(防骚扰)
      • 定期备份 /var/lib/mumble-server/

      🧠 补充:文件位置

      内容 路径
      配置文件 /etc/mumble-server.ini
      数据库 /var/lib/mumble-server/
      日志 /var/log/mumble-server/

      🧭 常见问题

      ❓ 连不上?

      • 80% 是端口没开(UDP!)
      • 云服务器安全组没放行

      ❓ 没声音?

      • 检查 UDP
      • NAT / 防火墙问题

      发布在 软件教程
      clouldonC
      clouldon
    • RE: 作为生活本身的哲学基础的操练

      对于痛苦,主要亚文化的代价实在太大,也要认识到痛苦也是我们的一部分。

      发布在 哲学基础
      clouldonC
      clouldon
    • RE: 作为生活本身的哲学基础的操练

      居然是推特吗,那很多了

      发布在 哲学基础
      clouldonC
      clouldon
    • Linux自用命令脚本

      Linux自用命令脚本

      speedtest测速

      sudo apt-get install curl && curl -s https://packagecloud.io/install/repositories/ookla/speedtest-cli/script.deb.sh | sudo bash && sudo apt-get install speedtest
      

      适用于Debian


      vkit工具箱 作者@vps.dance
      原文链接
      GitHub源码链接

      bash <(curl -Lso- https://sh.vps.dance/vkit.sh)
      

      国内机如果不能用, 可尝试切换镜像

       bash <(curl -Lso- https://sh.vps.dance/vkit.sh) ghproxy
      
      VKit 提供Linux VPS常用的系统软件安装, 以及系统优化脚本, 目前集成功能如下.
      
      配置SSH Public Key (SSH免密登录)
      终端优化 (颜色美化/上下键查找历史)
      安装并开启 BBR
      系统优化 (TCP网络优化/资源限制优化)
      安装常用软件 (ping/traceroute/nslookup/nping/nc/tcpdump)
      修改默认SSH端口 (减少被扫描风险)
      增加swap分区 (虚拟内存)
      IPv4/IPv6优先级调整, 启用/禁用IPv6
      安装 Xray (同时安装 增强版的geosite/geoip规则)
      安装 SS
      安装 snell
      安装 hy2
      安装 realm (端口转发工具)
      安装 gost (隧道/端口转发工具)
      安装 nali (IP查询工具)
      安装 ddns-go (DDNS工具)
      安装 miniserve (HTTP 文件服务器)
      使用 CF WARP 添加 IPv4/IPv6 网络
      检测 VPS流媒体解锁 (RegionRestrictionCheck)
      检测 单线程/多线程网速 (i-abc/Speedtest)
      检测 VPS信息/IO/到国际网速 (Bench.sh)
      性能/IO 测试 (YABS)
      检测 TCP回程路由 (BestTrace)
      检测 TCP回程路由 (NextTrace)
      检测 Tiktok解锁 (TikTokCheck)
      检测 IP质量 (IPQuality)
      理论支持的Linux: Ubuntu/Debian, Centos/Redhat (未做严格测试).
      
      发布在 软件教程
      clouldonC
      clouldon
    • ppp_install.sh

      PPP 安装与管理脚本

      这是一个用于安装、配置、更新和管理 openppp2 服务的 Bash 脚本。脚本需要 root 权限才能执行,并提供菜单驱动的界面来执行各种操作。


      自动(半自动):一键脚本,仅支持 x86

      wget -4 -O ppp_install.sh https://raw.githubusercontent.com/zouazhi/zouazhi/main/ppp/ppp_install.sh && chmod +x ppp_install.sh && ./ppp_install.sh 
      

      GitHub优化加速

      wget -4 -O ppp_install.sh https://git.apad.pro/https://raw.githubusercontent.com/zouazhi/zouazhi/main/ppp/ppp_install.sh && chmod +x ppp_install.sh && ./ppp_install.sh 
      

      脚本内容

      #!/bin/bash
      # =============================================================================
      # openppp2 一键安装脚本(v3.6 智能最优版)
      # 自动检测架构 + tc + io-uring + simd,选择最佳版本
      # =============================================================================
      
      set -o pipefail
      
      # ==================== 颜色定义 ====================
      RED='\033[31m'
      GREEN='\033[32m'
      YELLOW='\033[33m'
      BLUE='\033[34m'
      RESET='\033[0m'
      
      print() { echo -e "${2:-$GREEN}$1${RESET}"; }
      
      # ==================== 创建 ppp 快捷命令 ====================
      create_ppp_shortcut() {
          if [ ! -f "/usr/local/bin/ppp" ]; then
              cat > /usr/local/bin/ppp << 'EOF'
      #!/bin/bash
      if [ -f "/root/ppp_install.sh" ]; then
          bash /root/ppp_install.sh
      else
          echo "❌ 脚本文件不存在,请重新下载"
          echo "wget -4 -O /root/ppp_install.sh https://raw.githubusercontent.com/zouazhi/zouazhi/main/ppp/ppp_install.sh"
          echo "chmod +x /root/ppp_install.sh"
      fi
      EOF
              chmod +x /usr/local/bin/ppp
              print "✅ 已创建 ppp 快捷命令!以后直接输入 ppp 即可运行" $GREEN
          else
              print "✅ ppp 快捷命令已存在" $GREEN
          fi
      }
      
      # ==================== 系统能力检测 ====================
      has_aesni() {
          grep -q 'aes' /proc/cpuinfo 2>/dev/null
      }
      
      kernel_supports_io_uring() {
          local major=$(uname -r | cut -d. -f1)
          local minor=$(uname -r | cut -d. -f2)
          [ "$major" -gt 5 ] || { [ "$major" -eq 5 ] && [ "$minor" -ge 1 ]; }
      }
      
      has_tc() {
          command -v tc >/dev/null 2>&1
      }
      
      # ==================== 自动选择最优版本 ====================
      choose_best_zip() {
          local arch=$(uname -m)
          case "$arch" in
              x86_64|amd64)
                  if kernel_supports_io_uring && has_aesni && has_tc; then
                      echo "openppp2-linux-amd64-tc-io-uring-simd.zip"
                  elif kernel_supports_io_uring && has_aesni; then
                      echo "openppp2-linux-amd64-tc-io-uring-simd.zip"
                  elif kernel_supports_io_uring && has_tc; then
                      echo "openppp2-linux-amd64-tc-io-uring.zip"
                  elif has_aesni && has_tc; then
                      echo "openppp2-linux-amd64-tc-simd.zip"
                  elif has_tc; then
                      echo "openppp2-linux-amd64-tc.zip"
                  else
                      echo "openppp2-linux-amd64.zip"
                  fi
                  ;;
              aarch64|arm64)
                  if kernel_supports_io_uring && has_tc; then
                      echo "openppp2-linux-aarch64-tc-io-uring.zip"
                  else
                      echo "openppp2-linux-aarch64.zip"
                  fi
                  ;;
              armv7l|armv7)
                  if kernel_supports_io_uring; then
                      echo "openppp2-linux-armv7l-io-uring.zip"
                  else
                      echo "openppp2-linux-armv7l.zip"
                  fi
                  ;;
              mips|mipsel)   echo "openppp2-linux-mipsel.zip" ;;
              ppc64le|ppc64el) echo "openppp2-linux-ppc64el.zip" ;;
              riscv64)       echo "openppp2-linux-riscv64.zip" ;;
              s390x)         echo "openppp2-linux-s390x.zip" ;;
              *)
                  print "❌ 不支持的架构: $arch" $RED
                  exit 1
                  ;;
          esac
      }
      
      # ==================== 下载函数 ====================
      prompt_replace_file() {
          local target_path="$1"
          local url="$2"
          local desc="$3"
      
          mkdir -p "$(dirname "$target_path")"
      
          if [ -f "$target_path" ]; then
              print "⚠️  $desc 已存在" $YELLOW
              read -p "是否替换?(y/n,默认 n): " REPLACE
              if [[ ! "$REPLACE" =~ ^[Yy]$ ]]; then return 0; fi
          fi
      
          print "📥 正在下载 $desc ..." $BLUE
          if wget -4 --no-check-certificate -q --show-progress -O "$target_path" "$url"; then
              print "✅ $desc 下载完成" $GREEN
              return 0
          else
              print "❌ 下载失败!" $RED
              return 1
          fi
      }
      
      # ==================== 主菜单 ====================
      while true; do
          clear
          print "=============== openppp2 一键脚本(v3.6 智能版)===============" $BLUE
          echo "1) 服务端 - 完整自动安装(推荐,自动最优版本)"
          echo "2) 服务端 - 配置系统服务(自行修改配置后使用)"
          echo "3) 通用 - 更新二进制文件(自动最优版本)"
          echo "4) 通用 - 重启服务"
          echo "5) 通用 - 停止服务"
          echo "6) 通用 - 查看运行状态(日志前50行)"
          echo "7) 通用 - 完全卸载"
          echo "8) 设置 ppp 快捷命令"
          echo "9) 更新本脚本"
          echo "10) 退出"
          read -p "请输入选项 [1-10]: " OPERATION
      
          case $OPERATION in
              1|3)
                  print "🌍 是否使用国内加速代理 (git.apad.pro)?" $BLUE
                  read -p "输入 y 使用加速,n 直连 (默认 y): " USE_PROXY
                  if [[ "$USE_PROXY" =~ ^[Nn]$ ]]; then
                      GITHUB_PROXY=""
                      print "✅ 使用直连 GitHub" $YELLOW
                  else
                      GITHUB_PROXY="https://git.apad.pro/"
                      print "✅ 已启用国内加速代理" $GREEN
                  fi
      
                  ZIP_NAME=$(choose_best_zip)
                  print "🔍 自动选择最优版本:$ZIP_NAME" $BLUE
      
                  mkdir -p /opt/ppp && cd /opt/ppp
      
                  URL="${GITHUB_PROXY}https://github.com/liulilittle/openppp2/releases/latest/download/${ZIP_NAME}"
                  prompt_replace_file "/opt/ppp/${ZIP_NAME}" "$URL" "$ZIP_NAME" || continue
      
                  unzip -o "$ZIP_NAME" ppp -d . && chmod +x ppp && rm -f "$ZIP_NAME"
                  print "✅ openppp2 最优版本处理完成" $GREEN
      
                  if [ "$OPERATION" = "1" ]; then
                      print "🔧 正在安装依赖..." $BLUE
                      if command -v apt-get >/dev/null; then
                          apt-get update && apt-get install -y jq uuid-runtime unzip
                      elif command -v dnf >/dev/null; then
                          dnf install -y jq util-linux unzip
                      elif command -v yum >/dev/null; then
                          yum install -y jq util-linux unzip
                      else
                          print "❌ 无法识别包管理器,请手动安装 jq uuid-runtime unzip" $RED
                          continue
                      fi
                      print "✅ 依赖安装完成" $GREEN
      
                      prompt_replace_file "/opt/ppp/ppp.sh" "${GITHUB_PROXY}https://raw.githubusercontent.com/zouazhi/zouazhi/main/ppp/config/ppp.sh" "ppp.sh" || continue
                      chmod +x ppp.sh
      
                      read -p "是否自行修改 appsettings.json?(y/n,默认 n): " SELF
                      if [[ "$SELF" =~ ^[Yy]$ ]]; then
                          print "请手动修改 /opt/ppp/appsettings.json 后,运行选项 2" $YELLOW
                          create_ppp_shortcut
                          continue
                      fi
      
                      prompt_replace_file "/opt/ppp/appsettings.json" "${GITHUB_PROXY}https://raw.githubusercontent.com/zouazhi/zouazhi/main/ppp/config/appsettings.json" "appsettings.json" || continue
      
                      read -p "服务器 IP(默认 0.0.0.0): " NEW_IP
                      read -p "端口(默认 20000): " NEW_PORT
                      read -p "GUID(留空自动生成): " NEW_GUID
      
                      NEW_IP=${NEW_IP:-0.0.0.0}
                      NEW_PORT=${NEW_PORT:-20000}
                      [[ -z "$NEW_GUID" ]] && NEW_GUID=$(uuidgen)
      
                      PROTOCOL_KEY=$(tr -dc 'a-zA-Z0-9' </dev/urandom | head -c 16)
                      TRANSPORT_KEY=$(tr -dc 'a-zA-Z0-9' </dev/urandom | head -c 16)
      
                      cp -f appsettings.json appsettings.json.bak 2>/dev/null
      
                      jq --indent 4 \
                          --arg ip "$NEW_IP" --arg port "$NEW_PORT" --arg guid "$NEW_GUID" \
                          --arg pkey "$PROTOCOL_KEY" --arg tkey "$TRANSPORT_KEY" '
                          .tcp.listen.port = ($port|tonumber) |
                          .udp.listen.port = ($port|tonumber) |
                          .udp.static.servers[0] = ($ip + ":" + $port) |
                          .client.server = ("ppp://" + $ip + ":" + $port) |
                          .client.guid = $guid |
                          .key."protocol-key" = $pkey |
                          .key."transport-key" = $tkey
                      ' appsettings.json > temp.json && mv temp.json appsettings.json
      
                      prompt_replace_file "/etc/systemd/system/ppp.service" "${GITHUB_PROXY}https://raw.githubusercontent.com/zouazhi/zouazhi/main/ppp/config/ppp.service" "ppp.service" || continue
      
                      chmod 644 /etc/systemd/system/ppp.service
                      systemctl daemon-reload
                      systemctl enable --now ppp.service
      
                      if systemctl is-active --quiet ppp.service; then
                          print "🎉 安装成功!服务已启动" $GREEN
                          create_ppp_shortcut
                      else
                          print "⚠️ 服务启动失败,请检查日志" $YELLOW
                      fi
                  fi
                  ;;
      
              2)
                  if [ ! -f "/opt/ppp/appsettings.json" ]; then
                      print "❌ 未找到 appsettings.json,请先运行选项 1" $RED
                      continue
                  fi
                  cd /opt/ppp || { print "❌ /opt/ppp 目录不存在" $RED; continue; }
      
                  prompt_replace_file "/etc/systemd/system/ppp.service" \
                      "${GITHUB_PROXY:-https://git.apad.pro/}https://raw.githubusercontent.com/zouazhi/zouazhi/main/ppp/config/ppp.service" \
                      "ppp.service" || continue
      
                  systemctl daemon-reload && systemctl enable --now ppp.service
                  print "✅ 系统服务配置完成并启动" $GREEN
                  ;;
      
              4) systemctl restart ppp.service && print "✅ 服务已重启" $GREEN ;;
              5) systemctl stop ppp.service && print "✅ 服务已停止" $GREEN ;;
              6)
                  print "=== ppp.log(前 50 行)===" $BLUE
                  if [ -f "/opt/ppp/ppp.log" ]; then
                      head -n 50 /opt/ppp/ppp.log
                  else
                      print "日志文件不存在" $YELLOW
                  fi
                  echo
                  print "=== ppp.service 状态 ===" $BLUE
                  systemctl status ppp.service --no-pager -l
                  ;;
              7)
                  print "🗑️ 开始卸载..." $YELLOW
                  systemctl stop ppp.service 2>/dev/null
                  systemctl disable ppp.service 2>/dev/null
                  rm -f /etc/systemd/system/ppp.service
                  systemctl daemon-reload
      
                  print "是否保留配置文件?(默认保留)" $BLUE
                  read -p "输入 y 保留(默认),n 删除: " KEEP_CONFIG
                  if [[ "$KEEP_CONFIG" =~ ^[Nn]$ ]]; then
                      rm -rf /opt/ppp
                      print "✅ 已删除所有文件" $GREEN
                  else
                      rm -f /opt/ppp/ppp /opt/ppp/ppp.sh /opt/ppp/openppp2-linux-*.zip 2>/dev/null
                      print "✅ 已保留配置文件" $GREEN
                  fi
                  rm -f /usr/local/bin/ppp
                  print "✅ 卸载完成" $GREEN
                  exit 0
                  ;;
              8)
                  create_ppp_shortcut
                  ;;
              9)
                  print "🌍 更新本脚本 - 请选择方式" $BLUE
                  echo "1) 使用国内加速 (推荐)"
                  echo "2) 直连 GitHub"
                  read -p "请输入 [1-2](默认 1): " UPDATE_MODE
                  if [ "$UPDATE_MODE" = "2" ]; then
                      UPDATE_URL="https://raw.githubusercontent.com/zouazhi/zouazhi/main/ppp/ppp_install.sh"
                  else
                      UPDATE_URL="https://git.apad.pro/https://raw.githubusercontent.com/zouazhi/zouazhi/main/ppp/ppp_install.sh"
                  fi
                  print "📥 正在下载最新脚本..." $BLUE
                  wget -4 -O /root/ppp_install.sh "$UPDATE_URL" && chmod +x /root/ppp_install.sh
                  if [ $? -eq 0 ]; then
                      print "✅ 脚本更新成功!正在重新启动..." $GREEN
                      exec /root/ppp_install.sh
                  else
                      print "❌ 更新失败" $RED
                  fi
                  ;;
              10)
                  print "👋 退出脚本" $GREEN
                  exit 0
                  ;;
              *)
                  print "❌ 无效选项" $RED
                  ;;
          esac
      
          echo
          read -p "按 Enter 键返回主菜单..."
      done
      发布在 软件教程 openppp2
      clouldonC
      clouldon
    • openppp2简易使用教程

      1.openppp2项目简介

      介绍一种VPN-openppp2,目前来看不会被墙,而且支持内网穿透,虚拟子网,UDP多线路宽频聚合,CDN转发,国内自动BGP分流等等更多功能看github
      仓库:https://github.com/liulilittle/openppp2
      使用指南:https://github.com/liulilittle/openppp2/blob/main/README_CN.md

      下文将openppp2简称为ppp
      ppp目前在IPv6上支持不好,不太能跑在IPv6上,使用前得把IPv4优先或者禁用IPv6(Window客户端),如果是直连比较吃线路,除非个人会调整网络调优,或是使用CDN转发。
      其在Linux下运行支持较为良好,而在Windows上常常会遇到奇奇怪怪的问题(IPv6问题导致无法进行有效通讯),作者已给出部分解决方法,见使用指南。

      原版安装参考原文-快速开始

      2.脚本简介及服务端安装

      因为最近使用了AI写了一键脚本,在Debian系统里面还是可用的。

      wget -4 -O ppp_install.sh https://raw.githubusercontent.com/zouazhi/zouazhi/main/ppp/ppp_install.sh && chmod +x ppp_install.sh && ./ppp_install.sh
      

      脚本地址:https://github.com/zouazhi/zouazhi/blob/main/ppp/ppp_install.sh
      拉取脚本之后,

      ✅ 脚本启动,进入主循环
      openppp2一键脚本
      请选择操作:
      1) 服务端-自动交互安装[完整安装ppp及配置,系统服务]
      2) 服务端-自行修改配置[跳过配置文件,直通系统服务]
      3) 通用-更新[更新openppp2二进制文件并重新配置服务]
      4) 通用-重启[重启ppp服务]
      5) 通用-停止[停止ppp服务]
      6) 通用-查看运行状况[查看ppp.log和系统服务状态]
      7) 通用-卸载ppp[删除文件-删除重载系统服务]
      8) 退出脚本
      请输入选项[1-8]: 
      

      2.1全新服务端安装

      数字1就会安装jq、uuidgen 和 unzip,拉取启动脚本,和部分改好的配置文件,和系统服务功能。
      工作目录默认放在opt/ppp下,此时可以选择(1自行修改或(2交互式输入,如下所示。

      ✅ ppp.sh 启动脚本 拉取完成
      ✅ ppp.sh 启动脚本 已具有可执行权限
      是否自行修改 appsettings.json 文件?
      1) 是(脚本将暂停)
      2) 否(通过脚本输入 IP、端口和 GUID)
      请输入选项 (1/2): 
      

      以下介绍两个1-1和1-2的不同

      2.2修改配置文件和交互

      (2交互较为简单,只需要输入数字2,然后输入IP,端口,GUID,后续会进行配置文件的补全,并完成启动,完成这一步的的直接转到[[#3.客户端使用]]
      对于自行修改配置文件
      (1则需要修改opt/pppppsettings.json里面tcp,udp监听端口(默认20000)以及udp下的"servers": ["1.1.1.1:20000"],"client"下的"guid",和"server"(默认为ppp://1.1.1.1:20000),其中1.1.1.1即为入口的IP,20000即为工作端口。

      附GUID生成网站:https://www.guidgen.com/

      该脚本拉取的配置文件是经修改的精简版本,方便快速启动并默认开启内网穿透,更多内容请看上文仓库原文配置文件及使用说明。

      2.3自行修改配置文件后续

      该为选择1-1之后脚本暂停之后重新执行脚本,即为主循环中的2。
      优先参考原文
      重新执行脚本:

      bash /root/ppp_install.sh
      

      即会自动拉取启动脚本和系统服务。

      2.4服务端启动脚本及系统服务

      若是选择服务端的启动脚本为下所示,放置于/opt/ppp/ppp.sh内

      ./ppp --mode=server > ./ppp.log
      

      脚本内系统服务为引用改sh文件进行服务运行,系统服务如下所示

      [Unit]
      Description=PPP PRIVATE NETWORK™ 2
      After=network.target network-online.target
      
      [Service]
      Type=simple
      User=root
      Group=root
      WorkingDirectory=/opt/ppp
      ExecStart=/bin/bash /opt/ppp/ppp.sh
      Restart=always
      RestartSec=20
      StartLimitBurst=5
      SyslogIdentifier=ppp
      
      [Install]
      WantedBy=multi-user.target
      

      即可以使用service ppp stop等service系统服务命令进行控制

      相应的查看当前运行状况可以采用检查service ppp status和/opt/ppp/ppp.log来判断运行状况。
      其中/opt/ppp/ppp.log其实为实时运行图:

      PPP                                                                             
      --------------------------------------------------------------------------------
      Application started. Press Ctrl+C to shut down.                             
      Max Concurrent        : 1                                                   
      Process               : 149273                                              
      Triplet               : linux:X86_64                                        
      Cwd                   : /opt/ppp             
      Template              : /opt/ppp/appsettings.json  
      Public IP             : ::               
      Interface IP          : ::                  
      Service 1             : [::]:20000/ppp+tcp   
      Service 2             : [::]:20000/ppp+udp  
      Hosting Environment   : server:production                                      
      VPN                              
      ----------------------------------------------------------------------------
      Duration              : 00:35:46   
      Sessions              : 0        
      TX                    : 0.000000 B   
      RX                    : 0.000000 B    
      IN                    : 21.000000 B   
      OUT                   : 6.154297 KB   
      

      实际上,openppp2的启动命令为./ppp --mode=server,在终端输入即可得到实时运行的流量变化,客户端数等内容,但其为前台运行,本脚本将其运行页面写入ppp.log以便管理
      同样你也可以使用screen等工具使其在后台启动(目录下自行./ppp --mode=server),此时并不需要系统服务,望读者注意。

      3.客户端使用

      客户端和服务端使用同一套二进制文件,同样对于配置文件,其中包括服务端部分和客户端部分,最简化的配置文件只需包含各自服务端/客户端的配置内容。
      上文所提到的配置文件已经包括客户端,服务端两部分,即是通用的。所以直接从服务端拉取配置文件即可,对于每个不同的客户端,其GUID不能相同,但从服务端拉取的配置文件是修改过的,且当前主机为第一客户端,所以不用修改,与其他小伙伴共享时也需修改其GUID。另外对于下文启用了--tun-vnet=yes的--tun-ip=10.0.0.5 同时在线的子网IP也不能相同。

      3.1Windows

      Windows用户若存在IPv4/IPv6双栈问题请阅读原文并尝试使用以下命令,或者直接禁用IPv6。

      原文

      命令 功能 格式
      --system-network-reset 网络重置 --system-network-reset
      --system-network-optimization 性能优化 --system-network-optimization
      --system-network-preferred-ipv4 设置IPV4网络优先 --system-network-preferred-ipv4
      --system-network-preferred-ipv6 设置IPV6网络优先 --system-network-preferred-ipv6
      --no-lsp 禁用LSP --no-lsp

      优先参考原文

      1. 现于releases中下载openppp2-windows-amd64.zip
      2. 解压后去除cmcc_cidr.txt, crtc_cidr.txt, ip.txt, starrylink.net.key, starrylink.net.pem, appsettings.json,然后放入服务器拉取的appsettings.json。
      3. 新建bat文件start.bat填入以下命令
      start ppp.exe --mode=client --config=./config/修改这里.json --auto-pull-iplist --tun-ip=10.0.0.5 --tun-gw=10.0.0.0 --tun-mask=24 --tun-host=yes --link-restart=3  --tun-vnet=yes --tun-static=no --block-quic=yes --set-http-proxy=no --tun-mux-acceleration=3 --tun-ssmt=4/st 
      

      其中--tun-host为控制网络走VPN
      --tun-static为是否启用udp静态隧道
      --config=./config/修改这里.json为配置文件目录,此为例子,按需修改。如果配置文件名为appsettings.json则为--config=./appsettings.json。
      更多命令参考原文
      然后点击start.bat即可

      3.2Linux客户端

      对于Linux其运行和提到的服务端相似,而启动命令可以参照下

      ./ppp --mode=client --config=./ggvHK.json --tun-ip=10.0.0.88 --tun-gw=10.0.0.0 --tun-mask=24 --tun-host=no --link-restart=3 --tun-mux-acceleration=3 --tun-static=no --tun-ssmt=4/st --block-quic=yes > ./ppp.log
      

      可以使用一键脚本写入,将启动sh文件将服务端的--mode=server改为--mode=client即可。

      3.3启动后

      启动后可以用ping去简易判断连接情况,不受--tun-host影响

      PS C:\Users\2233\Desktop> ping 10.0.0.1
      
      正在 Ping 10.0.0.1 具有 32 字节的数据:
      来自 10.0.0.1 的回复: 字节=32 时间=73ms TTL=127
      来自 10.0.0.1 的回复: 字节=32 时间=67ms TTL=127
      来自 10.0.0.1 的回复: 字节=32 时间=70ms TTL=127
      来自 10.0.0.1 的回复: 字节=32 时间=73ms TTL=127
      

      对于IPv6问题的用户可以采用http代理的模式替代,可以使用启动命令的--set-http-proxy=yes进行系统代理,或自行代理。配置文件默认使用8080端口进行http代理(sock5帮我删掉了)。

      "http-proxy": {
                  "bind": "0.0.0.0",
                  "port": 8080
              }
      

      启动图

      发布在 软件教程 openppp2
      clouldonC
      clouldon
    • Welcome to your NodeBB!

      Welcome to your brand new NodeBB forum!

      This is what a topic and post looks like. As an administrator, you can edit the post's title and content.
      To customise your forum, go to the Administrator Control Panel. You can modify all aspects of your forum there, including installation of third-party plugins.

      Additional Resources

      • NodeBB Documentation
      • Community Support Forum
      • Project repository
      发布在 讨论
      clouldonC
      clouldon