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
- Host: GitHub
- URL: https://github.com/jinndi/skeen
- Owner: jinndi
- License: mit
- Created: 2026-01-06T19:31:54.000Z (5 months ago)
- Default Branch: main
- Last Pushed: 2026-04-24T11:25:16.000Z (about 1 month ago)
- Last Synced: 2026-04-24T13:28:29.957Z (about 1 month ago)
- Topics: entware, fakeip, keenetic, netcraze, opkgtun, redirect, sing-box, tproxy
- Language: Shell
- Homepage:
- Size: 1.12 MB
- Stars: 22
- Watchers: 1
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: README-RU.md
- Changelog: CHANGELOG.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
SKeen
TProxy и Redirect для Keenetic/Netcraze на базе sing-box
🇷🇺 **Русский** | [🇺🇸 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)