TaoLei2025/12/21开源项目
#NetOptim#IP优选#Hosts管理#Tauri#Rust#DNS优化

NetOptim:智能 IP 优选工具完全指南

在网络访问中,DNS 解析返回的 IP 地址往往不是最优的选择。由于 CDN 调度、网络拥塞等原因,同一个域名可能有多个可用 IP,而它们的访问速度可能相差甚远。NetOptim 正是为解决这一痛点而生的开源工具。

什么是 NetOptim?

NetOptim 是一款智能 IP 优选工具,通过多 DNS 服务器并行查询获取域名的所有可用 IP,然后进行延迟测试,自动选择最快的 IP 地址并写入系统 hosts 文件,从而优化网络访问速度。

项目名称 "NetOptim" 来源于 "Network Optimization"(网络优化)的缩写,简洁地表达了其核心功能——优化您的网络访问体验。

为什么需要 IP 优选?

在实际网络环境中,我们经常遇到以下问题:

  • GitHub 访问慢:DNS 返回的 IP 可能不是最优的
  • CDN 调度不准:地理位置判断错误导致访问远端节点
  • 网络波动:某些 IP 在特定时段延迟较高
  • DNS 污染:某些 DNS 服务器返回错误的 IP

NetOptim 通过以下方式解决这些问题:

  • 多源 DNS 查询:从多个 DNS 服务器获取所有可用 IP
  • 实时测速:对每个 IP 进行 ping 测试,选择延迟最低的
  • 一键写入:自动修改 hosts 文件,无需手动操作
  • 定期优化:支持定时任务,自动保持最优状态

v1.3.0 更新亮点

NetOptim v1.3.0 版本带来了重大的架构升级和性能优化:

  • 代码重构:前端核心代码完全重构,拆分为模块化组件,大幅提升稳定性和可维护性。
  • 性能飞跃:新增 DNS 解析缓存(TTL 5分钟)和 IP 位置缓存(TTL 1小时),查询速度显著提升。
  • 体验优化:修复了网络监控和规则更新的已知问题,并优化了 UI 交互细节。

核心特性详解

1. 智能 DNS 解析

NetOptim 采用多源并行 DNS 解析策略,确保获取到域名的所有可用 IP 地址。

支持的 DNS 服务器

类型服务器说明
系统 DNS本地配置使用系统默认 DNS
Google DNS8.8.8.8全球知名公共 DNS
Cloudflare DNS1.1.1.1注重隐私的快速 DNS
阿里 DNS223.5.5.5国内优质 DNS
腾讯 DNS119.29.29.29国内优质 DNS

DoH (DNS over HTTPS) 支持

除了传统 DNS 查询,NetOptim 还支持 DoH 协议:

  • Google DoH: https://dns.google/resolve
  • Cloudflare DoH: https://cloudflare-dns.com/dns-query
  • 阿里 DoH: https://dns.alidns.com/resolve

DoH 的优势在于:

  • 加密传输,防止 DNS 劫持
  • 绕过某些网络限制
  • 获取更准确的解析结果

并行查询机制

┌─────────────────────────────────────────────────────────────┐ │ DNS 解析流程 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 输入域名 ──┬──> 系统 DNS ────────┐ │ │ ├──> Google DNS ──────┤ │ │ ├──> Cloudflare DNS ──┼──> 合并去重 ──> IP 列表 │ │ ├──> 阿里 DNS ────────┤ │ │ ├──> 腾讯 DNS ────────┤ │ │ └──> DoH 服务器 ──────┘ │ │ │ └─────────────────────────────────────────────────────────────┘

所有 DNS 查询并行执行,结果自动去重合并,确保获取到最全面的 IP 列表。

2. IP 测速优选

获取到 IP 列表后,NetOptim 会对每个 IP 进行延迟测试。

并行 Ping 测试

  • 使用 ICMP 协议进行 ping 测试
  • 所有 IP 并行测试,提高效率
  • 超时时间可配置,默认 3 秒
  • 结果按延迟从低到高排序

测试结果展示

延迟范围颜色标识说明
< 100ms🟢 绿色优秀
100-300ms🟡 黄色一般
> 300ms🔴 红色较差
超时⚪ 灰色不可用

CDN 检测

NetOptim 能够识别常见的 CDN 服务商:

  • Cloudflare
  • Fastly
  • Akamai
  • AWS CloudFront
  • Google Cloud CDN
  • 阿里云 CDN
  • 腾讯云 CDN

CDN IP 会特别标注,帮助您了解 IP 的来源。

地理位置显示

通过 IP 地理位置 API,显示每个 IP 的大致位置,帮助您选择地理位置更近的节点。

3. Hosts 文件管理

NetOptim 提供完整的 hosts 文件管理功能。

可视化管理

  • 查看当前所有 hosts 条目
  • 一键删除指定条目
  • 支持导入导出配置

智能写入

  • 自动检测并更新已存在的域名条目
  • 保留原有注释和格式
  • 写入后自动刷新 DNS 缓存

权限处理

平台权限处理方式
macOS使用 osascript 请求管理员权限
Windows需要以管理员身份运行
Linux使用 pkexec 请求权限

4. 预设域名管理

内置常用域名预设功能,方便快速优化。

预设功能

  • 添加/删除常用域名
  • 点击预设快速查询
  • 支持导入导出预设列表
  • 预设数据本地持久化存储

批量优化

一键优化所有预设域名:

  1. 依次解析每个预设域名
  2. 选择延迟最低的 IP
  3. 自动写入 hosts 文件
  4. 刷新 DNS 缓存

5. 历史记录与回滚

完整的操作历史记录,支持一键回滚。

记录内容

  • 操作时间
  • 域名
  • IP 地址
  • 延迟数据
  • 操作类型(写入/回滚)

回滚功能

如果新的 IP 效果不佳,可以一键回滚到之前的配置。

6. 定时任务

支持定时自动优化,保持最佳网络状态。

配置选项

  • 启用/禁用定时检测
  • 检测间隔:30/60/120/360 分钟
  • 自动更新 Hosts
  • 发现更优 IP 时通知

7. 网络监控 (v1.0.0 新增)

实时监控已优化域名的网络状态。

监控功能

  • 持续追踪已优化域名的延迟变化
  • 记录基准延迟和当前延迟对比
  • 支持自定义检测间隔
  • 网络质量下降时自动告警

自动重优选

当检测到网络质量下降时,可配置自动重新优选功能,确保始终使用最优 IP。

8. 网络诊断 (v1.0.0 新增)

集成多种网络诊断工具,帮助排查网络问题。

诊断工具

工具功能
Ping 测试测试目标主机连通性和延迟
DNS 查询查询域名的 DNS 记录
路由追踪Traceroute 分析网络路径
HTTP 诊断测试 HTTP/HTTPS 连接状态
完整诊断一键执行所有诊断

9. 规则管理 (v1.0.0 新增)

支持从第三方源导入 hosts 规则。

规则源订阅

  • 支持从 URL 导入第三方 hosts 规则
  • 定时自动更新规则源
  • 与优选结果智能合并
  • 启用/禁用单个规则源

10. 备份恢复 (v1.0.0 新增)

完整的 hosts 文件备份恢复功能。

备份功能

  • hosts 文件自动备份
  • 支持手动创建备份并添加描述
  • 查看备份内容
  • 一键恢复到之前的状态
  • 管理和删除历史备份

11. IP 黑名单 (v1.0.0 新增)

标记不可用的 IP 地址。

黑名单功能

  • 将不可用 IP 加入黑名单
  • 优选时自动排除黑名单 IP
  • 支持添加原因说明
  • 随时移出黑名单

12. 日志系统 (v1.0.0 新增)

详细的操作日志记录。

日志功能

  • 记录所有操作日志
  • 查看日志文件列表
  • 便于问题排查和追溯
  • 支持清空日志

13. 多语言与主题

语言支持

  • 简体中文
  • English

主题模式

  • 浅色主题
  • 深色主题
  • 跟随系统

主题色

支持 19 种主题色可选:

Blue、Indigo、Violet、Purple、Plum、Pink、Crimson、Red、Tomato、Orange、Amber、Yellow、Lime、Green、Grass、Teal、Cyan、Sky、Mint、Jade

技术架构

整体架构

NetOptim 采用 Tauri 2 框架,实现了前后端分离的桌面应用架构:

┌─────────────────────────────────────────────────────────────┐ │ NetOptim 架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 前端 (WebView) │ │ │ │ React 19 + TypeScript + Radix UI │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ │ │ Tauri IPC │ │ │ │ │ ┌─────────────────────────────────────────────────────┐ │ │ │ 后端 (Rust) │ │ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ │ │ DNS │ │ Ping │ │ Hosts │ │ History │ │ │ │ │ │ 解析模块 │ │ 测速模块 │ │ 管理模块 │ │ 记录模块 │ │ │ │ │ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │ │ │ └─────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────┘ │ ┌───────────────┼───────────────┐ │ │ │ ┌──────▼──────┐ ┌──────▼──────┐ ┌──────▼──────┐ │ DNS 服务器 │ │ IP 信息 API │ │ 系统 Hosts │ │ (多源并行) │ │ (地理位置) │ │ 文件 │ └─────────────┘ └─────────────┘ └─────────────┘

技术栈详解

前端技术

技术版本用途
React19UI 框架
TypeScript5.8类型安全
Radix UI3.2组件库
i18next25.7国际化
Vite7.0构建工具

后端技术

技术用途
Rust系统编程语言
Tauri 2桌面应用框架
Tokio异步运行时
surge-pingICMP Ping 库
reqwestHTTP 客户端

核心依赖

[dependencies]
tauri = { version = "2", features = ["tray-icon"] }
tokio = { version = "1", features = ["full"] }
surge-ping = "0.8"
reqwest = { version = "0.12", features = ["json"] }
futures = "0.3"
chrono = { version = "0.4", features = ["serde"] }
serde = { version = "1", features = ["derive"] }

模块设计

DNS 模块 (dns.rs)

负责多源 DNS 解析:

// 并行执行所有 DNS 查询
pub async fn resolve_domain(domain: &str) -> Result<Vec<IpAddr>, AppError> {
    let mut tasks = Vec::new();

    // 系统 DNS
    tasks.push(resolve_with_system(domain));

    // 传统 DNS 服务器
    for dns_server in DNS_SERVERS {
        tasks.push(resolve_with_nslookup(domain, dns_server));
    }

    // DoH 服务器
    for doh_server in DOH_SERVERS {
        tasks.push(resolve_with_doh(domain, doh_server));
    }

    // 等待所有任务完成,合并去重
    let results = join_all(tasks).await;
    // ...
}

Ping 模块 (ping.rs)

负责 IP 延迟测试:

  • 使用 ICMP 协议
  • 并行测试所有 IP
  • 超时处理
  • 结果排序

Hosts 模块 (hosts.rs)

负责 hosts 文件操作:

  • 跨平台路径处理
  • 权限提升
  • 智能更新
  • DNS 缓存刷新

历史模块 (history.rs)

负责操作记录:

  • JSON 文件存储
  • 增删查改
  • 回滚支持

快速开始指南

安装方式

macOS

  1. 下载 .dmg 文件
  2. 打开 DMG,拖拽到 Applications 文件夹
  3. 首次运行时授予管理员权限

Windows

  1. 下载 .msi.exe 安装包
  2. 运行安装程序
  3. 以管理员身份运行应用

Linux

# Debian/Ubuntu
sudo dpkg -i netoptim_*.deb

# AppImage
chmod +x NetOptim_*.AppImage
./NetOptim_*.AppImage

从源码构建

环境要求

  • Node.js 18+
  • Rust 1.70+
  • Bun (推荐) 或 npm/yarn

构建步骤

# 克隆仓库
git clone https://github.com/yourusername/NetOptim.git
cd NetOptim

# 安装依赖
bun install

# 开发模式
bun run tauri:dev

# 构建发布版本
bun run tauri:build

使用指南

基本使用流程

步骤一:输入域名

在主界面输入要优化的域名,如 github.com,或从左侧预设列表中选择。

步骤二:查询解析

点击"查询"按钮,系统会:

  1. 从多个 DNS 服务器并行解析
  2. 对所有 IP 进行 ping 测试
  3. 按延迟排序显示结果

步骤三:选择最优 IP

查看结果列表,选择延迟最低的 IP(通常是第一个)。

步骤四:写入 Hosts

点击"写入 Hosts"按钮,系统会:

  1. 将选中的 IP 写入 hosts 文件
  2. 自动刷新 DNS 缓存
  3. 记录操作历史

批量优化

如果您有多个常用域名需要优化:

  1. 在预设列表中添加所有需要优化的域名
  2. 点击"一键优化"按钮
  3. 系统会自动处理所有域名并写入最优 IP

Hosts 管理

在"Hosts 管理"标签页:

  • 查看当前所有由 NetOptim 管理的 hosts 条目
  • 删除不需要的条目
  • 导出配置用于备份或迁移
  • 导入之前导出的配置

历史记录

在"历史记录"标签页:

  • 查看所有操作记录
  • 如果新 IP 效果不佳,可以回滚到之前的配置
  • 清空历史记录

设置选项

在"设置"标签页可以配置:

  • 界面语言
  • 主题模式和主题色
  • 关闭时最小化到托盘
  • 定时任务配置
  • 备份恢复管理
  • IP 黑名单管理
  • 日志查看

网络监控

在"网络监控"标签页:

  • 查看所有监控中的域名
  • 查看基准延迟和当前延迟对比
  • 手动检测单个域名或全部域名
  • 配置监控间隔和告警阈值
  • 启用自动重优选功能

网络诊断

在"网络诊断"标签页:

  • 选择诊断类型(Ping、DNS、Traceroute、HTTP、完整诊断)
  • 输入目标地址执行诊断
  • 查看详细的诊断结果

规则管理

在"规则管理"标签页:

  • 添加第三方 hosts 规则源
  • 启用/禁用规则源
  • 手动更新规则
  • 配置自动更新

应用场景

场景一:加速 GitHub 访问

GitHub 在国内访问经常不稳定,使用 NetOptim:

  1. 添加以下域名到预设:
  • github.com
  • raw.githubusercontent.com
  • github.githubassets.com
  1. 点击"一键优化"
  2. 享受更快的 GitHub 访问速度

场景二:优化 Google 服务

如果您需要访问 Google 服务:

  1. 添加相关域名到预设
  2. 定期运行优化
  3. 配置定时任务自动保持最优状态

场景三:CDN 节点优化

某些网站使用 CDN,但调度可能不准确:

  1. 输入目标域名
  2. 查看所有可用 IP 及其位置
  3. 选择地理位置最近、延迟最低的 IP

与其他工具对比

NetOptim vs 手动修改 Hosts

特性NetOptim手动修改
获取 IP自动多源查询需要手动查找
测速自动并行测试需要手动 ping
写入一键写入需要编辑文件
权限自动处理需要手动提权
历史自动记录
回滚一键回滚需要手动恢复

NetOptim vs SwitchHosts

特性NetOptimSwitchHosts
IP 优选✅ 自动测速选择❌ 无
DNS 解析✅ 多源并行❌ 无
技术栈Tauri 2 (轻量)Electron (较重)
安装包大小~10MB~100MB
内存占用较高

NetOptim vs 在线测速工具

特性NetOptim在线工具
本地测速✅ 真实延迟❌ 服务器延迟
自动写入❌ 需要手动
批量处理❌ 通常不支持
离线使用

常见问题 FAQ

基础问题

Q: NetOptim 是免费的吗?

A: 是的,NetOptim 是完全开源免费的,采用 MIT 协议。

Q: 支持哪些操作系统?

A: 支持 macOS、Windows 和 Linux。

Q: 为什么需要管理员权限?

A: 修改系统 hosts 文件需要管理员权限,这是操作系统的安全限制。

Q: 修改 hosts 文件安全吗?

A: 安全。NetOptim 只会添加或更新指定域名的条目,不会影响其他配置。

技术问题

Q: 为什么有些 IP ping 不通?

A: 可能的原因:

  • 该 IP 禁用了 ICMP 响应
  • 网络防火墙拦截
  • IP 已失效

Q: 为什么选择了最快的 IP 但访问还是慢?

A: ping 延迟只是一个参考指标,实际访问速度还受以下因素影响:

  • TCP 连接建立时间
  • TLS 握手时间
  • 服务器响应时间
  • 网络带宽

Q: DoH 查询失败怎么办?

A: DoH 查询失败不影响整体功能,系统会使用其他 DNS 服务器的结果。

使用问题

Q: 如何恢复原始 hosts 文件?

A: 两种方式:

  1. 在 Hosts 管理页面删除相关条目
  2. 在历史记录页面回滚到之前的状态

Q: 预设数据存储在哪里?

A: 存储在用户配置目录:

  • macOS: ~/Library/Application Support/netoptim/
  • Windows: %APPDATA%/netoptim/
  • Linux: ~/.config/netoptim/

Q: 如何迁移配置到新电脑?

A: 使用导出功能导出预设和 hosts 配置,在新电脑上导入即可。

开发指南

项目结构

NetOptim/ ├── src/ # 前端源码 │ ├── components/ # 页面组件 (v1.3.0 重构) │ │ ├── OptimizePage.tsx # IP 优选 │ │ ├── HostsPage.tsx # Hosts 管理 │ │ ├── MonitorPage.tsx # 网络监控 │ │ ├── DiagnosticPage.tsx # 网络诊断 │ │ ├── RulesPage.tsx # 规则管理 │ │ ├── HistoryPage.tsx # 历史记录 │ │ └── SettingsPage.tsx # 设置 │ ├── App.tsx # 主应用入口 │ ├── App.css # 样式文件 │ ├── types.ts # TypeScript 类型定义 │ ├── ThemeContext.tsx # 主题上下文 │ ├── ThemeWrapper.tsx # 主题包装器 │ ├── i18n/ # 国际化 │ │ └── index.ts # i18n 配置 │ ├── main.tsx # 入口文件 │ └── vite-env.d.ts # Vite 类型声明 ├── src-tauri/ # 后端 Rust 源码 │ ├── src/ │ │ ├── lib.rs # 主模块,Tauri 命令 │ │ ├── main.rs # 程序入口 │ │ ├── dns.rs # DNS 解析模块 │ │ ├── ping.rs # Ping 测速模块 │ │ ├── hosts.rs # Hosts 文件管理 │ │ ├── history.rs # 历史记录模块 │ │ ├── presets.rs # 预设管理模块 │ │ ├── scheduler.rs # 定时任务模块 │ │ ├── ipinfo.rs # IP 信息查询 │ │ ├── i18n.rs # 设置管理 │ │ ├── monitor.rs # 网络监控模块 (v1.0.0) │ │ ├── diagnostic.rs # 网络诊断模块 (v1.0.0) │ │ ├── blacklist.rs # IP 黑名单模块 (v1.0.0) │ │ ├── backup.rs # 备份恢复模块 (v1.0.0) │ │ ├── rules.rs # 规则管理模块 (v1.0.0) │ │ └── logger.rs # 日志系统模块 (v1.0.0) │ ├── icons/ # 应用图标 │ ├── capabilities/ # Tauri 权限配置 │ ├── Cargo.toml # Rust 依赖配置 │ └── tauri.conf.json # Tauri 配置 ├── public/ # 静态资源 ├── screenshots/ # 应用截图 ├── package.json # 前端依赖配置 ├── vite.config.ts # Vite 配置 ├── tsconfig.json # TypeScript 配置 └── README.md

添加新功能

1. 添加新的 Tauri 命令

// src-tauri/src/lib.rs

#[tauri::command]
async fn your_new_command(param: String) -> Result<YourResult, AppError> {
    // 实现逻辑
}

// 在 invoke_handler 中注册
.invoke_handler(tauri::generate_handler![
    // ... 其他命令
    your_new_command,
])

2. 前端调用

// src/App.tsx
import { invoke } from "@tauri-apps/api/core";

const result = await invoke<YourResult>("your_new_command", { param: "value" });

3. 添加国际化文本

// src/i18n/index.ts
const resources = {
  "zh-CN": {
    translation: {
      your_new_key: "中文文本",
    },
  },
  "en-US": {
    translation: {
      your_new_key: "English text",
    },
  },
};

调试技巧

前端调试

# 启动开发服务器
bun run dev

# 在另一个终端启动 Tauri
bun run tauri dev

开发模式下可以使用浏览器开发者工具进行调试。

后端调试

在 Rust 代码中使用 println!dbg! 宏输出调试信息,会显示在终端中。

未来路线图

近期计划

  • 更多 DNS 服务器:支持自定义 DNS 服务器
  • TCP 测速:除了 ICMP ping,增加 TCP 连接测试
  • 代理支持:支持通过代理进行测速

中期计划

  • 智能推荐:基于历史数据推荐最优 IP
  • CLI 版本:提供命令行版本

长期愿景

  • 移动端支持:iOS/Android 版本
  • 浏览器扩展:Chrome/Firefox 扩展
  • 云同步:跨设备同步配置
  • 社区分享:分享和获取优质 IP 配置

总结

NetOptim 是一款专注于网络优化的桌面工具,它通过智能的 DNS 解析和 IP 测速,帮助用户自动选择最优的网络路径。基于 Tauri 2 框架构建,它具有体积小、性能高、跨平台的特点。

核心优势回顾

  1. 智能优选:多源 DNS + 并行测速,自动选择最优 IP
  2. 简单易用:可视化界面,一键操作
  3. 轻量高效:Tauri 2 框架,安装包仅 ~10MB
  4. 跨平台:支持 macOS、Windows、Linux
  5. 开源免费:MIT 协议,可自由使用和修改

适用场景

适合的用户

  • 需要加速 GitHub 等网站访问
  • 对网络延迟敏感的用户
  • 需要管理多个域名 hosts 配置
  • 追求轻量级工具的用户

可能不适合的场景

  • 需要完整代理功能
  • 企业级网络管理需求

如果您正在寻找一个简单高效的网络优化工具,NetOptim 绝对值得一试。它的智能优选功能和简洁的界面设计,使其成为日常网络优化的理想选择。

相关资源


本文基于 NetOptim v1.1.0 撰写,技术细节可能随版本更新而变化,建议访问项目仓库获取最新文档。