mihomo vs sing-box
DNS与TUN模块
深度解析
深入探讨两大主流代理客户端的核心架构与工作机制,聚焦DNS分流、抗污染机制与TUN透明代理的实现原理与最佳实践。
mihomo v1.19.12
传统Clash风格的DNS配置
sing-box v1.12.2
模块化结构设计
核心对比要点
- • 传统Clash配置风格,学习曲线平缓
- • fallback机制对抗DNS污染效果显著
- • 成熟的社区支持与文档资源
- • 模块化配置结构清晰
- • detour功能提供灵活的代理路径控制
- • sniff功能增强流量识别能力
mihomo DNS模块深度解析
mihomo的DNS模块通过精细的配置选项和智能的解析策略,实现了高效、安全的域名解析服务
核心配置项详解
基础功能配置
enable
DNS模块总开关,启用内置DNS服务器
listen
指定DNS服务器监听地址和端口
ipv6
控制是否解析IPv6地址(AAAA记录)
增强模式与Fake-IP
enhanced-mode
核心特性:fake-ip或redir-host模式
fake-ip-range
定义用于分配假IP的地址池
fake-ip-filter
精细控制fake-ip模式的行为
DNS服务器与策略
nameserver
默认DNS服务器列表,支持多种协议
fallback
后备DNS服务器列表,用于污染防护
nameserver-policy
基于域名的DNS服务器选择策略
缓存与性能
cache-algorithm
DNS缓存算法:lru或arc
prefer-h3
优先使用HTTP/3协议进行DoH通信
DNS解析流程与策略
解析流程三阶段
规则匹配与初步决策
根据路由规则匹配域名,决定直连或代理策略
DNS解析策略选择
检查nameserver-policy,使用默认或后备DNS
IP获取与最终决策
获取IP地址,再次匹配规则,执行直连或代理
Fake-IP模式优势
在Fake-IP模式下,mihomo不会立即进行真实的DNS解析,而是分配一个"假"IP地址。 当客户端使用这个假IP发起连接时,mihomo会根据内部映射表还原为原始域名, 再根据路由规则决定直连或代理。这种方式彻底避免了DNS污染。 [54]
内部运行时序图与配置关联
Fake-IP模式下DNS查询与连接流程 [113]
流程与配置关联
- • 缓存检查:使用
cache-algorithm配置的算法 - • 策略路由:基于
nameserver-policy配置 - • 并发查询:
nameserver和fallback组合 - • 污染检测:
fallback-filter进行IP验证
关键配置项影响
- • enhanced-mode:决定是否使用Fake-IP机制
- • fake-ip-range:定义假IP地址池范围
- • direct-nameserver:直连时的DNS解析服务器
- • rules:决定最终连接策略的路由规则
mihomo TUN模块深度解析
TUN模块通过创建虚拟网络接口,实现对系统流量的透明代理和智能路由
核心配置项详解
典型TUN配置示例
tun:
enable: true
stack: mixed
dns-hijack:
- 8.8.8.8:53
- 114.114.114.114:53
auto-route: true
auto-detect-interface: true
基础设置
路由配置
auto-route
自动配置路由规则
auto-detect-interface
自动检测网络接口
strict-route
启用严格路由模式
高级功能
mtu
设置TUN接口MTU值
inet4_address
IPv4地址分配
inet6_address
IPv6地址分配
TUN模式下的流量处理
流量处理流程
流量捕获
通过修改系统路由表,将所有出站流量重定向到TUN虚拟接口
流量分析与路由
根据预设规则(rules)匹配和分类流量,决定直连或代理策略
流量转发
根据路由决策,将流量发送到代理服务器或直接连接目标
返回流量处理
接收响应数据并通过TUN接口返回给原始应用程序
DNS劫持机制
通过配置
dns-hijack,mihomo可以截获应用程序发出的DNS查询请求,
并将其交由自己的DNS模块处理。这使得mihomo能够根据域名的不同,
智能地选择使用直连DNS服务器还是代理DNS服务器进行解析,
从而实现基于域名的精细化分流。
内部运行时序图与配置关联
TUN模式下网络请求处理流程
配置与流程对应关系
auto-route
步骤2:自动配置路由表
stack
步骤3:选择网络协议栈
rules
步骤4:路由规则匹配
dns-hijack
DNS请求劫持处理
关键配置影响
结合system和gvisor协议栈优势,TCP用system,UDP用gvisor
自动配置路由,无需手动设置系统代理
防止DNS泄露,增强安全性
sing-box DNS模块深度解析
sing-box采用模块化结构设计,通过servers、rules和final等字段实现灵活的DNS配置
核心配置项详解
典型DNS配置结构
{
"dns": {
"servers": [
{
"tag": "google",
"address": "https://8.8.8.8/dns-query",
"detour": "proxy"
},
{
"tag": "local",
"address": "223.5.5.5",
"detour": "direct"
}
],
"rules": [
{
"geosite": "cn",
"server": "local"
}
],
"final": "google",
"strategy": "prefer_ipv4"
}
}
服务器配置 (servers)
tag
服务器唯一标识符
address
DNS服务器地址,支持多种协议
detour
访问该DNS服务器的出站标签 (sing-box特色)
规则配置 (rules)
geosite
根据域名集合匹配
server
指定使用的DNS服务器标签
logical
支持and/or逻辑组合规则
全局配置
final
默认DNS服务器标签
strategy
解析策略:prefer_ipv4/ipv6_only等
disable_cache
禁用DNS缓存
FakeIP配置
fakeip
FakeIP功能启用
independent_cache
独立缓存配置
client_subnet
支持ECS扩展
DNS解析流程与策略
基于规则的解析流程
接收查询
应用程序发起DNS解析请求
缓存检查
查询本地DNS缓存
规则匹配
按顺序匹配rules规则
查询执行
使用指定或默认服务器
detour功能优势
sing-box的
detour功能是其一大特色,通过为每个DNS服务器指定出站代理,
用户可以精确控制访问每个DNS服务器的流量路径。例如,让查询Google DNS的流量走代理,
而查询阿里DNS的流量直连。这种设计提供了比mihomo更细粒度的控制能力。
内部运行时序图与配置关联
DNS解析流程时序图
配置与流程对应关系
- • servers:定义可用的DNS服务器列表
- • rules:基于规则的DNS服务器选择
- • final:默认DNS服务器标签
- • detour:指定DNS查询的代理路径
sing-box特有功能
- • 独立缓存:为每个DNS服务器维护独立缓存
- • ECS支持:通过client_subnet支持EDNS
- • 逻辑规则:支持and/or组合规则
- • 协议优化:原生支持HTTP/3等新协议
sing-box TUN模块深度解析
sing-box的TUN模块通过丰富的配置选项和高级功能,实现全局透明代理与智能流量控制
核心配置项详解
典型TUN配置示例
{
"inbounds": [
{
"type": "tun",
"tag": "tun-in",
"interface_name": "tun0",
"address": [
"172.18.0.1/30",
"fdfe:dcba:9876::1/126"
],
"mtu": 9000,
"auto_route": true,
"strict_route": true,
"endpoint_independent_nat": false,
"stack": "mixed"
}
]
}
TUN模式下的流量处理
流量处理流程
流量捕获
通过
auto_route配置自动设置路由规则,将系统流量导向TUN接口
流量分析与路由
启用
sniff功能时,深度分析数据包识别应用层协议,根据route规则进行路由决策
流量转发
根据路由决策,通过相应的出站连接(直连或代理)发送流量
返回流量处理
接收响应数据并通过TUN接口返回给原始应用程序
sniff功能优势
sing-box的
sniff功能可以识别流量的应用层协议(如TLS的SNI字段),
使得基于域名的路由规则(geosite)在没有DNS劫持或FakeIP的情况下也能生效。
这在某些连接卡顿情况下特别有用,为流量分流提供了另一种强大的手段。
[168]
内部运行时序图与配置关联
TUN模式下网络请求处理流程
配置与流程对应关系
auto_route
步骤2:自动路由配置
sniff
步骤4:流量嗅探分析
strict_route
DNS流量强制处理
stack
协议栈选择影响性能
sing-box特色功能
改善P2P应用兼容性
支持基于协议识别的路由
防止DNS泄露,增强安全性
平衡性能与兼容性
mihomo vs sing-box 对比分析
深入比较两大代理客户端在DNS和TUN模块的设计理念、功能特性及适用场景
DNS模块对比分析
| 特性 | mihomo v1.19.12 | sing-box v1.12.2 |
|---|---|---|
| 配置风格 | 扁平化YAML,继承Clash传统 | 结构化JSON,模块化设计 |
| 核心分流机制 |
nameserver-policy (键值对)
|
rules (数组,匹配server标签)
|
| 抗污染机制 |
fallback +
fallback-filter
|
通过
rules和
detour实现
|
| DNS查询代理 | 通过
respect-rules间接实现
|
detour字段直接支持
|
| 缓存算法 |
lru,
arc
|
独立缓存
(independent_cache)
|
| ECS支持 | 不支持 |
client_subnet支持
|
| 逻辑规则 | 不支持 | 支持
and/
or
|
mihomo DNS优势
- • 传统Clash风格:学习曲线平缓,配置直观
- • fallback机制:成熟的DNS污染防护方案
- • 社区支持:丰富的文档资源和社区经验
- • 兼容性:与现有Clash配置高度兼容
sing-box DNS优势
- • 模块化设计:配置结构清晰,易于管理
- • detour功能:灵活的DNS查询代理控制
- • 高级特性:支持ECS、逻辑规则等
- • 性能优化:原生支持HTTP/3等新协议
TUN模块对比分析
| 特性 | mihomo v1.19.12 | sing-box v1.12.2 |
|---|---|---|
| 配置位置 |
tun字段
|
inbounds (type: "tun")
|
| 自动路由 |
auto-route
|
auto_route
|
| 严格路由 |
strict-route
|
strict_route
|
| 协议栈 |
system,
gvisor,
mixed
|
system,
gvisor,
mixed
|
| DNS劫持 |
dns-hijack
|
通过
route.rules实现
|
| 流量嗅探 | 不支持 |
sniff支持
|
| 端点无关NAT | 不支持 |
endpoint_independent_nat支持
|
mihomo TUN优势
- • 成熟稳定:经过长期实践验证的TUN实现
- • 配置简单:dns-hijack列表形式简单直观
- • 自动优化:auto-detect-interface简化配置
- • 兼容性好:在各类设备上表现稳定
sing-box TUN优势
- • sniff功能:基于协议识别的智能路由
- • 灵活配置:通过route.rules实现复杂劫持逻辑
- • P2P优化:endpoint_independent_nat支持
- • 统一架构:与sing-box其他模块深度集成
DNS与TUN模块协同工作机制
mihomo协同机制
DNS劫持
通过dns-hijack拦截DNS请求
Fake-IP模式
DNS返回假IP,TUN还原域名
直连重解析
使用direct-nameserver获取真实IP
sing-box协同机制
DNS劫持
通过route.rules实现灵活劫持
FakeIP模式
标准DNS返回假IP,TUN处理流程
sniff功能
无需DNS劫持也能识别域名
协同机制对比总结
| 协同功能 | mihomo v1.19.12 | sing-box v1.12.2 |
|---|---|---|
| DNS劫持 |
dns-hijack列表,配置简单
|
route.rules劫持,更灵活
|
| FakeIP协同 | 标准流程:DNS返回假IP → TUN拦截 → 路由决策 | 标准流程:DNS返回假IP → TUN拦截 → 路由决策 |
| 直连重解析 |
direct-nameserver
|
通过
route.rules和
outbounds实现
|
| 域名识别 | 依赖DNS劫持或FakeIP | 支持
sniff,无需DNS劫持或FakeIP
|