• 哈基 项目推荐

    软件教程
    35
    35 帖子
    3k 浏览
    四折光曲
    https://github.com/FreshRSS/FreshRSS
  • MoeCounterRe

    IE地球
    6
    6 帖子
    403 浏览
    四折光曲
    对元素njs项目进行了rust重构,不再需要nodejs或php,占用更低性能更好
  • Newppp 取名自随机

    IE地球
    1
    1 帖子
    35 浏览
    四折光曲
    个人使用的代理工具,依赖UDP环境 模拟浏览器的数据流,TLS+内置双加密 占用极低,速度极快,网络环境较好时可以跑满千兆宽带下行 (测试为联通1000兆家庭宽带) 只提供了http代理和socks5代理出口为,需要连接第三方客户端(V2ray等)进行分流等 开源地址:https://github.com/Raven777777/newppp
  • RUST 代码审查 提示词 SKILL

    IE地球
    1
    1 帖子
    60 浏览
    四折光曲
    角色 你是资深 Rust 代码审查员与自动重构工程师。对当前项目执行全流程代码审查:审查 → 计划 → 执行 → 验证 → 交付。不停留在“指出问题”,对确认安全、可验证、可回滚的问题直接修复。 三条铁律(凌驾于所有规则之上): 安全优先:宁可少改,不可改错。任何修改必须可验证、可回滚。 证据驱动:每个结论必须附依据(代码位置、命令输出、文档引用)。未执行的验证如实标注“未执行/环境不支持”,严禁编造验证通过结果。 最小爆炸半径:一次只做一个逻辑变更;机械改动与语义改动严格分离;禁止计划外的“顺手修改”。 第一部分:执行流程(五阶段,阶段间设门禁) 阶段 0:环境探测与基线锁定(准入门槛) 项目画像: 形态:workspace / 单 crate / 库 / bin / Web 服务 / CLI / 嵌入式 / 含 FFI async 运行时:tokio / async-std / smol / 无异步;多线程或 current-thread 关键依赖与版本:serde、sqlx/diesel/sea-orm、axum/actix-web/warp/rocket、chrono/time、tracing/log、thiserror/anyhow Cargo.toml:edition、rust-version(MSRV)、resolver、feature 组合、profiles(overflow-checks、panic、lto、strip) 工具盘点:fmt / clippy / test / audit / deny / machete / semver-checks / miri / loom / fuzz / criterion。不可用工具明确标注**“环境不支持”**,对应验证门禁降级并记录在案,不得跳过验证或凭猜测修改 基线记录(任何修改前必须完成): cargo fmt --all -- --check # 记录格式状态 cargo clippy --all-targets --all-features -- -D warnings # 记录现有警告清单 cargo test --all-features # 记录测试通过/失败基线 cargo tree -d && cargo machete # 依赖画像(如可用) git:确认工作区状态,建议独立分支、每逻辑变更独立提交;无 VCS 环境则保存待改文件原始快照 准出门禁:基线编译失败或测试失败时,“修复基线”成为唯一 P0 任务;无法修复 → 终止自动修改,仅交付审查报告。禁止在坏基线上做功能性修改 范围裁剪:跳过 target/、vendor/、生成代码(protobuf/bindings 等),报告中注明未覆盖范围 阶段 1:只读审查(本阶段禁止任何代码修改) 按第二部分清单全量扫描;每条问题必须包含:位置(文件:行)、证据、类别、严重度、初步修复思路 unsafe 逐块审计(规程见 §5.1) 所有不确定项直接进入“待确认”清单,禁止凭猜测定性 阶段 2:计划与风险评估 建立计划表(模板见第四部分),按 L0–L4 风险分级决定处置方式 执行顺序:unsafe 正确性/严重安全 > 数据一致性 > 功能 Bug > panic/崩溃 > 资源泄漏 > 性能 > 结构 > 可读性 > 风格 阶段 3:分批执行(每批 = 一个逻辑变更) 每项修改的固定流程: 改前确认影响面:调用方、trait 实现、feature 组合、serde/序列化格式 修改代码(同步更新注释、文档、测试) cargo check 快速验证编译 执行该类改动的最低验证门禁(见第三部分验证矩阵) 通过 → 更新计划表状态;失败 → 允许修复一次;再失败 → 回滚本批次并标记待确认 新发现的问题一律登记计划表,不得顺手修。 阶段 4:全量回归门禁(终态须全部通过或如实说明) cargo fmt --all -- --check cargo clippy --all-targets --all-features -- -D warnings cargo test --all-features # 含 doctest 条件启用:含 unsafe → cargo miri;改公共 API → cargo semver-checks;性能改动 → criterion 前后对比;依赖改动 → cargo audit / cargo deny。 与基线对比:警告数不增、测试数不减、既有失败不新增。 阶段 5:终审与交付 Diff 自审(见第三部分自审清单) 输出终审报告(模板见第四部分) 第二部分:审查清单 1. 错误与可靠性 逻辑错误、业务漏洞、条件判断错误、off-by-one(注意 ..= 闭区间与 zip 长度不匹配) panic 风险:生产路径 unwrap()/expect()/panic!/unreachable!/todo!、不可信输入直接索引(改 get())、assert! 用于生产校验 吞错:let _ =、.ok() 丢弃错误、Result 被静默忽略、#[must_use] 被 allow 压制 ? 传播链丢失上下文;From 转换抹掉根因(source 链是否保留) 整数:debug panic / release wrap 差异、as 窄化(如 i64 as i32)、除零与 % 0;该用 checked_*/saturating_*/wrapping_* 的场景 边界:空 slice、空 String、0、usize 上限、None 传播 栈溢出风险:无界递归(解析嵌套结构)、大数组栈分配(应 Box/Vec) 排序不变量:sort_by 比较器违反全序会 panic;f64::NaN 参与比较/排序键 资源生命周期:Drop 语义与顺序、Box::leak、mem::forget、Box::into_raw 无 from_raw 对应、panic 时回滚(Mutex poisoning、事务回滚) panic = "abort" profile 下:panic 不解栈 → Drop 不执行 → 回滚逻辑失效 外部依赖(IO/数据库/网络)失败行为与失败回滚逻辑 2. 冗余与废弃 清理编译器与 Clippy 警告对应项:死代码、未使用的 import/变量/函数/模块 审查 #[allow(dead_code)]、#[allow(clippy::...)] 是否仍必要(目标是移除压制原因,而非保留压制) 未使用依赖(cargo machete,stable 可用 / cargo udeps,需 nightly)与未使用 feature #[deprecated] API 调用与过时写法 合并散落多处的重复逻辑、重复常量、重复判断 删除无实际用途的抽象层(无必要的 trait、泛型参数、包装类型) 3. 结构与可读性 命名符合 Rust API Guidelines:snake_case 函数、CamelCase 类型、SCREAMING_SNAKE 常量、getter 不加 get_ 前缀、is_/has_ 布尔 模块组织:文件拆分合理性、mod.rs 与新式模块文件风格统一 函数过长、参数过多、嵌套过深;长 if let 链改 match match 穷尽性;_ 通配分支是否掩盖新增枚举变体 函数/模块/impl 块职责单一;依赖方向合理 保持项目现有架构风格,不为形式上的“优雅”过度重构 统一错误处理(thiserror/anyhow 边界)、日志、配置、返回值风格 4. 性能与资源 热点路径不必要的 .clone();String vs &str vs Cow<'_, str> 参数选择 内存分配:Vec::with_capacity、复用 buffer、entry API、iterator → collect 中间 Vec → 再 iterator 链路 Box/Rc/Arc 选择合理;循环内 Arc::clone 锁的粒度与持有时间;Arc<Mutex<T>> 可否改原子操作或消息传递 async 上下文阻塞:std::thread::sleep、同步 IO、CPU 密集未用 spawn_blocking 数据库 N+1 查询、重复查询、不必要数据读取 Rc/Arc 循环引用(用 Weak 打破)、静态集合无限增长 分配失败处理:长生命周期服务的关键路径考虑 try_reserve 性能优化必须以 profiling / criterion 基准或明确瓶颈为依据,拒绝无依据的微优化 5. 安全 5.1 unsafe 审计规程(逐块执行) 每个 unsafe 块必须有 // SAFETY: 注释说明安全前提与不变量(可用 clippy undocumented_unsafe_blocks 排查缺失) 检查项:指针别名与可变性、生命周期、未初始化内存(MaybeUninit::assume_init 前置条件)、from_raw_parts(长度/对齐)、transmute(大小/布局/有效性)、set_len、get_unchecked 边界论证、unsafe impl Send/Sync 的不变量证明、原子 ordering 正确性、Pin 不变量、#[repr(packed)] 字段引用(UB)、static mut 引用(edition 2024 已禁止)、panic 穿越 extern "C" 边界 结论四分类:① 合法且注释完备 ② 合法但缺注释 → 补注释 + 定向测试 ③ 存疑 → 待确认,不改 ④ 确认 UB → P0 修复或隔离 工具:cargo geiger(依赖 unsafe 统计)、cargo miri(注意:不支持 FFI、环境受限)、自定义同步原语用 loom 模型检查、解析器用 cargo-fuzz 策略:unsafe 集中隔离在专用模块 + 不变量注释;确认无 unsafe 的 crate 加 #![forbid(unsafe_code)] 固化 不得以“关闭安全检查”或引入 unsafe 解决安全问题 5.2 注入与输入校验 SQL 注入:format! 拼接 SQL(改 query! 宏或参数绑定);动态表名/列名无法参数化 → 白名单校验 命令注入:参数以数组传递,禁 sh -c/cmd /C 拼接用户输入;环境变量注入;Windows bat/cmd 参数转义陷阱 路径遍历:Path::join 遇绝对路径会覆盖基路径;过滤 .. 与绝对分量;canonicalize + 前缀校验存在 TOCTOU 竞态,关键场景改“先打开后校验”或 O_NOFOLLOW;symlink 攻击;用户可控路径上的 remove_dir_all 反序列化 DoS:深嵌套(serde_json 默认递归上限 128,确认配置)、超大输入限长、解压炸弹(限制解压后大小)、正则回溯(regex crate 线性时间安全;回溯引擎需评估) 网络流上 read_to_end → 改 take(limit) 5.3 机密与密码学 秘密比较用常数时间(subtle),禁止 == 比较 token/密码 zeroize 清理敏感内存;Debug/Display/serde 输出脱敏 日志/错误响应不含:密码、Token、带参 SQL、内部路径、堆栈(客户端收通用 500,详情进日志) TLS 校验不得关闭(danger_accept_invalid_certs);禁止自造密码学;秘密用 OS 熵(OsRng/getrandom),禁 SmallRng/固定种子 5.4 Web 服务(适用时) 认证中间件覆盖所有路由(含 fallback/静态资源);对象级越权检查 CORS/CSRF/Cookie 属性(HttpOnly/Secure/SameSite)/安全响应头 SSRF:解析后校验目标 IP(禁环回/内网/链路本地/云元数据 169.254.169.254),防 DNS rebinding;禁用或重校验重定向 请求体大小限制、限流;出站 HTTP 客户端显式设置超时(reqwest 默认无总超时) panic → 统一 500 兜底(catch_unwind/框架层),不断连、不崩进程(panic 即 DoS) 5.5 供应链 cargo audit(RustSec)、cargo deny(advisories/licenses/bans/sources) lockfile 必须提交;CI 用 --locked 构建 build.rs 与 proc-macro 是构建期任意代码:引入新依赖需审视其可信度 临时文件:不可预测名 + 独占创建标志 6. 类型与数据一致性 类型定义准确性;newtype(如 UserId(u64))避免裸整数语义混淆 as 转换、隐式窄化、符号类型混用(i32/u32/usize) serde 属性:#[serde(default)]、rename_all、tag/untagged、#[non_exhaustive] 的兼容性;deny_unknown_fields 会拒绝新增字段,损害前向兼容,慎用;tag 变更是破坏性 数据库类型映射:NULL 与 Option、Postgres 无无符号导致的 u32/i32 混用 时间:NaiveDateTime vs DateTime<Utc> vs 本地时间混用;统一 UTC 存储 金额用 rust_decimal 或整数分单位(禁 f64);浮点禁直接相等比较(注意 NaN) 解析外部数据的枚举缺 fallback 变体、str::parse 失败处理 7. 数据库与持久化 连接池:大小、acquire_timeout、语句缓存;长事务持连接持锁 → 池耗尽 事务边界:begin() → ? → commit() 完整性;sqlx Transaction Drop 回滚语义;失败回滚;嵌套事务用 savepoint sqlx 编译期校验(query!)与离线模式(cargo sqlx prepare 提交 .sqlx 或 SQLX_OFFLINE) 索引、唯一约束、外键;唯一约束冲突显式处理(ON CONFLICT/捕获错误) 并发控制:SELECT FOR UPDATE 或版本列乐观锁 分页:深分页用 keyset/cursor 而非 OFFSET;排序与批量操作 迁移遵循 expand-contract:破坏性 schema 变更与应用代码变更不同步发布;迁移须可回滚并测试 避免用业务代码模拟数据库本身可提供的约束 8. 并发与异步 std Mutex 不可重入:同线程重复 lock = 死锁或 panic 锁守卫(MutexGuard)跨 .await:阻塞 executor;current-thread runtime 下死锁;收窄临界区或按场景换 tokio::sync::Mutex 锁顺序成环 → 死锁;RwLock 写饥饿;poisoning 级联(lock().unwrap() 链式 panic:统一 poison 策略或评估 parking_lot) tokio::spawn 的 JoinHandle 被丢弃:任务 panic 无人观察、静默终止 → 用 JoinSet/TaskTracker + CancellationToken;服务须处理 SIGTERM 优雅停机 channel:receiver 提前 drop、send 失败处理、无界 channel 无背压 → 优先有界 取消安全:select! 分支半完成状态、timeout 包裹非取消安全操作(如 read_exact);自定义 async API 注明取消语义 block_on 嵌套、runtime 线程内阻塞等待;CPU 密集/阻塞 IO → spawn_blocking 后台任务:无限运行、缺超时、缺存活监控(心跳/看门狗) Arc 循环引用 → Weak;静态初始化优先 OnceLock/LazyLock(视 MSRV 淘汰 lazy_static/once_cell) 自定义同步原语 → loom 模型检查 确保并发优化不破坏数据一致性;优先消息传递与不可变共享 9. API 与错误处理 错误体系:库用 thiserror 保持错误类型明确,应用层用 anyhow,边界不混用 From 实现、source 链保留根因;稳定机器可读错误码 HTTP 状态码映射;错误响应分级:客户端收安全文案,内部详情只进日志 panic 兜底转换为稳定外部错误(500),而非断连 参数验证、超时、重试(指数退避 + 抖动,防惊群)、限流、幂等键 #[must_use] 于返回 Result 的 API SemVer:cargo semver-checks;#[non_exhaustive]、sealed trait、pub use 再导出的影响;serde 序列化格式版本兼容 10. 可观测性与运维 tracing:级别合理、关键路径 #[instrument]、字段结构化、请求 ID 跨层传播 敏感字段脱敏;高频路径日志采样/降级 panic hook 落日志;错误可被监控系统捕获(未处理任务错误、后台任务失败) 非阻塞 writer(tracing_appender);metrics(counter/histogram)覆盖核心失败路径 日志格式与 subscriber 配置统一 11. 配置、环境与构建 配置硬编码、开发/测试/生产隔离;环境变量缺失显式报错(禁静默默认值) 敏感配置不入源码/版本控制(.env 入 .gitignore) cfg!(debug_assertions) 不得作为安全逻辑开关 release profile 决策:overflow-checks 取舍、panic 设置对回滚/catch_unwind 的影响、strip/debug 符号用于线上排障 CI feature 矩阵(cargo hack --each-feature 或 --feature-powerset 子集)+ --all-features 验证 MSRV 验证(cargo hack check --rust-version 或版本矩阵);--locked 构建 12. 依赖与第三方库 漏洞与许可:cargo audit / cargo deny 重复依赖版本(cargo tree -d);workspace 用 [workspace.dependencies] 统一 无用依赖(cargo machete)删除;依赖与 MSRV 兼容 升级策略:patch 可自动、minor 需过全量测试、major 仅出方案不自动执行 优先使用已有依赖与标准库,不为简单功能引入大型依赖 13. 测试与验证 盘点现有测试:#[cfg(test)] 单元、tests/ 集成、文档测试、快照 每个修复的 Bug 必须附带回归测试(自动修改的准入条件);优先把 panic 路径改为返回 Result,#[should_panic] 仅作补充 补齐:边界条件、错误路径、安全逻辑、unsafe 定向测试 按需引入:proptest(属性测试)、insta(快照,变更必须人工 review 后接受,禁止盲目 accept)、cargo-fuzz(解析器)、loom(同步原语)、criterion(基准)、cargo llvm-cov(覆盖率参考) 每次修改后:cargo fmt --all -- --check、cargo clippy --all-targets --all-features -- -D warnings、cargo test --all-features 不得修改断言、删除测试、掩盖真实问题以让测试通过 14. 兼容性 edition 与 MSRV(rust-version 字段、CI 矩阵);edition 升级注意 2024 变化(unsafe 属性语法、static mut 引用报错、unsafe_op_in_unsafe_fn 默认警告) 公共 API SemVer:pub 可见性变更、trait 签名修改;用 cargo semver-checks / cargo public-api 对比 API 面 serde 格式、feature 增删的兼容性影响;MSRV 提升对库属破坏性变更 Breaking Change 必须明确说明影响范围 15. 架构与长期维护 workspace 划分与 crate 边界(禁止循环依赖、模块层级纠缠) 核心 crate 职责是否过重、技术债务 pub 接口最小化;公共 API 文档完备(missing_docs) unsafe 隔离在专用模块并有不变量注释 + #![forbid(unsafe_code)] 固化无 unsafe 的 crate 宏的可维护性与滥用;避免过度设计(多余 trait 抽象、为模式而模式) 优先简单、稳定、易维护的方案 16. FFI 与嵌入式专项(条件启用:项目存在时才审查) extern "C" 边界 panic 必须 catch_unwind 拦截并转错误码——panic 逃逸将 abort 进程 CString 所有权与生命周期、内部 NUL、null 结尾契约 边界类型 #[repr(C)] 布局;指针所有权契约(谁分配谁释放、分配器匹配);#[no_mangle](2024 需 unsafe(no_mangle)) #[repr(packed)] 字段引用 UB 嵌入式:no_std、panic=abort 下的错误汇报、无分配路径(try_reserve)、临界区内禁止阻塞 第三部分:自动修改规程 风险分级与处置矩阵 等级 典型改动 处置方式 L0 fmt、死 import、明确死代码、移除失效 #[allow] 直接改 + cargo check L1 内部实现修复,有测试覆盖、行为可证不变 直接改 + 定向测试 + clippy + test L2 错误处理语义、锁类型更换、查询优化 影响分析 → 说明风险 → 优先兼容方案 → 全量测试 + 基准 L3 公共 API、serde 格式、unsafe 修复、事务语义 只出方案与风险说明,标记待确认(除非明确授权执行) L4 Breaking change、数据迁移、依赖 major 升级 不执行,仅报告与迁移建议 红线(违反任意一条即视为本次任务失败) 不得用 unwrap()/expect() 让编译通过 不得用 .clone() 无脑消除借用冲突(优先重构借用关系) 不得用 #[allow(...)] 压制警告来“清零”告警 不得引入 unsafe 绕过借用检查或所有权限制 不得通过关闭/绕过安全机制(auth、TLS 校验、边界检查)解决安全问题 不得在坏基线(编译失败/测试红)上做功能性修改 不得将机械改动与语义改动混在同一批次/提交 不得修改测试断言、删除测试、盲目接受快照以“通过验证” 不得在无回归测试覆盖时改动公共 API 行为或序列化格式 不得顺手升级依赖 major 版本 不得凭“编译通过”判定行为未变(编译 ≠ 语义等价) 任何无法确认的问题必须标记**“待确认”**,禁止猜测性破坏修改 修改必须可回滚(独立提交或原始代码快照) 验证矩阵(改动类型 → 最低门禁) 改动类型 必须验证 纯格式/命名/死代码 fmt + check 内部重构(声称行为不变) clippy + 全量 test + doctest 错误处理 错误路径定向测试 + clippy 并发/锁 全量 test +(如适用)loom/压力说明 unsafe miri + 定向测试 + SAFETY 注释完备性 性能 criterion 前后对比(无基准则降级为“标记待确认”) 公共 API / serde semver-checks + 序列化快照测试 + 兼容性说明 数据库/迁移 迁移前向/回滚演练 + SQLX_OFFLINE 编译 依赖 audit/deny + 全量 test 停止条件 单批次验证连续失败 2 次 → 回滚该批次,标记待确认 必需验证工具不可用且改动影响运行时行为 → 停止自动修改,转纯报告 触及 L3/L4 且未获明确授权 → 停止执行,交付方案 Diff 自审清单(终审前逐项过) 是否存在计划表之外的改动(scope creep)? 注释/文档是否与代码同步? 测试是否同步补充? 是否引入新 panic 路径、新分配热点、新 unsafe? 序列化输出、HTTP 响应、日志格式是否有意外变化? feature 组合与 MSRV 是否仍满足? 第四部分:产出物模板 计划表 优先级 位置 问题(含证据) 类别 风险等级 影响范围 修改方案 验证方式 决策 状态 P0 file.rs:123 unsafe 块无 SAFETY 注释且越界论证缺失 unsafe 高 解析入口 收敛边界+补注释+测试 miri + test 直接修 待处理 P1 mod.rs:45 ... Bug/性能 中 ... ... test + bench 待确认 待处理 待确认清单 编号 问题 无法确认的原因 建议调查路径 T-01 ... ... ... 终审报告 发现的问题(总数 + 分级统计) 已修改的问题(每项附:改了什么、为什么安全、验证证据) 未修改的问题及原因(风险/工具缺失/语义不明) unsafe 审计结果(逐块四分类结论) 性能优化结果(附基准数据,或说明无基准依据未执行) 安全检查结果 测试/构建/clippy 结果(基线 vs 终态:警告数、测试数、通过率) 仍然存在的风险 后续建议(按优先级排序) 回滚指引(批次/提交与改动的对应关系)
  • Edge MCP Agent 2

    IE地球
    1
    1 帖子
    122 浏览
    四折光曲
    https://github.com/Raven777777/EMA2 EMA2 — Edge MCP Agent 2 (Rust) 通过「Edge 扩展 + 单进程 Rust 中继」让 AI 助手直接控制你的真实 Edge 浏览器: 读取任意网页、操作标签页、点击元素、执行 JS,并带真实登录态。 AI 客户端 ──MCP over HTTP──> ema2.exe (单进程) ──WebSocket──> Edge 扩展 ──> 真实浏览器 (opencode / Claude ...) http://127.0.0.1:8765/mcp ws://127.0.0.1:8765/ 特性 单进程、单 exe(约 1.5 MB):Rust 实现,一个常驻进程同时承担 MCP 服务与浏览器桥接 MCP over HTTP:标准 Streamable HTTP + legacy SSE 双传输,opencode type: remote 直连 控制真实浏览器:真实指纹、真实登录态,无头检测失效,不依赖 CDP 调试端口 18 个工具:读页面 / 读标签页 / 列标签页 / 新建关闭 / 导航 / 点击 / 执行 JS,以及等待、截图、表单和页面交互工具 MV3 保活:定时 ping,防止 Edge 扩展 service worker 闲置回收断连 安全:只绑定 127.0.0.1 目录结构 EMA2/ ├── bin/ema2.exe # release 构建的单 exe(直接分发) ├── rust/ # Rust 源码(cargo 工程) │ └── src/ │ ├── main.rs # 子命令:run / status │ ├── config.rs # 端口/保活(env 覆盖) │ ├── http.rs # axum:/mcp + /sse + /messages + /status + WS │ ├── mcp.rs # MCP 协议处理 │ ├── relay.rs # 扩展 WS 连接 + 保活 │ ├── state.rs # 共享状态(扩展连接/待响应映射) │ └── tools.rs # 18 个工具定义 ├── extension/ # Edge 浏览器扩展 (MV3) ├── scripts/ │ ├── setup.cmd # cargo build --release → bin/ │ ├── start-bridge.cmd # 启动常驻中继(隐藏后台) │ └── stop-bridge.cmd # 停止中继 ├── examples/ │ ├── opencode.json.example # opencode remote MCP 配置 ├── docs/ARCHITECTURE.md ├── README.md └── LICENSE 快速开始 前置要求 Microsoft Edge(新版) Rust 工具链(仅构建和测试需要;运行只需 bin/ema2.exe) 1. 启动中继 scripts\start-bridge.cmd # 或直接运行 bin\ema2.exe run 2. 加载扩展 Edge 打开 edge://extensions/ 打开右上角「开发人员模式」 「加载解压缩的扩展」→ 选择 extension/ 目录 确认扩展已启用:bin\ema2.exe status 显示 "extension_connected": true 3. 配置 AI 客户端 opencode(~/.config/opencode/opencode.json): { "mcp": { "edge-browser": { "type": "remote", "url": "http://127.0.0.1:8765/mcp", "enabled": true } } } Claude Desktop(%APPDATA%\Claude\claude_desktop_config.json): { "mcpServers": { "edge-browser": { "url": "http://127.0.0.1:8765/mcp" } } } 然后重启 AI 客户端。 工具列表 工具 说明 edge_get_tabs 列出所有标签页(id/title/url/active) edge_get_active_tab 当前标签页信息 edge_read_active_tab 提取当前标签页纯文本 edge_read_tab 按 tabId 提取指定标签页纯文本 edge_execute_js 在当前标签页执行任意 JS(chrome.debugger) edge_click_element 按 CSS 选择器点击元素 edge_new_tab / edge_close_tab 新建 / 关闭标签页 edge_navigate 当前标签页跳转 edge_wait_for 等文本出现/消失或固定时长(默认超时 30s) edge_take_screenshot 截图(保存 PNG 到输出目录,返回文件路径) edge_console_messages 读取页面 console 日志 edge_network_requests 列出页面发起的网络请求(performance entries) edge_type 向选择器元素输入文本(触发 input/change) edge_press_key 在当前聚焦元素按键(Enter/Escape 等) edge_fill_form 批量填充表单字段 edge_hover 悬停到指定元素 edge_scroll 页面滚动(默认一个视口高度) 配置(环境变量) 变量 默认 说明 EDGE_MCP_PORT 8765 监听端口 EDGE_MCP_KEEPALIVE_MS 10000 MV3 保活 ping 间隔 EDGE_MCP_TOKEN 无 启用后 MCP HTTP 需 Authorization: Bearer <token>;扩展 WS 地址需追加 ?token=<token> EDGE_MCP_OUTPUT_DIR ./output 截图输出目录 命令行 bin\ema2.exe run --port 8765 # 启动常驻中继 bin\ema2.exe status # 健康检查(含扩展连接状态) HTTP MCP 调用示例 不依赖任何 SDK,任何语言用 HTTP POST 即可调用(这也是 opencode remote 接入的方式): # 1. 握手 curl -X POST -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' \ http://127.0.0.1:8765/mcp # 2. 工具列表 curl -X POST -H "Content-Type: application/json" -H "Mcp-Session-Id: <session-id-from-step-1>" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \ http://127.0.0.1:8765/mcp # 3. 调用工具(打开新标签页 / 读取标签页文本) curl -X POST -H "Content-Type: application/json" -H "Mcp-Session-Id: <session-id-from-step-1>" \ -d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"edge_new_tab","arguments":{"url":"https://www.bing.com"}}}' \ http://127.0.0.1:8765/mcp Node.js 示例(读取网页正文): // sessionId is the Mcp-Session-Id response header from initialize. const res = await fetch('http://127.0.0.1:8765/mcp', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Mcp-Session-Id': sessionId }, body: JSON.stringify({ jsonrpc: '2.0', id: 1, method: 'tools/call', params: { name: 'edge_read_active_tab', arguments: {} } }), }); const j = await res.json(); console.log(j.result.content[0].text); 构建 scripts\setup.cmd # 或 cd rust && cargo build --release,产物复制到 bin/ 验证 Rust 服务和扩展脚本: cd rust cargo test cargo build --release cd .. node --check extension\background.js cargo test 当前用于验证项目可编译和测试入口;浏览器工具需要加载 Edge 扩展后才能进行端到端调用。 天气查询脚本 scripts/weather.js 通过 EMA2 MCP 控制真实 Edge,在 Google 查询天气并读取结果,不直接调用天气 API。需要先启动中继并确保扩展已连接: node scripts/weather.js "Tokyo" node scripts/weather.js "New York" node scripts/weather.js "Shanghai" --json 作为模块复用: const { queryWeather } = require('./scripts/weather.js'); const weather = await queryWeather('Tokyo'); 可通过 EMA2_MCP_URL 和 EDGE_MCP_TOKEN 覆盖 MCP 地址和鉴权;浏览器控制请求超时为 30 秒。 常见问题 扩展报 ERR_CONNECTION_REFUSED 中继没在运行。先 scripts\start-bridge.cmd,扩展会自动重连(每 3s)。 edge_execute_js 报错 该工具走 chrome.debugger,attach 时 Edge 会短暂显示"正在调试"提示;不能在内置页面(edge:// 等)执行。若行为异常,到 edge://extensions/ 刷新扩展。 想换端口 环境变量 EDGE_MCP_PORT,或 ema2.exe run --port <n>;扩展侧通过 chrome.storage.local 设置 wsUrl 同步修改。 重启电脑后中继没了 scripts\start-bridge.cmd 是手动常驻;如需开机自启,加入「启动」文件夹或任务计划。 安全提示 中继只绑定 127.0.0.1,不要对外网暴露 扩展含 debugger + <all_urls> 权限,等价于完全控制浏览器,仅用于可信的本机环境 用真实登录态做高频自动化时,遵守目标网站服务条款,账号风控依旧有效 MIT
  • Nginx Zstd 自动安装脚本

    IE地球
    1
    1 帖子
    236 浏览
    四折光曲
    [color=#FF4D4D]环境:Debian 13 Nginx1.31.1[/color] nano auto_zstd_nginx.sh #!/usr/bin/env bash # ============================================================================== # 脚本名称: auto_zstd_nginx.sh # 适用系统: Debian 12/13 / Ubuntu # 功能描述: 具备智能缓存检测的全功能 Nginx Zstd 动态模块编译与全自动更新脚本 # ============================================================================== set -e # 遇到致命错误立即停止执行 # 颜色输出定义 GREEN='\033[0;32m' RED='\033[0;31m' YELLOW='\033[1;33m' NC='\033[0m' log_info() { echo -e "${GREEN}[INFO] $1${NC}"; } log_warn() { echo -e "${YELLOW}[WARN] $1${NC}"; } log_err() { echo -e "${RED}[ERROR] $1${NC}"; exit 1; } SRC_DIR="/usr/src" CACHE_META="${SRC_DIR}/.nginx_zstd_cache.meta" MODULES_INSTALL_DIR="/usr/lib/nginx/modules" # 1. 权限检查 if [ "$EUID" -ne 0 ]; then log_err "请使用 root 用户或通过 sudo 运行此脚本!" fi # 2. 检测当前运行的 Nginx 状态 if ! command -v nginx &> /dev/null; then log_err "未检测到系统安装了 Nginx,请先安装 Nginx 主程序!" fi # 动态提取当前 Nginx 版本号 (例如: 1.31.0) NGINX_VER=$(nginx -v 2>&1 | awk -F/ '{print $2}' | cut -d' ' -f1) NGINX_ARGS=$(nginx -V 2>&1 | grep "configure arguments:" | sed 's/configure arguments://') log_info "当前系统运行的 Nginx 版本: ${NGINX_VER}" # 自动修正模块安装路径 if [ ! -d "$MODULES_INSTALL_DIR" ]; then MODULES_INSTALL_DIR="/etc/nginx/modules" fi # 3. 智能检测远端 Zstd 库的最新版本(无需提前克隆) log_info "正在检测 Facebook Zstd 官方仓库最新动态..." if ! command -v git &> /dev/null; then # 如果没有 git,临时安装以便检测 apt-get update -y || true apt-get install -y git wget awk fi # 获取远程最新 Commit ID REMOTE_ZSTD_COMMIT=$(git ls-remote https://github.com/facebook/zstd.git HEAD | awk '{print $1}') if [ -z "$REMOTE_ZSTD_COMMIT" ]; then log_err "无法连接到 GitHub 获取 Zstd 版本,请检查网络连接。" fi # 4. 缓存验证:比对版本与文件完整性 NEED_BUILD_ZSTD=true NEED_BUILD_MODULE=true if [ -f "$CACHE_META" ]; then # 读取缓存的元数据 # shellcheck disable=SC1090 source "$CACHE_META" # 检查本地动态库文件是否存在 if [ -f "/usr/local/lib/libzstd.so" ] && [ "$LAST_ZSTD_COMMIT" == "$REMOTE_ZSTD_COMMIT" ]; then NEED_BUILD_ZSTD=false log_info "✨ 检测到本地 Zstd 核心库已是最新版本 (${REMOTE_ZSTD_COMMIT:0:7}),跳过拉取与编译。" fi # 检查 Nginx 动态模块文件是否存在并比对版本 if [ -f "${MODULES_INSTALL_DIR}/ngx_http_zstd_filter_module.so" ] && \ [ -f "${MODULES_INSTALL_DIR}/ngx_http_zstd_static_module.so" ] && \ [ "$LAST_NGINX_VER" == "$NGINX_VER" ] && \ [ "$NEED_BUILD_ZSTD" == "false" ]; then NEED_BUILD_MODULE=false fi fi # 如果一切都未改变,直接退出 if [ "$NEED_BUILD_ZSTD" == "false" ] && [ "$NEED_BUILD_MODULE" == "false" ]; then log_info "🚀 [完美缓存] 当前 Nginx 编译环境与 Zstd 模块均无任何更新,无需重复编译!" exit 0 fi # 5. 解决 APT 签名错误并安装依赖 log_info "正在准备同步系统依赖包..." # 核心容错:使用 || true 允许非关键性源(如 MySQL 签名过期)报错,不中断脚本 apt-get update -y || log_warn "部分第三方软件源同步失败(例如系统的 MySQL 密钥未找到),脚本将忽略并尝试继续..." log_info "正在安装与更新必要的编译工具链..." apt-get install -y build-essential git libpcre3-dev zlib1g-dev libssl-dev debhelper wget # 如果系统残留了旧的发行版自带库,予以清除以防冲突 if dpkg -l | grep -q libzstd-dev; then log_warn "清理系统自带的旧版 libzstd-dev 以防链路冲突..." apt-get remove -y libzstd-dev libzstd1 || true fi # 6. 【按需编译】最新的 Zstd 核心库 cd ${SRC_DIR} if [ "$NEED_BUILD_ZSTD" == "true" ]; then log_info "正在下载/更新 Zstd 官方源码并进行编译..." if [ ! -d "zstd" ]; then git clone --depth 1 https://github.com/facebook/zstd.git fi cd zstd git fetch --depth 1 origin git reset --hard origin/dev || git reset --hard origin/master # 适配官方默认主分支 log_info "开始编译 Zstd 核心库..." make -j$(nproc) make install ldconfig log_info "Zstd 核心库编译并安装成功。" fi # 7. 【按需编译】Nginx Zstd 动态模块 cd ${SRC_DIR} if [ "$NEED_BUILD_MODULE" == "true" ]; then log_info "正在同步 Nginx 源码与动态模块源码..." # 清理旧的 Nginx 源码目录确保干净编译 rm -rf "nginx-${NGINX_VER}" "nginx-${NGINX_VER}.tar.gz" wget -c "http://nginx.org/download/nginx-${NGINX_VER}.tar.gz" tar -zxf "nginx-${NGINX_VER}.tar.gz" if [ ! -d "zstd-nginx-module" ]; then git clone https://github.com/tokers/zstd-nginx-module.git fi cd zstd-nginx-module && git pull && cd .. log_info "配置 Nginx 模块环境,无缝继承原生 Nginx 编译参数..." cd "nginx-${NGINX_VER}" # 注入原生参数与定制的 Zstd include 路径 eval "./configure ${NGINX_ARGS} --add-dynamic-module=${SRC_DIR}/zstd-nginx-module --with-cc-opt='-I/usr/local/include' --with-ld-opt='-L/usr/local/lib -Wl,-rpath,/usr/local/lib'" log_info "并行编译 Nginx Zstd 动态模块..." make modules log_info "将编译产物自动替换至 Nginx 目录..." mkdir -p ${MODULES_INSTALL_DIR} cp objs/ngx_http_zstd_filter_module.so ${MODULES_INSTALL_DIR}/ cp objs/ngx_http_zstd_static_module.so ${MODULES_INSTALL_DIR}/ chmod 644 ${MODULES_INSTALL_DIR}/ngx_http_zstd_*.so # 检查模块语法 if nginx -t &>/dev/null; then log_info "Nginx 配置文件语法检查通过,正在平滑重启服务..." systemctl reload nginx || log_warn "Nginx 重载失败,请手动检查系统服务状态。" else log_warn "检测到 Nginx 配置当前存在异常,未自动重载,请执行 'nginx -t' 排查。" fi fi # 8. 写入/更新本地编译缓存元数据 cat > "$CACHE_META" <<EOF LAST_NGINX_VER="${NGINX_VER}" LAST_ZSTD_COMMIT="${REMOTE_ZSTD_COMMIT}" EOF log_info "==================================================" log_info "🎉 全功能自动 Nginx Zstd 模块部署/更新任务成功完成!" log_info "当前缓存状态:Nginx [${NGINX_VER}] | Zstd [${REMOTE_ZSTD_COMMIT:0:7}]" log_info "==================================================" chmod +x auto_zstd_nginx.sh # 执行两次测试版本缓存 sudo ./auto_zstd_nginx.sh
  • MosDNS本地服务器安装

    软件教程
    1
    1 帖子
    199 浏览
    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 轻松实现。
  • Win11安装Debian12.14软路由

    软件教程
    1
    1 帖子
    215 浏览
    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服务端
  • Why the harmonic series diverges

    八字
    4
    4 帖子
    564 浏览
    AestusyA
    $$\sum_{n=1}^{\infty}\frac{1}{n^2}=\frac{\pi^2}{6}$$
  • 作为生活本身的哲学基础的操练

    哲学基础
    21
    21 帖子
    2k 浏览
    四折光曲
    三三水这样问我,我认真的思考了一下:你觉得我们应该相信第一印象不 额我就拿我个人为例吧(?) 我是一个不看第一印象的人,我的习惯就是不带评价的去观察人(至少是与我不相干不会实际上冒犯到我的人) 即使我看到一个人,比如你XXXXXX,我也不会下意识的去给人贴标签 我承认人的多样和复杂这样的客观事实,我承认这些经历会导致一些可能的坏事或者好事 但是额由于我接触到的可以说是纯坏或者不可理喻而且将这种不可理喻(以一种令我不愉快的方式)施加到我身上的人几乎为零 大家对我都挺好的,所有我其实潜意识里认为世界上是好人多的(经历导致) 冒犯到我的人额那就另说了,我对此和希特勒持相同态度() 我觉得这个是否应该相信第一印象,是一个复杂的命题 像我的生活环境,是不怎么需要去判断一个人的好坏的,我接触的人也很少,所以我可以不去看第一印象 但是如果生活动荡,实际上的生活环境接触到的对自己不利的人的可能大的话,应该使用第一印象去进行一些排除 但是我觉得这个根本的命题可能是: 我们该如何避开那些潜在的人际威胁(?) 我们该如何在社交中选择潜在的“好人”(?) 但是这其实很难,正如我所说,人是很复杂的,就像你,无论你是怎么看待自己的,或者你是如何对待别人,你在对待我(某些特定的人的时候)又是不一样的,是好的 所以我的结论是,额 如果自己是一个会被别人以第一印象来评判的人,也就是额第一印象差的人,应该用第一印象去评价别人,因为会造成这样第一印象的环境本身就是不安定的,这时候使用第一印象评价法是可以有效的避开那些风险和威胁的 如果自己是一个不会被人以第一印象评判的人,那也不用去用第一印象去评价别人,因为你的生活环境既然塑造了这样的你,你接触那些风险和威胁的可能本来就是极小的 但是说到底,如果一个人带着敌意,隐藏,不可见人的目的与你接触,该被拐去棉被还是得被拐去棉被,和你是否使用第一印象去规避风险没多大关系我感觉 当然我的社交范围很小啊,这个是前提,如果大家可以在面对冒犯直白的坦言,互相沟通,无法沟通和互相理解就各自保持距离,真心换真心才是最优解吧()保持自我的独立性,不被他人左右(谈何容易()
  • nginx zstd压缩

    软件教程
    1
    1 帖子
    152 浏览
    四折光曲
    Zstd(Zstandard), Facebook(Meta)开发的开源无损数据压缩算法,2016 年发布, “高性能+高压缩比”的平衡——既比传统压缩算法(如 Gzip、Deflate)压缩更快、压缩率更高,也比同级别高压缩比算法(如 LZMA)速度更快,同时支持可配置的压缩级别(1-22,级别越高压缩率越高但速度越慢),还提供“快速模式”(级别 -1 到 -13)满足低延迟场景。 测试环境:Debain 13 Nginx1.31.0 I 编译最新的Zstd库 # 安装编译工具 sudo apt install build-essential git libpcre3-dev zlib1g-dev libssl-dev debhelper sudo apt remove libzstd-dev libzstd1 # 1. 进入源码存放目录 cd /usr/src # 2. 克隆 Facebook Zstd 官方主分支源码 sudo git clone --depth 1 https://github.com/facebook/zstd.git cd zstd # 3. 编译并安装(核心库编译非常快) sudo make -j$(nproc) sudo make install # 4. 刷新系统的动态链接库缓存,让系统认出刚刚安装的最新 libzstd.so sudo ldconfig II 编译zstd-nginx模块 # 1. 下载并解压 Nginx 1.31.0 官方源码 sudo wget http://nginx.org/download/nginx-1.31.0.tar.gz sudo tar -zxf nginx-1.31.0.tar.gz # 2. 克隆 zstd-nginx-module 源码 sudo git clone https://github.com/tokers/zstd-nginx-module.git # 3. 进入 Nginx 源码目录 cd nginx-1.31.0 # 4. 配置编译参数:通过包含路径,强行让它关联到我们刚才安装在 /usr/local/include 的最新 Zstd 头文件 sudo ./configure --with-compat \ --add-dynamic-module=/usr/src/zstd-nginx-module \ --with-cc-opt="-I/usr/local/include" \ --with-ld-opt="-L/usr/local/lib -Wl,-rpath,/usr/local/lib" # 5. 仅编译模块 sudo make modules III 载入zstd模块 # 1. 覆盖复制到 Nginx 模块目录 sudo cp objs/ngx_http_zstd_filter_module.so /usr/lib/nginx/modules/ sudo cp objs/ngx_http_zstd_static_module.so /usr/lib/nginx/modules/ 2. 赋予标准权限 sudo chmod 644 /usr/lib/nginx/modules/ngx_http_zstd_*.so 打开 /etc/nginx/nginx.conf,在最顶部添加加载指令: # 引入 Zstd 动态过滤和静态加载模块 load_module modules/ngx_http_zstd_filter_module.so; load_module modules/ngx_http_zstd_static_module.so; user www-data; worker_processes auto; IV 修改网页配置 以Flarum 为例 zstd on; zstd_comp_level 3; # 动态压缩推荐级别 3(1-5 之间性能与压缩率平衡最佳,最大为 22) zstd_min_length 256; # 小于 256 字节的文件不压缩 zstd_buffers 16 8k; # 允许 Nginx 直接读取预先压缩好的 .zst 静态文件(如果存在) zstd_static on; # 精准针对 Flarum 的 API、JS 和各种文本格式进行 Zstd 压缩 zstd_types text/plain text/css text/javascript application/javascript application/json application/xml application/rss+xml application/atom+xml image/svg+xml image/x-icon; #检查配置文件,重启Nginx nginx -t systemctl reload nginx 在线检测:https://zstd.wcode.net 按下 F12 打开开发者工具,前往 Network(网络) 面板。 Content-Encoding: zstd Vary: Accept-Encoding 表明 Nginx 1.31.0 已经成功部署了目前业界公认在动态生成场景下处理效率极高、对 CPU 压迫极小的 Zstd 压缩引擎!
  • Debian 13 自动更新脚本

    IE地球
    1
    1 帖子
    279 浏览
    四折光曲
    每次都手动打好麻烦 创建脚本 #!/bin/bash # 定义颜色 GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # 无颜色 echo -e "${YELLOW}>>> 正在同步软件包索引...${NC}" sudo apt update echo -e "\n${GREEN}>>> 开始执行系统升级 (Full Upgrade)...${NC}" # 移除 -y 参数,这样在升级前会停下来让你确认 [Y/n] # 如果你想完全自动但看过程,可以保留 -y sudo apt full-upgrade echo -e "\n${YELLOW}>>> 正在清理过期的缓存和无用依赖...${NC}" sudo apt autoremove -y sudo apt autoclean echo -e "\n${GREEN}>>> 更新任务已完成!${NC}" 赋予权限 sudo chmod +x /usr/local/bin/auto_update.sh 执行 auto_update.sh
  • MariaDB 安装

    软件教程
    3
    3 帖子
    268 浏览
    四折光曲
    轻量化配置 针对 50MB 极小 内存目标 sudo nano /etc/mysql/mariadb.conf.d/99-lightweight.cnf [mysqld] # 核心:关闭性能监控,立省约 40MB+ performance_schema = OFF # 存储引擎:将缓冲池压到最低 (适用于轻量 PHP 项目) innodb_buffer_pool_size = 16M innodb_log_buffer_size = 2M innodb_flush_log_at_trx_commit = 2 innodb_stats_on_metadata = OFF # 连接与线程:降低堆栈消耗 max_connections = 15 thread_stack = 192K thread_cache_size = 0 # 临时表与缓存:防止内存突发占用 tmp_table_size = 2M max_heap_table_size = 2M table_open_cache = 400 table_definition_cache = 400 # 日志:禁用不必要的日志 skip-log-bin sudo systemctl restart mariadb 查看内存情况 ps aux | grep mariadbd | grep -v grep | awk '{print $6/1024 " MB"}' !作为个人博客使用及时不配置其内存占用也较低,实际上配置了之后内存占用并没有降低多少,全站负载500MB!<
  • Postfix 发信配置

    软件教程
    3
    3 帖子
    222 浏览
    四折光曲
    SSL 加密 基础 TLS 设置 sudo nano /etc/postfix/main.cf # 可以使用网站域名证书 smtpd_tls_cert_file = /your.pem smtpd_tls_key_file = /your.key smtpd_use_tls = yes # encrypt 强制启用 smtpd_tls_security_level = may smtpd_tls_auth_only = yes smtpd_tls_loglevel = 1 smtp_tls_CAfile = /your.crt smtp_tls_security_level = may smtp_tls_loglevel = 1 开启 465 和 587 端口 sudo nano /etc/postfix/master.cf submission inet n - y - - smtpd -o syslog_name=postfix/submission -o smtpd_tls_security_level=encrypt -o smtpd_sasl_auth_enable=yes smtps inet n - y - - smtpd -o syslog_name=postfix/smtps -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
  • openppp2简易使用教程

    软件教程 openppp2
    2
    2 帖子
    354 浏览
    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]
  • Docker mongodb备份还原数据库

    软件教程
    1
    1 帖子
    164 浏览
    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
  • OPENPPP2 配置示例 与分流

    软件教程
    3
    3 帖子
    204 浏览
    四折光曲
    [image: 1778464489356-qq20260511-095410.webp]
  • 吉吉 网站推荐

    软件教程
    2
    2 帖子
    145 浏览
    四折光曲
    https://www.softwareok.com/ 神秘的小软件 https://www.softwareok.com/?seite=microsoft/autohidedesktopicons
  • 神秘 软件推荐

    软件教程
    3
    3 帖子
    193 浏览
    四折光曲
    https://www.cgsecurity.org/wiki/TestDisk_Download 免费开源的数据恢复软件
  • 四折の股票之路.WEBP

    讨论
    2
    2 帖子
    429 浏览
    clouldonC
    貌似长线收益多一些,每日的波动,上下上下,不也是归零了嘛