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

    主题

    • clouldonC

      MosDNS本地服务器安装

      关注中 忽略中 已定时 已固定 已锁定 已移动 软件教程
      1
      1 帖子
      111 浏览
      clouldonC
      以下是 MosDNS-X + EasyMosdns 组合的详细安装教程。教程将严格遵循您指定的目录结构和文件处理方式,所有文件将下载至 /etc/mosdns,二进制文件复制到 /usr/local/bin/,并包含权限设置、服务管理及用户自定义修改的方法。 一、准备工作 在开始之前,请确保满足以下条件: 操作系统:Linux 系统(如 Debian/Ubuntu/CentOS/AlmaLinux 等)。 权限:拥有 root 或具有 sudo 权限的用户。 网络:能够访问 GitHub 及互联网以下载所需文件。 端口:确保 53 端口未被其他 DNS 服务(如 systemd-resolved)占用,并已安装 unzip、wget、curl 等工具: # 更新包索引并安装必要工具(以 Debian/Ubuntu 为例) sudo apt update && sudo apt install -y wget unzip curl iptables 备份:如果已有 MosDNS 配置,请先备份 /etc/mosdns 目录。 二、下载所有必需文件 我们将所有文件集中下载并解压到 /etc/mosdns 目录中。请依次执行以下命令: 创建并进入工作目录 sudo mkdir -p /etc/mosdns cd /etc/mosdns 下载 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 下载 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

      Win11安装Debian12.14软路由

      关注中 忽略中 已定时 已固定 已锁定 已移动 软件教程
      1
      1 帖子
      142 浏览
      clouldonC
      本教程以 Debian 12.14 在 VirtualBox / Hyper-V / VMware 中的虚拟机为例,采用桥接本机网卡方式,实现软路由功能(主要用于 LAN 侧转发 + 代理)。不需要配置 WAN 口,仅配置一个 LAN 接口。 1. 安装 Debian 12.14 并启用 Root SSH 密码登录 下载 Debian 12.14 ISO 镜像(官方 netinst 或 full CD 均可)。 在虚拟机软件(VirtualBox / Hyper-V / VMware)中新建虚拟机: 网络适配器:选择 桥接(Bridged) 到你的本机物理网卡(这样虚拟机能直接获得局域网 IP)。 CPU、内存、硬盘根据需求分配(推荐 2 核 + 1GB内存)。 挂载 ISO 并启动安装。 安装过程中: 选择语言、键盘等。 分区:推荐整个磁盘(Guided - use entire disk)。 设置 root 密码(重要!必须设置)。 安装 SSH server(在任务选择中勾选 “SSH server”)。 安装完成后重启,进入系统。 启用 Root SSH 密码登录: nano /etc/ssh/sshd_config 找到并修改以下两行(去掉注释 # PermitRootLogin yes PasswordAuthentication yes 保存退出(Ctrl+O → Enter → Ctrl+X)。 重启 SSH 服务: systemctl restart ssh 2. 配置 LAN 接口(静态 IP 或 DHCP) 查看网卡名称: ip a 例如: ens18 或者: eth0 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;或者虚拟机连接,查看ipauto eth0 iface eth0 inet dhcp # dhcp顾名思义 保存后应用配置并重启网络及电脑:systemctl restart networking # 最好重启虚拟机 reboot 此时即可使用 SSH 客户端(推荐Netcatty;;或如 Xshell、MobaXterm、FinalShell 等),或cmd/powershell以 ssh root@IP 登录。 重启后验证:ip addr show ip route ping 119.29.29.29 3. SSH 登录并开启 IPv4/IPv6 转发 使用 SSH 客户端以 root 登录虚拟机。 开启 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 验证转发是否开启: 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

      Docker mongodb备份还原数据库

      关注中 忽略中 已定时 已固定 已锁定 已移动 软件教程
      1
      1 帖子
      111 浏览
      clouldonC
      查看容器名字 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

      Rustdesk自托管中继服务端安装教程

      关注中 忽略中 已定时 已固定 已锁定 已移动 软件教程
      1
      1 帖子
      139 浏览
      clouldonC
      下面就是 只安装 hbbs + hbbr 的简单版本。 1)先看当前最新版本 浏览器打开: https://github.com/rustdesk/rustdesk-server/releases/latest 现在会跳到 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

      Mumble 语音服务器搭建

      关注中 忽略中 已定时 已固定 已锁定 已移动 软件教程
      2
      2 帖子
      95 浏览
      四折光曲四
      https://github.com/mumble-voip/mumble-docker https://gitcode.com/gh_mirrors/mu/mumble/blob/master/auxiliary_files/mumble-server.ini 添加环境变量: MUMBLE_CONFIG_PORT=3322 MUMBLE_CUSTOM_CONFIG_FILE=/data/mumble_server_config.ini (不然每次重启都重置) MUMBLE_SUPERUSER_PASSWORD=xxxxx (超级用户名为:SuperUser) MUMBLE_CONFIG_SERVERPASSWORD=xxxxx MUMBLE_CONFIG_SENDVERSION=false 允许中文用户名:在配置文件添加 username=[-\w\x{4e00}-\x{9fa5}=\[\]{}\(\)\@\|\.]+ 已注册用户,需要清除密码才能连接,即注册后无需密码连接,保留证书
    • clouldonC

      Linux自用命令脚本

      关注中 忽略中 已定时 已固定 已锁定 已移动 软件教程
      1
      1 帖子
      154 浏览
      clouldonC
      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

      ppp_install.sh

      关注中 忽略中 已定时 已固定 已锁定 已移动 软件教程 openppp2
      1
      1 帖子
      152 浏览
      clouldonC
      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
    • clouldonC

      openppp2简易使用教程

      关注中 忽略中 已定时 已固定 已锁定 已移动 软件教程 openppp2
      2
      2 帖子
      250 浏览
      clouldonC
      因为在移动平台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应用看到 [image: Pasted-image-20260418204517.png] [image: Pasted-image-20260418204548.png] 因为0.0.0.0代表本机地址,所以在局域网下,填入ppp客户端的IP,端口,代理类型即可达到效果 [image: Screenshot-2026-04-18-20-46-38-82-0745948e13496426d21696226f28cc3a.jpg] 效果如图 [image: Screenshot-2026-04-18-20-48-10-72-0745948e13496426d21696226f28cc3a.jpg]
    • clouldonC

      Welcome to your NodeBB!

      关注中 忽略中 已定时 已固定 已锁定 已移动 讨论
      2
      2 帖子
      266 浏览
      四折光曲四
      BBS,互联网遥远的记忆()