标签 TUN模式 下的文章

大家好,最近在折腾虚拟网卡(TUN)模式下的分流逻辑,踩了一个非常经典的坑:网页浏览正常,但 Reeder 等原生 App 在开启 TUN 后死活无法同步。
结论先行:在 TUN + fake-ip 模式下,把业务域名加入 fake-ip-filter,可能会因为同步 Real DNS 失败,导致原生 App 在握手前直接断连。

折腾一圈后发现,这不仅是规则问题,更涉及底层 DNS 解析逻辑。分享出来供大家参考,也想请教下各位在大规模节点和自动化维护上有什么高招。

在我的案例中,App 同步失败的根源在于我把个人域名放进了 fake-ip-filter

过程:开启 TUN 模式后,由于域名在 Filter 列表中,Clash 会强制进行真实解析(Real IP)。
当时上游 DNS 刚好返回了 SERVFAIL,导致 Clash 拿不到目标 IP,连接在握手前就直接断开,报 dns resolve failed

解决办法:将域名移出 Filter,让 Clash 直接返回 Fake-IP 给 App,解析给 Clash 后台异步处理。

目前我搭建了一个简单的“三通道”入口,方便日常使用(配合 zeroomega 等工具):

  • 7897 (Mixed):通过订阅的规则表来分流。
  • 7898 (Direct):直连。
  • 7899 (Proxy):代理。

虽然目前的方案解决了“能用”的问题,但维护起来还是不够优雅,想请教下大家:

  • 是否有基于访问日志 / DNS 请求的自动化方案
  • 能否自动归纳并同步更新 Clash 的 rule-providers 或 fake-ip-filter
  • 在多节点、大规模配置下,有没有更优雅的维护思路

前言

很多拥有 Gemini Pro 资格的朋友,主要还是在官方网页端使用。但谷歌自家也推出了类似于 Cursor 这样的集成编辑器。
最大的痛点:目前该服务严格锁区,国内用户直接访问通常会看到账号不可用的提示。
本文目标:帮你在国内网络环境下流畅使用 Antigravity。

第一步:网络环境配置

  1. 开启 TUN 模式
    • 请务必在你的网络工具中开启 TUN 模式,确保所有流量都经过代理。
  2. 节点选择
  3. 重点来了!
    • 你的节点地区必须与你 Google 账号的归属地保持一致。

此时你大概率会成功。但是可能会遇到下一个问题。提示

第二步:解决 “Account Not Eligible”

这说明问题不在你的 IP,而在你的 Google 账号本身被标记为了非支持地区
这时候就得去官网申诉换地区了,大概等一两天就能换好:https://policies.google.com/country-association-form

具体的地区上面以及提过了,这里不在赘述。到这里基本上就成功了。

备用的方案

实际上,若上文方法还不行,可以借助 Github 上的一个开源项目: Antigravity-Manager
即使账号报了 not eligible,也可以用此程序强登,很好用。


📌 转载信息
转载时间:
2026/1/9 18:19:09

起初是不想用 TUN 模式的,怕代理了下载流量和游戏流量。
为了认证咕噜咕噜学生会员和反重力,就开始折腾一下(结果因为以前用 Adsense 加了国内地址导致学生会员没资格,然后反重力也改成周刷新额度了,555)
本脚本解决了以下问题:

  • 锁定谷歌的地区为新加坡(你也可以自己改地区,或者加规则实现其他网站固定地区)
  • 把到期时间、剩余流量等没意义的节点单独丢一个分组,不参与自动选择
  • TUN 模式下,非必要代理的流量尽可能走直连(测试了游戏没问题)
    • 原理是解析 IP 如果是国内就走直连,但是不知道如果分发 CND 是亚洲 IP 能不能命中该规则
    • 有没有佬帮测一下 steam 下载这类流量比较大且使用场景比较多的情况
  • TUN 模式下反重力正常工作


然后我想再问个问题:
开了 TUN 之后,有些支持配置代理的软件,还需要再选择系统代理吗,或者是直接不开代理也行?因为我看 TUN 模式需要关闭系统代理,然后软件不配置代理的话好像也能走代理


脚本:

// 自定义域名配置
const forceProxyDomains = [
    "DOMAIN-SUFFIX,linux.do,常规节点组",
    "DOMAIN-SUFFIX,genspark.ai,常规节点组"
]

// 自定义规则集配置
// 规则集仓库 https://github.com/blackmatrix7/ios_rule_script/blob/master/rule/Clash/README.md
const ruleConfig = [
    {
        name: "谷歌规则集",
        group: "地区节点组",
        url: "https://cdn.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/Google/Google.yaml"
    },
    {
        name: "油管规则集",
        group: "地区节点组",
        url: "https://cdn.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/YouTube/YouTube.yaml"
    }
]

function main(config) {
    const newConfig = JSON.parse(JSON.stringify(config));

    // 特殊节点组:无用的节点(官网地址、到期时间等)
    const premiumKeywords = /(免费|2026|官网|剩余|到期|Traffic)/i;
    let specialProxies = newConfig.proxies.filter(p => premiumKeywords.test(p.name));
    let normalProxies = newConfig.proxies.filter(p => !premiumKeywords.test(p.name));
    
    // 地区节点组:固定新加坡,没有则降级到常规节点组
    const areaKeywords = /(singapore|新加坡)/i;
    let areaProxies = newConfig.proxies.filter(p => areaKeywords.test(p.name));
    if(areaProxies.length <= 0) {
        areaProxies = normalProxies;
    }

   // 构建代理组
    const proxyGroups = [
        {
            "name": "代理分流组",
            "type": "select",
            "proxies": specialProxies.length > 0 ? ["常规节点组", "特殊节点组", "DIRECT"] : ["常规节点组", "DIRECT"]
        },
        {
            "name": "常规节点组",
            "type": "url-test",
            "url": "http://www.google.com/generate_204",
            "interval": 1800,
            "tolerance": 30,
            "proxies": normalProxies.map(p => p.name)
        },
        ...(specialProxies.length > 0 ? [
            {
                "name": "特殊节点组",
                "type": "select",
                "proxies": specialProxies.map(p => p.name)
            }] : []
        ),
        {
                "name": "地区节点组",
                "type": "select",
                "proxies": areaProxies.map(p => p.name)
        },
        {
            "name": "国内直连组",
            "type": "select",
            "proxies": ["DIRECT"]
        }
    ];

    // 规则配置
    const rules = [];

    // 添加自定义域名
    forceProxyDomains.forEach(domain => {
        rules.push(domain);
    });

    // 添加自定义规则集
    const ruleProviders = {};
    ruleConfig.forEach(({ name, url, group }) => {
        const providerKey = `${name.toLowerCase()}_rules`;
        ruleProviders[providerKey] = {
            "type": "http",
            "behavior": "classical",
            "url": url,
            "interval": 86400,
            "path": `./rule-providers/${providerKey}.yaml`
        };
        rules.push(`RULE-SET,${providerKey},${group}`);
    });

    // 全局配置
    const globalConfig = {
        "global-client-fingerprint": "chrome",
        "tcp-concurrent": true,
        "geox-url": {
            "geoip": "https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.dat",
            "geosite": "https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat",
            "mmdb": "https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country-lite.mmdb"
        }
    };

    // GEO规则
    rules.push(
        // 确定被墙 → 代理
        "GEOSITE,gfw,代理分流组",
        // 中国相关 → 直连
        "GEOSITE,cn,国内直连组",
        "GEOSITE,private,国内直连组",
        "GEOIP,private,国内直连组,no-resolve",
        "GEOIP,cn,国内直连组",
        // 兜底 → 代理
        "MATCH,代理分流组"
    );


    return {
        ...newConfig,
        ...globalConfig,
        "proxy-groups": proxyGroups,
        "rules": rules,
        "rule-providers": ruleProviders
    };
}

没写 DNS 的规则,有需要可以参考之前的帖子傻瓜式 clash verge 全局脚本,实现 DNS 国内外分流,粘贴即用


📌 转载信息
原作者:
mos6
转载时间:
2025/12/28 19:50:40

起初是不想用 TUN 模式的,怕代理了下载流量和游戏流量。
为了认证咕噜咕噜学生会员和反重力,就开始折腾一下(结果因为以前用 Adsense 加了国内地址导致学生会员没资格,然后反重力也改成周刷新额度了,555)
本脚本解决了以下问题:

  • 锁定谷歌的地区为新加坡(你也可以自己改地区,或者加规则实现其他网站固定地区)
  • 把到期时间、剩余流量等没意义的节点单独丢一个分组,不参与自动选择
  • TUN 模式下,非必要代理的流量尽可能走直连(测试了游戏没问题)
    • 原理是解析 IP 如果是国内就走直连,但是不知道如果分发 CND 是亚洲 IP 能不能命中该规则
    • 有没有佬帮测一下 steam 下载这类流量比较大且使用场景比较多的情况
  • TUN 模式下反重力正常工作


然后我想再问个问题:
开了 TUN 之后,有些支持配置代理的软件,还需要再选择系统代理吗,或者是直接不开代理也行?因为我看 TUN 模式需要关闭系统代理,然后软件不配置代理的话好像也能走代理


脚本:

// 自定义域名配置
const forceProxyDomains = [
    "DOMAIN-SUFFIX,linux.do,常规节点组",
    "DOMAIN-SUFFIX,genspark.ai,常规节点组"
]

// 自定义规则集配置
// 规则集仓库 https://github.com/blackmatrix7/ios_rule_script/blob/master/rule/Clash/README.md
const ruleConfig = [
    {
        name: "谷歌规则集",
        group: "地区节点组",
        url: "https://cdn.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/Google/Google.yaml"
    },
    {
        name: "油管规则集",
        group: "地区节点组",
        url: "https://cdn.jsdelivr.net/gh/blackmatrix7/ios_rule_script@master/rule/Clash/YouTube/YouTube.yaml"
    }
]

function main(config) {
    const newConfig = JSON.parse(JSON.stringify(config));

    // 特殊节点组:无用的节点(官网地址、到期时间等)
    const premiumKeywords = /(免费|2026|官网|剩余|到期|Traffic)/i;
    let specialProxies = newConfig.proxies.filter(p => premiumKeywords.test(p.name));
    let normalProxies = newConfig.proxies.filter(p => !premiumKeywords.test(p.name));
    
    // 地区节点组:固定新加坡,没有则降级到常规节点组
    const areaKeywords = /(singapore|新加坡)/i;
    let areaProxies = newConfig.proxies.filter(p => areaKeywords.test(p.name));
    if(areaProxies.length <= 0) {
        areaProxies = normalProxies;
    }

   // 构建代理组
    const proxyGroups = [
        {
            "name": "代理分流组",
            "type": "select",
            "proxies": specialProxies.length > 0 ? ["常规节点组", "特殊节点组", "DIRECT"] : ["常规节点组", "DIRECT"]
        },
        {
            "name": "常规节点组",
            "type": "url-test",
            "url": "http://www.google.com/generate_204",
            "interval": 1800,
            "tolerance": 30,
            "proxies": normalProxies.map(p => p.name)
        },
        ...(specialProxies.length > 0 ? [
            {
                "name": "特殊节点组",
                "type": "select",
                "proxies": specialProxies.map(p => p.name)
            }] : []
        ),
        {
                "name": "地区节点组",
                "type": "select",
                "proxies": areaProxies.map(p => p.name)
        },
        {
            "name": "国内直连组",
            "type": "select",
            "proxies": ["DIRECT"]
        }
    ];

    // 规则配置
    const rules = [];

    // 添加自定义域名
    forceProxyDomains.forEach(domain => {
        rules.push(domain);
    });

    // 添加自定义规则集
    const ruleProviders = {};
    ruleConfig.forEach(({ name, url, group }) => {
        const providerKey = `${name.toLowerCase()}_rules`;
        ruleProviders[providerKey] = {
            "type": "http",
            "behavior": "classical",
            "url": url,
            "interval": 86400,
            "path": `./rule-providers/${providerKey}.yaml`
        };
        rules.push(`RULE-SET,${providerKey},${group}`);
    });

    // 全局配置
    const globalConfig = {
        "global-client-fingerprint": "chrome",
        "tcp-concurrent": true,
        "geox-url": {
            "geoip": "https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geoip-lite.dat",
            "geosite": "https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat",
            "mmdb": "https://ghfast.top/https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/country-lite.mmdb"
        }
    };

    // GEO规则
    rules.push(
        // 确定被墙 → 代理
        "GEOSITE,gfw,代理分流组",
        // 中国相关 → 直连
        "GEOSITE,cn,国内直连组",
        "GEOSITE,private,国内直连组",
        "GEOIP,private,国内直连组,no-resolve",
        "GEOIP,cn,国内直连组",
        // 兜底 → 代理
        "MATCH,代理分流组"
    );


    return {
        ...newConfig,
        ...globalConfig,
        "proxy-groups": proxyGroups,
        "rules": rules,
        "rule-providers": ruleProviders
    };
}

没写 DNS 的规则,有需要可以参考之前的帖子傻瓜式 clash verge 全局脚本,实现 DNS 国内外分流,粘贴即用


📌 转载信息
原作者:
mos6
转载时间:
2025/12/28 18:29:55

Prizrak-Box 是一个跨平台的轻量桌面客户端(Pandora-Box 的分支项目),适配 Mihomo 内核,支持多种代理协议、规则自动分组与 TUN 模式。

Prizrak-Box 在原 Pandora-Box 的基础上做了以下扩展:

1、改进了订阅页面的流量使用和订阅信息显示方式。原版是显示在顶部,只能显示当前使用订阅的信息。俄版将信息显示在每个卡片上,更直观和整体掌握订阅的流量使用情况。

流量使用和订阅信息显示方式

2、在设置页面添加了自定义控制面板。

自定义控制面板

3、软件背景可以自定义上传设置
自定义背景设置

4、针对macOS系统的软件安装包添加了签名,防止在软件安装时系统提示“软件已损坏”

5、软件详细使用如下,需要自行网页翻译
使用介绍

题外话:
这两个软件的作者有意思,软件名字起的都这么诡异。

“Pandora-Box”,是一个来自希腊神话的文化隐喻,意指一个看似无害但一旦开启就会释放出灾难和混乱的事物。

而 “Prizrak”(Призрак) 在俄语中通常翻译为“幽灵”、“鬼魂”或“幻影”。

他们似乎在说:富强需谨慎,自由非无界,探索亦有度