kit net split: больше категорий в шаблоне (комментарии), проверка названий GEOSITE по базе в kit net split check, честное сообщение об ошибке

This commit is contained in:
maxdmitrov
2026-10-05 21:50:38 +03:00
parent 3ea6c0c868
commit 88f2c1066b
4 changed files with 54 additions and 6 deletions
+26
View File
@@ -399,12 +399,38 @@ class Server(http.server.ThreadingHTTPServer):
address_family = socket.AF_INET6 if ":" in CONF.get("listen", "") else socket.AF_INET
GEOSITE_URL = "https://github.com/MetaCubeX/meta-rules-dat/releases/download/latest/geosite.dat"
def unknown_geosites(names):
"""Сверяет категории GEOSITE с базой, которую скачают приложения: неизвестное имя ломает запуск конфига у клиента.
Нет доступа к GitHub – не проверяем (None-результат пустой)."""
if not names:
return []
try:
with urllib.request.urlopen(GEOSITE_URL, timeout=30) as r:
data = r.read(32 * 1024 * 1024)
except (urllib.error.URLError, OSError):
print("Категории GEOSITE не проверил: база недоступна. Названия сверьте по github.com/MetaCubeX/meta-rules-dat (geo/geosite).")
return []
bad = []
for n in names:
b = n.upper().encode()
if b"\x0a" + bytes([len(b)]) + b not in data:
bad.append(n)
return bad
def main():
if "--check-rules" in sys.argv:
# kit net split check: тот же разбор, что и при выдаче подписки, но с отчётом на экран.
loaded = load_rules(report=print)
if loaded:
print(f"Правил через VPN: {len(loaded[0])}; DNS для остального: {', '.join(loaded[1]) or 'системный'}")
unknown = unknown_geosites([v for k, v in loaded[0] if k == "GEOSITE"])
if unknown:
print("Нет такой категории GEOSITE: " + ", ".join(unknown) + ". Приложение не сможет запустить конфиг – исправьте или удалите эти строки.")
raise SystemExit(2)
raise SystemExit(0 if loaded else 1)
cert, key = CONF.get("cert"), CONF.get("key")
if cert and CREDS and os.path.exists(os.path.join(CREDS, "cert.pem")):
+25 -3
View File
@@ -1736,7 +1736,7 @@ SPLIT_FILE=/etc/kit-sub/rules.yaml
split_template() {
cat <<'YAML'
# Раздельная маршрутизация подписки (приложения на Mihomo: Clash Verge, FlClash, Mihomo Party).
# Через VPN идёт ТОЛЬКО перечисленное ниже, всё остальное – напрямую.
# Через VPN идёт ТОЛЬКО перечисленное ниже (сервисы, которым VPN нужен), всё остальное – напрямую.
# Правка вступает в силу, когда приложение обновит подписку; перезапуск не нужен.
# Проверить файл: kit net split check. Выключить: kit net split off.
#
@@ -1751,6 +1751,24 @@ split_template() {
via_vpn:
- GEOSITE,youtube
- GEOSITE,openai
- GEOSITE,anthropic
# Раскомментируйте то, чем пользуетесь (уберите «# » в начале строки):
# - GEOSITE,telegram
# - GEOSITE,meta # Instagram, Facebook, WhatsApp
# - GEOSITE,twitter # X (Twitter)
# - GEOSITE,discord
# - GEOSITE,github
# - GEOSITE,linkedin
# - GEOSITE,netflix
# - GEOSITE,spotify
# - GEOSITE,tiktok
# - GEOSITE,reddit
# - GEOSITE,twitch
# - GEOSITE,notion
# - GEOSITE,figma
# - GEOSITE,zoom
# - GEOSITE,google # все сервисы Google
# - GEOSITE,perplexity
# - DOMAIN-SUFFIX,example.org
# Необязательно: DNS для всего остального (по умолчанию – системный DNS приложения). Только адреса https://…
@@ -1777,7 +1795,7 @@ net_split() { # [on|off|check]
if [[ -f $SPLIT_FILE.off ]]; then install -m 644 "$SPLIT_FILE.off" "$SPLIT_FILE"; else split_template >"$SPLIT_FILE"; fi
chmod 755 /etc/kit-sub; chmod 644 "$SPLIT_FILE"
say "Включил: $SPLIT_FILE"
echo "Сейчас через VPN идут только перечисленные сервисы (YouTube, ChatGPT), остальное напрямую."
echo "Сейчас через VPN идут только перечисленные сервисы (YouTube, ChatGPT, Claude), остальное напрямую."
echo "Список правится так: nano $SPLIT_FILE, затем kit net split check."
echo "Приложения на Mihomo подхватят при обновлении подписки." ;;
off)
@@ -1786,7 +1804,11 @@ net_split() { # [on|off|check]
say "Выключил: подписка снова отдаёт весь трафик через VPN (список сохранён: $SPLIT_FILE.off)." ;;
check)
[[ -f $SPLIT_FILE ]] || die "Файла нет: $SPLIT_FILE (включить: kit net split on)"
python3 /usr/local/lib/kit-sub/kit_sub.py --check-rules || die "Список не применится – подписка останется без раздельной маршрутизации." ;;
python3 /usr/local/lib/kit-sub/kit_sub.py --check-rules && return 0
case $? in
2) die "Исправьте список: с неизвестной категорией приложения на Mihomo не смогут запустить конфиг." ;;
*) die "Список не применится – подписка останется без раздельной маршрутизации." ;;
esac ;;
*) die "kit net split [on|off|check]" ;;
esac
}