fix & improve sing-box final outbound

This commit is contained in:
arm64v8a
2023-01-30 12:05:15 +09:00
parent ca0df2128b
commit 242fc1cb52
3 changed files with 9 additions and 13 deletions

View File

@@ -812,12 +812,6 @@ namespace NekoRay {
add_rule_route(status->domainListRemote, false, tagProxy); add_rule_route(status->domainListRemote, false, tagProxy);
add_rule_route(status->domainListDirect, false, "bypass"); add_rule_route(status->domainListDirect, false, "bypass");
// def_outbound
if (!status->forTest) status->routingRules += QJsonObject{
{"port_range", ":"},
{"outbound", dataStore->routing->def_outbound},
};
// geopath // geopath
auto geoip = FindCoreAsset("geoip.db"); auto geoip = FindCoreAsset("geoip.db");
auto geosite = FindCoreAsset("geosite.db"); auto geosite = FindCoreAsset("geosite.db");
@@ -844,6 +838,7 @@ namespace NekoRay {
{"path", geosite}, {"path", geosite},
}, },
}}; }};
if (!status->forTest) routeObj["final"] = dataStore->routing->def_outbound;
if (status->forExport) { if (status->forExport) {
routeObj.remove("geoip"); routeObj.remove("geoip");
routeObj.remove("geosite"); routeObj.remove("geosite");
@@ -882,11 +877,6 @@ namespace NekoRay {
{"ip_cidr", QList2QJsonArray(arr)}}; {"ip_cidr", QList2QJsonArray(arr)}};
cidr_rule = "," + QJsonObject2QString(rule, false); cidr_rule = "," + QJsonObject2QString(rule, false);
} }
// no_match_rule
auto no_match_rule = QJsonObject{
{"port_range", ":"},
{"outbound", no_match_out},
};
// tun name // tun name
auto tun_name = "nekoray-tun"; auto tun_name = "nekoray-tun";
#ifdef Q_OS_MACOS #ifdef Q_OS_MACOS
@@ -910,7 +900,7 @@ namespace NekoRay {
.replace("%TUN_NAME%", tun_name) .replace("%TUN_NAME%", tun_name)
.replace("%STRICT_ROUTE%", dataStore->vpn_strict_route ? "true" : "false") .replace("%STRICT_ROUTE%", dataStore->vpn_strict_route ? "true" : "false")
.replace("%SOCKS_USER_PASS%", socks_user_pass) .replace("%SOCKS_USER_PASS%", socks_user_pass)
.replace("%NO_MATCH_RULE%", "," + QJsonObject2QString(no_match_rule, false)) .replace("%FINAL_OUT%", no_match_out)
.replace("%PORT%", Int2String(dataStore->inbound_socks_port)); .replace("%PORT%", Int2String(dataStore->inbound_socks_port));
// hook.js // hook.js
auto source = qjs::ReadHookJS(); auto source = qjs::ReadHookJS();

View File

@@ -45,6 +45,7 @@
} }
], ],
"route": { "route": {
"final": "%FINAL_OUT%",
"auto_detect_interface": true, "auto_detect_interface": true,
"rules": [ "rules": [
{ {
@@ -95,7 +96,6 @@
} }
%PROCESS_NAME_RULE% %PROCESS_NAME_RULE%
%CIDR_RULE% %CIDR_RULE%
%NO_MATCH_RULE%
] ]
} }
} }

View File

@@ -1259,10 +1259,16 @@ void MainWindow::on_menu_remove_unavailable_triggered() {
if (profile->latency < 0) out_del += profile; if (profile->latency < 0) out_del += profile;
} }
int remove_display_count = 0;
QString remove_display; QString remove_display;
for (const auto &ent: out_del) { for (const auto &ent: out_del) {
remove_display += ent->bean->DisplayTypeAndName() + "\n"; remove_display += ent->bean->DisplayTypeAndName() + "\n";
if (++remove_display_count == 20) {
remove_display += "...";
break;
}
} }
if (out_del.length() > 0 && if (out_del.length() > 0 &&
QMessageBox::question(this, tr("Confirmation"), tr("Remove %1 item(s) ?").arg(out_del.length()) + "\n" + remove_display) == QMessageBox::StandardButton::Yes) { QMessageBox::question(this, tr("Confirmation"), tr("Remove %1 item(s) ?").arg(out_del.length()) + "\n" + remove_display) == QMessageBox::StandardButton::Yes) {
for (const auto &ent: out_del) { for (const auto &ent: out_del) {