Files
op-packages/isp-split/files/etc/isp-split.conf
T

253 lines
12 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# /etc/isp-split.conf
# openwrt-isp-split 配置文件
# ---------------------------------------------------------------- 多线路 DNS
#
# 为什么需要:只做"按目标 IP 纠线路"治标不治本。如果 DNS 查询本身走的是
# 另一条线,CDN 会返回那条线的节点,你拿着电信节点走联通线,速度差 100 倍。
# 让"从哪条线出去,就用哪条线的 DNS",CDN 才会主动把本运营商节点给你。
# 这是商业方案(如爱快)分流效果更好的关键,原理见 docs/DESIGN.md 的
# 「与商业方案(iKuai)的对比」一节。
#
# 每条线路对应的 DNS:<mwan3策略>:<DNS服务器>
DNS_TABLE="
wan_only:223.5.5.5
wanb_only:119.29.29.29
"
# 多线路 DNS 的「出线方式」
# bind = server=/域名/IP@接口,用 dnsmasq 的 SO_BINDTODEVICE 绑定出接口
# mark = server=/域名/IP + nft 给发往该 DNS 的 53 端口打上对应策略的标
#
# 怎么选:
# · 纯 dnsmasq 环境、没装 OpenClash → bind(更直接)
# · OpenClash 接管了 DNS,或解析器不是 dnsmasq → mark
# (mark 只看目标 IP,不关心是谁发的查询,抗干扰;也不依赖 @接口特性)
DNS_MODE="bind"
# 统计未命中任何运营商集合的兜底流量(status 里显示"兜底"行)
# 规则插在本工具规则块之后,命中集合的流量不会经过它
# 口径:ct state new —— 只计每条连接的**首包**。不加这一条时,若某个流
# 最终没拿到 conntrack 标记(例如 mwan3 的 default_rule_v4 被 enabled=0
# 关闭),同一连接的每个包都会重复计数,数字会按包放大。
COUNT_FALLBACK="1"
# 兜底计数是否排除 DNS(udp/tcp 任一侧端口 53)
# 1 = 排除(默认;出向查询 dport=53 与入向响应 sport=53 都不计)
# 0 = 不排除,保持旧行为
#
# 为什么默认排除:DNS 查询/响应本身不是业务流量——到网关(如 192.168.10.1:53)
# 的查询在本地就被应答,到运营商 DNS 的也只是解析开销。它们占兜底包数
# 比例很高,计进去只会稀释"未命中运营商集合的真实业务流量"这个口径。
# 排除按 UDP/TCP 源或目的端口 53 判断,不写死网关地址,所以无论查的是
# 本地网关还是运营商 DNS,查询和响应都不会被当成业务流量。
COUNT_FALLBACK_SKIP_DNS="1"
# 域名分流:<域名后缀>:<策略>
# 这些域名的解析会被强制从对应线路发出。
# 例如 B 站:联通自有 CDN(cn-*-cu-*)需要联通 DNS 才会解析出来。
DOMAIN_SPLIT="
bilivideo.com:wanb_only
bilibili.com:wanb_only
"
# 可选:外部域名清单目录,$DOMAINDIR/<策略>.txt,每行一个域名。
# 也兼容 felixonmars/dnsmasq-china-list 的 server=/domain/1.2.3.4 格式。
DOMAIN_LIST_DIR=""
# 运营商 IP 段数据源(单源兼容模式;ISP_SOURCES 为空时才用它)
#
# 这里保留 clang 的基址和 <源名>.txt 命名,是为了让 0.1.x 老配置在
# ISP_SOURCES 留空时逐字节保持原行为。默认多源配置见下面的 ISP_SOURCES。
ISP_MIRROR="https://ispip.clang.cn"
# ---------------------------------------------------------------- 多数据源(0.2.1 默认双源)
#
# 格式:每行一条 <名字>:<角色>:<镜像基址>
# 角色 primary 出数据(必须且只能有一个)
# verify 只用来跑日 diff,不参与合成
# audit 低频审计源(同样只跑 diff)
#
# 0.2.1 默认:"主源 + 校验源"(方案 c)
# · 主源换成 gaoyifan/china-operator-ip(MIT,BGP/AS_PATH 口径)
# · clang 只做运行时校验源:默认每天下载、跑 Jaccard diff,不参与合成
# · 校验源连续失败 1-2 天只降级;达到 ISP_SOURCE_MAX_FAIL_DAYS 天则拒绝更新
# · 主源失败立即冻结(保留旧数据),绝不自动换源——换源=换口径
#
# 留空 = 单源兼容模式:仍按上面的 ISP_MIRROR/<源名>.txt 拉取,
# 行为与 0.1.x 完全一致。老配置不需要改任何东西。
#
# 注意:升级时 opkg/apk 会保留用户已有的 /etc/isp-split.conf。这里改的只是
# 新安装的默认模板;已有配置里显式声明的 ISP_SOURCES 不会被覆盖。
ISP_SOURCES="
yfgao:primary:https://china-operator-ip.yfgao.com
clang:verify:https://ispip.clang.cn
"
# 每个源的"文件名映射":<源名>:<ISP_TABLE 里的源名>=<该源上的文件名>,...
#
# 必须显式声明:clang 的文件名是 chinatelecom.txt,yfgao 的同一个运营
# 商叫 chinanet.txt。按名字猜一定会错,所以这里只认声明。
#
# 规则:某个源只要声明了任意一条映射,映射里没列出的运营商默认不下载;
# 若该运营商已启用,主源会按历史命名 <源名>.txt 再试一次(兼容 0.2.0 老配置),
# 文件不存在时 fetch 直接报错。校验源/审计源只认映射,绝不去猜。
#
# yfgao 只有 chinanet/unicom/cmcc/cernet 四类运营商数据,没有
# chinabtn/gwbn/othernet/hk/mo/tw。所以 ISP_TABLE 里后六类默认保持 0(关闭);
# 若要启用它们,需要把主源换成提供这些文件的源,或自行补映射。
ISP_SOURCE_FILES="
yfgao:chinatelecom=chinanet,unicom_cnc=unicom,cmcc=cmcc,cernet=cernet
clang:chinatelecom=chinatelecom,unicom_cnc=unicom_cnc,cmcc=cmcc,cernet=cernet
"
# 是否启用校验源(0 = 不下载不校验;0.2.1 起默认 1)
ISP_VERIFY_ENABLE=1
# 分歧阈值:某个运营商的 Jaccard 低于这个百分比就拒绝本次更新(退出码 3)
# 实测正常值 95.7%-96.9%,口径切错时 64.6%-87.9%,90 是中间带
ISP_DIFF_MAX_JACCARD_DROP=90
# 单运营商地址数日变化上限(%),只在校验源启用时生效
ISP_DIFF_MAX_DELTA_PCT=3
# 校验源连续失败多少天后,从"降级继续"升级为"拒绝更新"
ISP_SOURCE_MAX_FAIL_DAYS=3
# 运营商表,格式:<源文件名>:<nft集合名/规则名>:<mwan3策略>:<是否启用>
#
# 顺序即优先级:排在前面的运营商优先占有重叠地址。
# 同一个 IP 只会出现在一个集合里,所以调整这里的顺序会改变归属,
# 但不会出现"规则先后决定归属"的隐性行为。
#
# 集合名同时也是 mwan3 规则名,mwan3 限制规则名 <=15 字符,
# 且不能以 mwan3_ 开头(该前缀为 mwan3 内部保留)。
#
# 策略名必须已在 mwan3 中定义,可用 `mwan3 status` 或
# `uci show mwan3 | grep policy` 查看。
ISP_TABLE="
chinatelecom:isp_tel:wan_only:1
unicom_cnc:isp_uni:wanb_only:1
cmcc:isp_cmcc:wanb_only:1
cernet:isp_cernet:wan_only:1
chinabtn:isp_tietong:wanb_only:0
gwbn:isp_gwbn:balanced:0
othernet:isp_other:wanb_only:0
hk:isp_hk:wanb_only:0
mo:isp_mo:wanb_only:0
tw:isp_tw:wanb_only:0
"
# 关于 othernet 默认关闭(实测教训):
# othernet 是"三大运营商以外"的集合(华为云、腾讯云、各类 IDC、
# 以及**公共 DNS** 如 223.5.5.5 / 119.29.29.29 都可能落在这里)。
# 启用它之后,路由器自己的 DNS 查询会被分到这条线上——如果这条线
# 恰好不可用,整个域名解析就挂了(实测:启用后所有域名解析失败)。
# 要启用它,先确认你的 DNS 服务器不属于该集合,或者给策略配好备份成员。
# 关于 cmcc(移动)默认走联通的实测依据:
# Steam 移动 CDN(39.134.x)实测 联通 22ms / 电信 72ms,联通明显更好,
# 而 Steam 下载是典型大流量场景,故默认给联通。
#
# 已知例外:B 站 PCDN(*mcdn.bilivideo.cn)虽然是移动段,
# 实测 电信 12-22 MB/s 而联通只有 0.04-1 MB/s。若你常用 B 站且命中 mcdn,
# 应改用域名/网段级覆盖,而不是把 cmcc 整体改回电信——
# B 站自有联通 CDN(cn-*-cu-*)恰恰需要走联通才快。
# 规则插入位置:在第一个匹配该正则的 mwan3 rule 之前插入运营商规则。
# 默认插在按端口/兜底规则之前、按设备/IP 的规则之后。
ISP_ANCHOR='dest_port|src_port|default_rule|https|internet'
# 每日自动更新(crontab 时间)
ISP_CRON="17 4 * * *"
# 分线测速用的接口与探测目标
PROBE_IFACES="pppoe-wan1 pppoe-wan2"
PROBE_BYTES=33554432
PROBE_TIME=25
PROBE_URLS="
https://mirrors.huaweicloud.com/ubuntu-releases/24.04/ubuntu-24.04.3-live-server-amd64.iso
https://mirrors.aliyun.com/ubuntu-releases/24.04/ubuntu-24.04.3-live-server-amd64.iso
"
# lc:begin
# ---------------------------------------------------------------- 线路体检(0.3.0)
#
# `isp-split linecheck` 对每条 WAN 做:本机口 IP 分类(公网/CGNAT/私网)、
# curl --interface 出口 IP、同运营商目标四段延迟、IP 归属地、双 STUN NAT 判定、
# 评分与一句话建议。结果缓存 LINE_CHECK_MIN_INTERVAL 秒,--force 可绕过。
#
# 注意:NAT 只给「公网 / 锥形 / 对称或多出口 / CGNAT / 未知」五态,
# 不做 NAT1-4 细分——公网 STUN 服务器基本不支持 CHANGE-REQUEST(见可行性报告)。
# 体检不会修改 mwan3/nft 规则;失败只降级单项,不影响上网。
# 总开关:0=完全不执行(LuCI 页面也会提示已关闭)
LINE_CHECK_ENABLE=1
# 归属地隐私开关:1=允许向第三方查询出口 IP 归属地;0=只关闭归属地查询
#
# 开启后,体检会把**每条 WAN 的出口公网 IP**发送给第三方(默认百度,
# 失败时 ip-api.com)查询归属地。只发送出口 IP,不发送内网地址、设备名、
# MAC、流量内容。ip-api 使用 HTTP,传输不加密;介意时请设为 0,或把
# LINE_CHECK_GEO_PROVIDER 固定为 baidu。
# 关闭后不发起任何归属地请求,卡片显示「归属地:未查询(隐私开关关闭)」。
# 省/市不可知,但仍可用本地 @isp_* 集合判断运营商大类,不需要外发。
# 注意:此开关只关归属地;出口 IP 回显、STUN 与延迟探测仍会外发。
# 要完全停止体检,请设 LINE_CHECK_ENABLE=0。
LINE_CHECK_GEO=1
# 归属地服务商:auto | baidu | ip-api | off
# auto 先百度(HTTPS、国内可达),失败转 ip-api(HTTP)
# baidu 只用百度;失败显示「归属地未知」,不会自动转 HTTP 源
# ip-api 只用 ip-api(HTTP,明文)
# off 等同 LINE_CHECK_GEO=0
LINE_CHECK_GEO_PROVIDER="auto"
# 归属地缓存有效期(秒)。同一个出口 IP 在有效期内只查一次。
LINE_CHECK_GEO_TTL=86400
# 手动触发的最小间隔(秒)。间隔内重复执行直接返回上次结果(缓存),
# LuCI 的「立即体检」按钮也按这个值节流。范围 15-3600。
LINE_CHECK_MIN_INTERVAL=60
# 单次探测量(1-10 秒):curl --connect-timeout 与 socat -T 都用它。
# 宽带正常时 3 秒足够;线路很差可调到 5,但整次体检会更慢。
LINE_CHECK_TIMEOUT=3
# 单条 WAN 的探测预算(秒)。超过后跳过剩余的 STUN/归属地,
# 只保留已完成的项目并在明细里标注,避免 LuCI/rpcd 超时(建议 15-25)。
LINE_CHECK_BUDGET=20
# 每条 WAN 的同运营商探测目标:<运营商源名>:<域名1>,<域名2>
# 源名必须与 ISP_TABLE 第一列一致;域名运行时解析,再用对应 @isp_* 集合
# 校验归属(不随机抽集合 IP、不扫端口)。全部失败时用下面的跨网基线兜底,
# 并在卡片上标注「跨网基线」,延迟项最多 15 分。
LINE_CHECK_TARGETS="
chinatelecom:www.chinatelecom.com.cn,www.21cn.com
unicom_cnc:www.10010.com,www.chinaunicom.com.cn
cmcc:www.migu.cn,www.10086.cn
cernet:www.tsinghua.edu.cn,www.pku.edu.cn
"
# 跨网基线目标(仅用于判断“链路是否通”,不计入同网延迟分)
LINE_CHECK_BASELINE="www.baidu.com,www.qq.com"
# STUN 服务器:<域名或 IP>:<端口>,按顺序解析,取两个不同 IP 各探一次。
# 同一本地端口 + so-bindtodevice 锁线;失败自动换下一个/重试一次。
# 公网 STUN 可达性会波动,不要只写一个;UDP 3478 被阻断时只降级为“未知”。
# 可选:stun.chat.bilibili.com:3478(实测有时无 A 记录,按需加回列表)
LINE_CHECK_STUN_SERVERS="
stun.miwifi.com:3478
stun.douyucdn.cn:18000
stun.freeswitch.org:3478
stun.cloudflare.com:3478
"
# 出口 IP 回显服务(逗号分隔,按顺序尝试)。只用于拿公网出口 IP。
LINE_CHECK_ECHO_URLS="https://api.ipify.org,https://ipv4.icanhazip.com"
# 体检请求的 User-Agent。部分运营商站点对默认 curl UA 返回 412/418,
# 必须带浏览器 UA;不要改成空值。
LINE_CHECK_UA="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"
# lc:end