feat(qos): Игровой & Голосовой QoS Ускоритель (Low-Latency QoS Priority Engine) (v1.2.29)

This commit is contained in:
Dushnilin
2026-07-26 17:50:49 +03:00
parent c65b3b1fb4
commit 58e2cd94be
3 changed files with 69 additions and 1 deletions
+15
View File
@@ -888,6 +888,21 @@ function nft_create_runtime_base(table, localv4_set, common_set, port_set, ip_po
if (arg_bool(exclude_ntp) && !nft_insert_rule(table, "mangle", [ "udp", "dport", "123", "return" ]))
return false;
// QoS Low-Latency Gaming & Voice Acceleration Engine
let qos_enabled = uci_settings().qos_priority_engine != "0";
if (qos_enabled) {
// Voice & Discord RTC (DSCP EF 0x2e)
nft_add_rule(table, "mangle_forward", [ "udp", "dport", "{ 5000-5020, 3478, 19302, 50000-65535 }", "ip", "dscp", "set", "0x2e" ]);
nft_add_rule(table, "mangle_output", [ "udp", "dport", "{ 5000-5020, 3478, 19302, 50000-65535 }", "ip", "dscp", "set", "0x2e" ]);
// Gaming Traffic (Steam, CS, Dota, Valorant, Apex, PUBG, Roblox) (DSCP AF41 0x22)
nft_add_rule(table, "mangle_forward", [ "udp", "dport", "{ 3074, 7000-9000, 27000-27050, 28960 }", "ip", "dscp", "set", "0x22" ]);
nft_add_rule(table, "mangle_output", [ "udp", "dport", "{ 3074, 7000-9000, 27000-27050, 28960 }", "ip", "dscp", "set", "0x22" ]);
// TCP ACK Acceleration (DSCP CS2)
nft_add_rule(table, "mangle_forward", [ "tcp", "flags", "&", "(fin|syn|rst|ack)", "==", "ack", "ip", "dscp", "set", "cs2" ]);
}
return true;
}
+34 -1
View File
@@ -395,7 +395,8 @@ function view_menu(token, chat_id, msg_id) {
{ text: "🐕 Watchdog", callback_data: "/watchdog" }
],
[
{ text: "🤖 ИИ-Самолечение", callback_data: "/heal" }
{ text: "🤖 ИИ-Самолечение", callback_data: "/heal" },
{ text: "🎮 Игровой QoS", callback_data: "/qos" }
],
[
{ text: "🩺 Диагностика", callback_data: "/doctor" },
@@ -966,6 +967,36 @@ function exec_ai_heal(token, chat_id, msg_id) {
send_message(token, chat_id, text, "HTML", keyboard);
}
function view_qos(token, chat_id, msg_id) {
let c = uci_core.cursor(); c.load(CONFIG_NAME);
let cfg = c.get_all(CONFIG_NAME, "settings") || {};
let enabled = cfg.qos_priority_engine != "0";
let text = "🎮 <b>Игровой & Голосовой QoS Ускоритель</b>\n\n" +
"Статус: <code>" + (enabled ? "🟢 Включен (DSCP EF + AF41 Priority)" : "⚪ Выключен") + "</code>\n\n" +
"<b>Приоритетные правила:</b>\n" +
"├ 🎙️ <b>Golos/Discord/RTC:</b> UDP 5000-5020, 3478, 50000-65535 ➔ <code>DSCP EF (0x2e)</code>\n" +
"├ 🎮 <b>Games (Steam/CS/Dota/Apex/PUBG/Roblox):</b> UDP 27000-27050, 3074 ➔ <code>DSCP AF41 (0x22)</code>\n" +
"└ ⚡ <b>TCP ACK Acceleration:</b> малые ACK пакеты ➔ <code>High Priority</code>";
let keyboard = [
[{ text: (enabled ? "⏹️ Отключить QoS" : "⚡ Включить QoS"), callback_data: "/qos_toggle" }],
[{ text: "⬅️ Назад", callback_data: "/menu" }]
];
if (msg_id) edit_message(token, chat_id, msg_id, text, "HTML", keyboard);
else send_message(token, chat_id, text, "HTML", keyboard);
}
function handle_qos_toggle(token, chat_id, msg_id) {
let c = uci_core.cursor(); c.load(CONFIG_NAME);
let cfg = c.get_all(CONFIG_NAME, "settings") || {};
let new_val = (cfg.qos_priority_engine == "0") ? "1" : "0";
c.set(CONFIG_NAME, "settings", "qos_priority_engine", new_val);
c.commit(CONFIG_NAME);
system("/usr/bin/tachyon reload_firewall >/dev/null 2>&1 &");
view_qos(token, chat_id, msg_id);
}
// ─── Dispatcher ──────────────────────────────────────────────────────────────
function dispatch_command(token, chat_id, text, msg_id) {
@@ -976,6 +1007,8 @@ function dispatch_command(token, chat_id, text, msg_id) {
if (cmd == "/status") return view_status(token, chat_id, msg_id);
if (cmd == "/runtime") return view_runtime(token, chat_id, msg_id);
if (cmd == "/heal" || cmd == "/ai_heal") return exec_ai_heal(token, chat_id, msg_id);
if (cmd == "/qos") return view_qos(token, chat_id, msg_id);
if (cmd == "/qos_toggle") return handle_qos_toggle(token, chat_id, msg_id);
if (cmd == "/outbounds") return view_outbounds(token, chat_id, msg_id);
if (match(cmd, /^\/outbounds /)) {
+20
View File
@@ -425,6 +425,25 @@ function ai_heal_nftables() {
return true;
}
function ai_heal_qos() {
let cfg = settings();
if (cfg.qos_priority_engine == "0") return true;
let nft_table = getenv("NFT_TABLE_NAME") || "TachyonTable";
let out_nft = command_output_from_args(["nft", "list", "table", "inet", nft_table]);
if (index(out_nft, "dscp set 0x2e") < 0 || index(out_nft, "dscp set 0x22") < 0) {
ai_heal_report(
"qos_priority",
"Правила Игрового & Голосового QoS Ускорителя не найдены в nftables",
"Применены высокоприоритетные метки DSCP EF (0x2e) для Voice/RTC и DSCP AF41 (0x22) для Gaming",
"fixed"
);
system("/usr/bin/tachyon reload_firewall >/dev/null 2>&1 &");
return false;
}
return true;
}
function ai_heal_dns() {
let cfg = settings();
if (cfg.recovery_bypass == "1") return true;
@@ -508,6 +527,7 @@ function ai_heal_proxy_connectivity() {
function ai_full_health_audit() {
check_memory();
ai_heal_nftables();
ai_heal_qos();
ai_heal_dns();
ai_heal_proxy_connectivity();
ai_export_status();