An open API service indexing awesome lists of open source software.

https://github.com/jinndi/skeen

Keenetic/Netcraze TProxy & Redirect with sing-box
https://github.com/jinndi/skeen

entware fakeip keenetic netcraze opkgtun redirect sing-box tproxy

Last synced: about 1 month ago
JSON representation

Keenetic/Netcraze TProxy & Redirect with sing-box

Awesome Lists containing this project

README

          


SKeen



SKeen



TProxy и Redirect для Keenetic/Netcraze на базе sing-box


SKeen
License
sing-box
Visitor
Downloads
Ask DeepWiki

🇷🇺 **Русский** | [🇺🇸 English](README.md)

🤔Почему sing-box ?

**sing-box** — это универсальный прокси-движок с открытым исходным кодом, написанный на Go. Он ориентирован на максимальную производительность, низкое потребление ресурсов и поддержку самых современных протоколов

**Сравнение прокси-движков в контексте роутеров и встраиваемых систем (Embedded)**

|Параметр |sing-box |Xray |mihomo |
|------------------------|-----------------|------------------|----------------|
|Ресурсоемкость (RAM/CPU)|✅ Минимальная |⚠️ Средняя |❌ Высокая |
|Поддержка протоколов |✅ Передовой |⚠️ Мало |✅ Много |
|Мультиплексирование |✅ Отлично |⚠️ Проблемно |✅ Хорошо |
|DNS-логика |🥇 Native (+Fake-IP)|🥉 Sniffing (+FakeDNS)|🥈 Fake-IP (+Real)|
|L7 Сниффинг (протоколы) |✅ Лидер |⚠️ Базово |❌ Только домены |
|Маршрутизация |✅ Гибко |⚠️ Базово |✅ (но тяжелее) |
|Управление правилами |✅ Rule-sets (bin)|⚠️ Geo-files (dat)|✅ Rule-providers|
|Независимый проект |✅ Да |❌ (форк V2Ray) |❌ (форк Clash) |
|Порог вхождения |🔴 Высокий |🟡 Средний |🟢 Низкий |

Примечания:

> sing-box выигрывает за счет модульности и написанного с нуля кода: его DNS-стек позволяет создавать конфигурации любой сложности при минимальных затратах RAM. В то же время mihomo (Clash) ориентирован на автоматизацию, что требует значительных ресурсов, а Xray ограничен устаревшим сетевым стеком и тяжелыми .dat файлами.

> Различия в сниффинге: sing-box и Xray используют полноценный DPI (Deep Packet Inspection), позволяющий определять тип протокола (например, BitTorrent) по содержимому пакетов. mihomo ограничен лишь извлечением метаданных (доменов) из TLS/HTTP-заголовков, что делает невозможной маршрутизацию по типу трафика.

> Высокий порог вхождения sing-box обусловлен строгим синтаксисом JSON и отсутствием «магических» настроек по умолчанию, что компенсируется полным контролем над трафиком.

🖥️ Веб-интерфейс ?

💡 Для упрощения настройки доступен [плагин синхронизации](https://github.com/jinndi/sync-profile-to-skeen), позволяющий импортировать профили через [GUI.for.SingBox](https://github.com/jinndi/sync-profile-to-skeen)

Проект сознательно не включает отдельную панель управления. Вот почему это выгодно для вашего роутера:

* **Ресурсоэффективность**: Отказ от сторонних WebUI освобождает RAM и снижает нагрузку на процессор для приоритетных задач маршрутизации.
* **Интеграция**: Управление и мониторинг отлично реализуются через встроенный интерфейс **Zashboard**, что исключает избыточность.
* **Чистота системы**: Минимум зависимостей и отсутствие лишних открытых портов повышают общую безопасность и стабильность системы.
* **Полный контроль**: Прямое редактирование конфигов позволяет использовать 100% возможностей Sing-Box без ограничений, накладываемых упрощенными интерфейсами.
* **Инструмент, а не игрушка**: Пока другие проекты соревнуются в рисовании красивых кнопок и графиков, превращая роутер в тормозящую фоторамку, SKeen фокусируется на передаче пакетов. Я считаю создание тяжелых панелей для сетевого скрипта признаком плохого тона и неумения работать с системой напрямую. Если вам нужна гирлянда с интерфейсом - вы ошиблись адресом; если вам нужна скорость — вы там, где нужно.

🧩 Архитектура ?

### Redirect — задействован в режимах `redirect` и `hybrid` (TCP)

Используется только одна цепочка `nat` — **skeen**:

Вход в данную цепочку может осуществляться по `fwmark` политики роутера, по указанным портам или за их исключением. Она содержит следующий порядок правил:

* **RETURN**: Обход локальных, зарезервированных и пользовательских адресов.
* **REDIRECT**: Переадресация TCP-трафика на `redirect` порт Sing-Box.

> Перехват DNS-запросов в режиме `redirect` средствами NAT для Sing-Box недоступен.

---

### TProxy — задействован в режимах `tproxy` и `hybrid` (UDP)

Используются две базовые цепочки в таблице `mangle`:

#### 1. PREROUTING **skeen**
Вход в данную цепочку может осуществляться по `fwmark` политики роутера, по указанным портам или за их исключением. Содержит следующий порядок правил:

* **DNS TPROXY**: TCP/UDP редирект 53 порта на TProxy порт Sing-Box (опционально).
* **RETURN**: Обход локальных, зарезервированных и пользовательских адресов.
* **MARK + ACCEPT SOCKET**: Быстрый путь для уже установленных прозрачных сокетов (socket transparent).
* **TPROXY**: Направление оставшегося TCP/UDP трафика в TProxy порт Sing-Box.

#### 2. OUTPUT **skeen_mask**
Вход в данную цепочку возможен только для процессов, не состоящих в группе `skeen` (для исключения самозацикливания прокси). Содержит следующий порядок правил:

* **RETURN**: Обход локальных, зарезервированных и пользовательских адресов.
* **MARK**: Установка общей маркировки для TCP/UDP трафика.

🕵️‍♂️ FakeIP ?

В список исключений (обход локальных сетей) специально **не включены**:

1. **Подсеть `198.18.0.0/15`**
В скрипте строка с `198.18.0.0/15` закомментирована. Это означает, что трафик к FakeIP адресам Sing-Box будет перехвачен и обработан ядром в обычном режиме. Это преднамеренное дизайнерское решение для корректной работы маршрутизации.

2. **Подсеть `fc00::/18`**
Сегмент IPv6 `fc00::/18` (диапазон Fake-IP для IPv6 в Sing-Box) также не добавлен в список обхода по аналогичной причине.

### 🚀 Особенности

- Режимы TProxy/Redirect/Hybrid ✓
- Поддержка IPv4 и IPv6 ✓
- Работающий модуль Sing-box DNS ✓
- Работающий Sing-box fakeip ✓
- Настроенный Zashboard через Clash API ✓
- Оптимизация сетевых настроек ✓
- Команды работающие через WEB CLI роутера ✓

### 📋 Требования

- Установленный и настроенный Entware **не во внутренней памяти** устройства
- Установленный компонент «Модули ядра подсистемы Netfilter»
- Установленный `curl` (`opkg install curl`)
- Рекомендуется: минимум 256 МБ ОЗУ и процессор ARM для раскрытия полного потенциала

### 💾 Установка

**Выполните из среды Entware из SSH:**

```bash
curl -Ls https://github.com/jinndi/SKeen/releases/latest/download/skeen_ru | sh
```

**Настройте SKeen**. Его файл конфигурации находится по адресу `/opt/etc/skeen/skeen.json`.

**Настройте JSON-файл(ы) конфигурации sing-box**, расположенные в директории `/opt/etc/skeen/config/`. В этой директории уже подготовлены примеры файлов. Либо используйте собственный одиночный файл конфигурации, включив режим `sing_config.enable`.

**Zashboard панель** по умолчанию настроена через Clash API и доступна по IP-адресу роутера (обычно 192.168.1.1) по адресу `http://192.168.1.1:9999`.

Директория `/opt/etc/skeen` не удаляется при деинсталляции программы (ее нужно удалить вручную при необходимости) и не перезаписывается при переустановке, если она уже существует.

Для дальнейшего управления используйте команду `skeen`.

Структура файлов и папок после успешной установки:

```
/opt/
├── bin/
│ ├── skeen # Скрипт управления SKeen
│ └── skeen-box # Бинарный файл sing-box
├── etc/
│ ├── init.d/
│ │ └── S99SKeen # Скрипт автозапуска
│ ├── ndm/
│ │ └── netfilter.d/
│ │ └── skeen_firewall.sh # Создается при запуске
│ └── skeen/
│ ├── skeen.json # Конфигурация SKeen
│ └── config/ # Директория конфигов sing-box
│ ├── log.json
│ ├── dns.json
│ ├── inbounds.json
│ ├── outbounds.json
│ ├── route.json
│ └── experimental.json
└── tmp/
└── (временные файлы загрузки)
```

### ⚡ Команды

Пример использования через SSH: запуск демона `skeen start`

При использовании Web CLI роутера добавляйте `exec` перед командой. Например: `exec skeen reload`

> Вывод ответа в WEB CLI ограничен 8 строками и определенным временем, но это не влияет на корректное выполнение команд

Команда `skeen` без параметров запускает меню управления в SSH. Используйте `help` для справки.

| Команда | Описание | WEB CLI |
| :--- | --- | :---: |
| `start` | Запустить сервис | ✓ |
| `stop` | Остановить сервис | ✓ |
| `restart` | Перезапустить сервис | ✓ |
| `reload` | Перезапустить без смены правил фаервола | ✓ |
| `kill` | Принудительно остановить | ✓ |
| `status` | Показать статус | ✓ |
| `version` | Показать версию(и) | ✓ |
| `update` | Проверить и установить обновления | - |
| `test` | Проверить правила фаервола | ✓ |
| `deps` | Проверить зависимости | ✓ |
| `check` | Проверить конфигурацию | ✓ |
| `format` | Форматировать конфигурацию Sing-box | ✓ |
| `backup` | Создать архив `/opt/etc/skeen` | ✓ |
| `backups` | Список созданных архивов в `/opt` | ✓ |
| `restore`¹ | Восстановить `/opt/etc/skeen` из архива `/opt` | ✓ |
| `reset` | Сбросить `/opt/etc/skeen` до состояния по умолчанию | - |
| `clean`² | Очистить кэш файл Sing-box | ✓ |
| `sync`³ | Синхронизировать конфигурацию Sing-box | ✓ |

1 - в качестве второго параметра можно передать имя архива с расширением `.tar` для немедленного запуска восстановления

2 - очищает файл кэша. Это необходимо при использовании функции `experimental.cache_file` в sing-box, например, для сброса кэша загруженных правил (rule_set) и истории DNS-запросов. Начиная с версии sing-box 1.14, в кэш сохраняются все DNS-ответы (ранее — только отклоненные)

3 - принимает URL JSON-конфигурации Sing-box в качестве второго параметра (HTTP или HTTPS), необязательно указывать, если прописан адрес в `sing_config.sync_url`

| Менеджер OpkgTun (KeeneticOS v5+, только через SSH) |
| :--- |
| `skeen tun create ` — Создать интерфейс с IP-адресом и именем |
| `skeen tun delete ` — Удалить интерфейс по имени |
| `skeen tun list` — Показать все интерфейсы OpkgTun |

Если пропал доступ к SSH Entware, выполните в Web CLI:

```
exec /opt/etc/init.d/S51dropbear start
```

### ⚙️ Настройки

> [!NOTE]
> После внесения изменений в файл требуется перезапуск через `skeen restart` или через меню

Файл `/opt/etc/skeen/skeen.json` содержит следующие настройки:

```jsonc
{
"auto_start": {
"enable": 1, // Автозапуск SKeen при загрузке роутера (0 = выключено)
"delay": 0 // Задержка автозапуска в секундах (по умолчанию: 0)
},
"policy": {
"enable": 1, // Включить маршрутизацию на основе политики (0 = выключено)
"name": "SKeen" // Имя политики роутера (по умолчанию: "SKeen")
},
"network": {
"ipv6": 1, // Включить поддержку IPv6 (0 = выключено)
"tuning": 0, // Включить оптимизацию сети через sysctl (1 = вкл).
// Если выключено, настройки sysctl сбросятся после перезагрузки.
"check": [
"1.1.1.1",
"77.88.8.8",
"223.5.5.5"
] // Домены или IPv4 для проверки доступности сети (макс. 3)
},
"sing_config": {
"enable": 0, // Если 1, будет использоваться один файл конфига Sing-box
// по адресу /opt/etc/skeen/config.json вместо папки /opt/etc/skeen/config/
"path": "", // Можно указать свой собственный полный путь
"sync_url": "", // URL-адрес (http:// или https://), откуда будет синхронизироваться
// конфигурация командой `sync` по умолчанию (необязательно)
},
"service_proxy": {
"enable": 0, // Если 1, используется локальный прокси (127.0.0.1) для команд update и sync
"port": "", // Порт локального прокси (SOCKS5 или mixed)
"user": "", // Имя пользователя для подключения (не обязательно)
"pass": "" // Пароль пользователя для подключения (обязательно если указан user)
},
"firewall": {
"intercept": {
"dns": 1, // Перехватывать DNS-запросы через режимы TProxy/Hybrid (0 = выкл)
"port": [] // Порты для перехвата (все, если пусто).
// Пример: [ 80, 443, "1000:2000", "1500:5555" ]
},
"exclude": {
"port": [
123, 137,
138, 139,
445 // Порты, исключенные из редиректа
// (игнорируется, если задан `intercept.port`)
],
"ipv4_cidr": [], // Исключенные подсети IPv4 из редиректа
// Пример: [ "192.87.1.0/24", "192.12.1.1" ]
"ipv6_cidr": [] // Исключенные подсети IPv6 из редиректа
// Пример: [ "2001:db8::/32", "2001:db8::1" ]
}
}
}
```

### 🔗 Полезные ссылки

- Плагин синхронизации: [https://github.com/jinndi/sync-profile-to-skeen](https://github.com/jinndi/sync-profile-to-skeen)
- Схема Sing-box: [https://gist.github.com/artiga033/fea992d95ad44dc8d024b229223b1002](https://gist.github.com/artiga033/fea992d95ad44dc8d024b229223b1002)
- Различные примеры настроек: [https://proxy-tutorials.dustinwin.us.kg](https://proxy-tutorials.dustinwin.us.kg)
- Генератор outbounds: [https://4n0nymou3.github.io/proxy-to-singbox-converter/](https://4n0nymou3.github.io/proxy-to-singbox-converter/)
- Наборы правил Karing: [https://github.com/KaringX/karing-ruleset/tree/sing](https://github.com/KaringX/karing-ruleset/tree/sing)