Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Создание правила Anticensority для sing-box #2

Open
savely-krasovsky opened this issue Jun 9, 2023 · 4 comments
Open

Comments

@savely-krasovsky
Copy link

savely-krasovsky commented Jun 9, 2023

Расширение очень крутое и поэтому мне хотелось бы концепцию на system-wide уровень. Особенно это актуально для Android. Да, там можно настроить в системе PAC-файл, но в небраузерных приложениях это работать не будет.

Китайцы придумали мощную коробку под названием sing-box, она интегрирована в кучу приложений включая Nekoray, NekoBox, SagerNet и другие.

Там есть удобная фича с правилами маршрутизации, в частности правила geosite и geoip. Компилируют готовую базу они тут: https://github.com/SagerNet/sing-geosite

Вкладывают при этом вручную подобные списки, которые делает коммьюнити: https://github.com/v2fly/domain-list-community

Собственно идея простая:

  1. Можно компилировать базу в похожем формате.
  2. Далее форкнуть sing-box и сделать отдельное правило, например antizapret, при его добавлении в конфигурацию подгружать БД запрещенных доменов и IP.
  3. В конфигурации sing-box сделать два правила: по умолчанию обход, а antizapret пускать через прокси.

На мой взгляд изменения подготовить достаточно легко:

  1. Генератор PAC-файлов у нас уже есть. Адаптировать под генерацию db-файлов и можно также заливать в GitHub-релизы новые версии.
  2. Форкнуть и добавить для sing-box новое правило по аналогии с geosite: https://github.com/SagerNet/sing-box/blob/dev-next/route/router_geo_resources.go (загрузка актуальной БД), https://github.com/SagerNet/sing-box/blob/dev-next/route/rule_item_geosite.go (сам матчер)
  3. Форкнуть Nekobox и использовать нашу версию sing-box (других изменений делать там не придется).

В теории можно будет даже попробовать это замержить, если поговорить с оригинальными авторами, но тут уже не знаю насколько они открыты к подобному.

@savely-krasovsky savely-krasovsky changed the title Создание правила anticensority для sing-box Создание правила Anticensority для sing-box Jun 9, 2023
@savely-krasovsky
Copy link
Author

@ilyaigpetrov хотелось бы послушать ваши мысли)

@ilyaigpetrov
Copy link
Collaborator

Чем такое решение лучше VPN АнтиЗапрета, который рекоменуется ставить на Android и iOS?

@savely-krasovsky
Copy link
Author

savely-krasovsky commented Jun 29, 2023

  1. Антизапрет на мой личный взгляд достаточно нестабилен. DNS-кэширование там достаточно странное и часто сбоит. В итоге у меня стабильно перестает работать полностью или частично в локальной сети ресурсы Apple (iTunes, iCloud, AppStore) и например некорректно загружается контент в TikTok.
  2. Решение с sing-box позволяет использовать любые прокси, включая V2Ray, NaiveProxy, XRay и обыкновенные SOCKS5/HTTPS proxy. Часто их можно развернуть одним кликом или купить за копейки готовые. Антизапрет же привязан бетонно к OpenVPN.

@savely-krasovsky
Copy link
Author

savely-krasovsky commented Jul 2, 2023

@ilyaigpetrov я в итоге своими силами сделал такое:
https://github.com/L11R/antizapret-sing-box-geo

Работает отлично с в паре с sing-box и любым прокси (или даже WireGuard). На своём личном телефоне у меня получился примерно такой конфиг:

{
  "log": {
    "level": "warn"
  },
  "dns": {
    "servers": [
      {
        "tag": "adguard-home-dns",
        "address": "https://REDACTED/dns-query/singbox",
        "address_resolver": "yandex-dns",
        "detour": "direct-out"
      },
      {
        "tag": "yandex-dns",
        "address": "77.88.8.8",
        "detour": "direct-out"
      }
    ]
  },
  "inbounds": [
    {
      "type": "tun",
      "inet4_address": "172.16.0.1/30",
      "inet6_address": "fd00::1/126",
      "auto_route": true,
      "sniff": true
    }
  ],
  "outbounds": [
    {
      "type": "direct",
      "tag": "direct-out"
    },
    {
      "type": "wireguard",
      "tag": "wireguard-out",
      "server": "REDACTED",
      "server_port": 51820,
      "system_interface": true,
      "local_address": [
        "10.252.0.1/32",
        "2600:xxxx:xxxx:cafe::1/128"
      ],
      "private_key": "REDACTED",
      "peer_public_key": "REDACTED",
      "pre_shared_key": "REDACTED"
    },
    {
      "type": "dns",
      "tag": "dns-out"
    }
  ],
  "route": {
    "rules": [
      {
        "ip_version": 6,
        "outbound": "wireguard-out"
      },
      {
        "geoip": "antizapret",
        "geosite": "antizapret",
        "outbound": "wireguard-out"
      },
      {
        "protocol": "dns",
        "outbound": "dns-out"
      }
    ],
    "geoip": {
      "download_url": "https://github.com/L11R/antizapret-sing-geosite/releases/latest/download/geoip.db"
    },
    "geosite": {
      "download_url": "https://github.com/L11R/antizapret-sing-geosite/releases/latest/download/geosite.db"
    },
    "auto_detect_interface": true
  }
}

Итог: заблокированные и IPv6 сайты работают через WireGuard, незаблокированные -- напрямую.

С IPv6 это лично моя хотелка, можно легко убрать это правило и будет классический Антизапрет. Наверно позже напишу блогпост или пост на форум (ntc.party).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants