首页
/ sing-box TUN 模式配置优化指南

sing-box TUN 模式配置优化指南

2025-05-09 18:31:50作者:魏献源Searcher

问题背景

在使用 sing-box 的 TUN 模式时,用户遇到了一个常见但令人困惑的问题:当开启 TUN 模式后,命令行工具(如 curl)可以正常访问各类网站,但浏览器却无法访问国内网站(如 baidu.com)。这种现象表明 TUN 模式的流量分流配置存在问题。

原因分析

经过对配置文件的深入分析,发现问题主要出在以下几个方面:

  1. DNS 解析不完整:原始配置中缺少对私有 IP 地址的处理规则,导致部分流量被错误路由。

  2. 路由规则不完善:没有明确指定私有 IP 地址(如局域网地址)应该直接连接,导致这些流量可能被错误地发送到代理。

  3. DNS 解析策略:原始配置中 DNS 解析策略不够完善,可能导致某些情况下的解析失败。

解决方案

以下是经过优化的配置文件,解决了上述问题:

{
    "log": {
        "level": "error",
        "timestamp": true
    },
    "dns": {
        "servers": [
            {
                "tag": "dns_proxy",
                "address": "https://1.1.1.1/dns-query",
                "address_resolver": "dns_resolver",
                "strategy": "ipv4_only",
                "detour": "proxy"
            },
            {
                "tag": "dns_direct",
                "address": "https://dns.alidns.com/dns-query",
                "address_resolver": "dns_resolver",
                "strategy": "ipv4_only",
                "detour": "direct"
            },
            {
                "tag": "dns_resolver",
                "address": "223.5.5.5",
                "detour": "direct"
            }
        ],
        "rules": [
            {
                "outbound": "any",
                "server": "dns_resolver"
            },
            {
                "rule_set": "proxy_domains",
                "server": "dns_proxy"
            }
        ],
        "final": "dns_direct"
    },
    "route": {
        "rule_set": [
            {
                "tag": "proxy_domains",
                "type": "inline",
                "rules": [
                    {
                        "domain_suffix": [
                            "example.com",
                            "gitlab.com",
                            "gitlabusercontent.com"
                        ]
                    },
                    {
                        "process_name": [
                            "VideoApp"
                        ]
                    }
                ]
            }
        ],
        "rules": [
            {
                "protocol": "dns",
                "outbound": "dns-out"
            },
            {
                "ip_is_private": true,
                "outbound": "direct"
            },
            {
                "rule_set": "proxy_domains",
                "outbound": "proxy"
            }
        ],
        "final": "direct",
        "auto_detect_interface": true
    },
    "inbounds": [
        {
            "type": "tun",
            "tag": "tun-in",
            "inet4_address": "172.16.0.1/30",
            "inet6_address": "fd00::1/126",
            "mtu": 1492,
            "auto_route": true,
            "strict_route": true,
            "stack": "system",
            "sniff": true,
            "sniff_override_destination": false
        }
    ],
    "outbounds": [
        {
            "tag": "proxy",
            "type": "socks",
            "server": "127.0.0.1",
            "server_port": 1095
        },
        {
            "type": "direct",
            "tag": "direct"
        },
        {
            "type": "block",
            "tag": "block"
        },
        {
            "type": "dns",
            "tag": "dns-out"
        }
    ],
    "experimental": {
        "cache_file": {
            "enabled": true,
            "path": "cache.db"
        }
    }
}

关键改进点

  1. DNS 配置优化

    • 增加了 dns_resolver 作为基础 DNS 解析器
    • 为代理和直连 DNS 都配置了 address_resolver
    • 使用阿里 DNS 的 DoH 服务作为直连 DNS
  2. 路由规则完善

    • 添加了 ip_is_private: true 规则,确保私有 IP 地址直接连接
    • 优化了 DNS 解析规则,确保基础解析使用 dns_resolver
  3. 新增功能

    • 添加了 block 出站选项
    • 启用了实验性的缓存文件功能

技术原理

TUN 模式的工作原理是将所有网络流量通过虚拟网卡重定向到 sing-box 处理。这种模式下,DNS 解析和路由规则的配置尤为重要:

  1. DNS 处理:浏览器通常会使用系统 DNS 设置,而命令行工具可能使用不同的解析方式。优化后的配置确保所有 DNS 查询都经过统一处理。

  2. 私有 IP 处理:局域网地址和私有 IP 地址应该直接连接,否则会导致内部网络访问问题。ip_is_private: true 规则确保了这一点。

  3. DNS 缓存:启用 DNS 缓存可以减少重复查询,提高响应速度。

最佳实践建议

  1. 对于国内用户,建议使用可靠的国内 DNS 服务(如阿里 DNS)作为直连 DNS。

  2. 定期更新规则集,确保需要代理的域名列表是最新的。

  3. 监控日志中的错误信息,及时调整配置。

  4. 对于高级用户,可以考虑添加更多的路由规则,如基于地理位置或 IP 段的规则。

通过以上优化,sing-box 的 TUN 模式可以更可靠地工作,既能确保需要代理的流量正确路由,又能保证国内流量的正常访问。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
178
262
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
868
514
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
130
183
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
272
311
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
373
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
note-gennote-gen
一款跨平台的 Markdown AI 笔记软件,致力于使用 AI 建立记录和写作的桥梁。
TSX
83
4
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
599
58
GitNextGitNext
基于可以运行在OpenHarmony的git,提供git客户端操作能力
ArkTS
10
3