Skip to content

Commit aa43a82

Browse files
committed
refactor route settings
1 parent 6b9e22f commit aa43a82

9 files changed

+695
-505
lines changed

db/ConfigBuilder.cpp

+30-22
Original file line numberDiff line numberDiff line change
@@ -131,11 +131,11 @@ namespace NekoRay {
131131

132132
#define DOMAIN_USER_RULE \
133133
for (const auto &line: SplitLinesSkipSharp(dataStore->routing->proxy_domain)) { \
134-
if (dataStore->dns_routing) status->domainListDNSRemote += line; \
134+
if (dataStore->routing->dns_routing) status->domainListDNSRemote += line; \
135135
status->domainListRemote += line; \
136136
} \
137137
for (const auto &line: SplitLinesSkipSharp(dataStore->routing->direct_domain)) { \
138-
if (dataStore->dns_routing) status->domainListDNSDirect += line; \
138+
if (dataStore->routing->dns_routing) status->domainListDNSDirect += line; \
139139
status->domainListDirect += line; \
140140
} \
141141
for (const auto &line: SplitLinesSkipSharp(dataStore->routing->block_domain)) { \
@@ -166,7 +166,7 @@ namespace NekoRay {
166166
: QJsonArray{"http", "tls", "quic"}},
167167
{"enabled", true},
168168
{"metadataOnly", false},
169-
{"routeOnly", dataStore->sniffing_mode == SniffingMode::FOR_ROUTING},
169+
{"routeOnly", dataStore->routing->sniffing_mode == SniffingMode::FOR_ROUTING},
170170
};
171171

172172
// socks-in
@@ -177,7 +177,7 @@ namespace NekoRay {
177177
inboundObj["listen"] = dataStore->inbound_address;
178178
inboundObj["port"] = dataStore->inbound_socks_port;
179179
QJsonObject socksSettings = {{"udp", true}};
180-
if (dataStore->fake_dns || dataStore->sniffing_mode != SniffingMode::DISABLE) {
180+
if (dataStore->fake_dns || dataStore->routing->sniffing_mode != SniffingMode::DISABLE) {
181181
inboundObj["sniffing"] = sniffing;
182182
}
183183
if (dataStore->inbound_auth->NeedAuth()) {
@@ -199,7 +199,7 @@ namespace NekoRay {
199199
inboundObj["protocol"] = "http";
200200
inboundObj["listen"] = dataStore->inbound_address;
201201
inboundObj["port"] = dataStore->inbound_http_port;
202-
if (dataStore->sniffing_mode != SniffingMode::DISABLE) {
202+
if (dataStore->routing->sniffing_mode != SniffingMode::DISABLE) {
203203
inboundObj["sniffing"] = sniffing;
204204
}
205205
if (dataStore->inbound_auth->NeedAuth()) {
@@ -274,13 +274,13 @@ namespace NekoRay {
274274

275275
// Remote or FakeDNS
276276
QJsonObject dnsServerRemote;
277-
dnsServerRemote["address"] = dataStore->fake_dns ? "fakedns" : dataStore->remote_dns;
277+
dnsServerRemote["address"] = dataStore->fake_dns ? "fakedns" : dataStore->routing->remote_dns;
278278
dnsServerRemote["domains"] = QList2QJsonArray<QString>(status->domainListDNSRemote);
279-
dnsServerRemote["queryStrategy"] = dataStore->remote_dns_strategy;
279+
dnsServerRemote["queryStrategy"] = dataStore->routing->remote_dns_strategy;
280280
if (!status->forTest) dnsServers += dnsServerRemote;
281281

282282
// Direct
283-
auto directDnsAddress = dataStore->direct_dns;
283+
auto directDnsAddress = dataStore->routing->direct_dns;
284284
if (directDnsAddress.contains("://")) {
285285
auto directDnsIp = SubStrBefore(SubStrAfter(directDnsAddress, "://"), "/");
286286
if (IsIpAddress(directDnsIp)) {
@@ -306,18 +306,22 @@ namespace NekoRay {
306306
dnsServers += QJsonObject{
307307
{"address", directDnsAddress.replace("https://", "https+local://")},
308308
{"fallbackStrategy", "disabled"},
309-
{"queryStrategy", dataStore->direct_dns_strategy},
309+
{"queryStrategy", dataStore->routing->direct_dns_strategy},
310310
{"domains", QList2QJsonArray<QString>(status->domainListDNSDirect)},
311311
};
312312

313313
dns["fallbackStrategy"] = "disabled_if_any_match";
314314
dns["servers"] = dnsServers;
315315
dns["tag"] = "dns";
316+
317+
if (dataStore->routing->use_dns_object) {
318+
dns = QString2QJsonObject(dataStore->routing->dns_object);
319+
}
316320
status->result->coreConfig.insert("dns", dns);
317321

318322
// Routing
319323
QJsonObject routing;
320-
routing["domainStrategy"] = dataStore->domain_strategy;
324+
routing["domainStrategy"] = dataStore->routing->domain_strategy;
321325
routing["domainMatcher"] = "mph";
322326
if (status->forTest) routing["domainStrategy"] = "AsIs";
323327

@@ -627,7 +631,7 @@ namespace NekoRay {
627631
// common
628632
if (IS_NEKO_BOX) {
629633
// apply domain_strategy
630-
outbound["domain_strategy"] = dataStore->outbound_domain_strategy;
634+
outbound["domain_strategy"] = dataStore->routing->outbound_domain_strategy;
631635
// apply mux
632636
if (!muxApplied && needMux) {
633637
auto muxObj = QJsonObject{
@@ -640,7 +644,7 @@ namespace NekoRay {
640644
}
641645
} else {
642646
// apply domain_strategy
643-
if (!status->forTest) outbound["domainStrategy"] = dataStore->outbound_domain_strategy;
647+
if (!status->forTest) outbound["domainStrategy"] = dataStore->routing->outbound_domain_strategy;
644648
// apply mux
645649
if (!muxApplied && needMux) {
646650
auto muxObj = QJsonObject{
@@ -695,9 +699,9 @@ namespace NekoRay {
695699
inboundObj["type"] = "mixed";
696700
inboundObj["listen"] = dataStore->inbound_address;
697701
inboundObj["listen_port"] = dataStore->inbound_socks_port;
698-
if (dataStore->sniffing_mode != SniffingMode::DISABLE) {
702+
if (dataStore->routing->sniffing_mode != SniffingMode::DISABLE) {
699703
inboundObj["sniff"] = true;
700-
inboundObj["sniff_override_destination"] = dataStore->sniffing_mode == SniffingMode::FOR_DESTINATION;
704+
inboundObj["sniff_override_destination"] = dataStore->routing->sniffing_mode == SniffingMode::FOR_DESTINATION;
701705
}
702706
if (dataStore->inbound_auth->NeedAuth()) {
703707
inboundObj["users"] = QJsonArray{
@@ -707,7 +711,7 @@ namespace NekoRay {
707711
},
708712
};
709713
}
710-
inboundObj["domain_strategy"] = dataStore->domain_strategy;
714+
inboundObj["domain_strategy"] = dataStore->routing->domain_strategy;
711715
status->inbounds += inboundObj;
712716
}
713717

@@ -724,11 +728,11 @@ namespace NekoRay {
724728
inboundObj["strict_route"] = dataStore->vpn_strict_route;
725729
inboundObj["inet4_address"] = "172.19.0.1/28";
726730
if (dataStore->vpn_ipv6) inboundObj["inet4_address"] = "fdfe:dcba:9876::1/126";
727-
if (dataStore->sniffing_mode != SniffingMode::DISABLE) {
731+
if (dataStore->routing->sniffing_mode != SniffingMode::DISABLE) {
728732
inboundObj["sniff"] = true;
729-
inboundObj["sniff_override_destination"] = dataStore->sniffing_mode == SniffingMode::FOR_DESTINATION;
733+
inboundObj["sniff_override_destination"] = dataStore->routing->sniffing_mode == SniffingMode::FOR_DESTINATION;
730734
}
731-
inboundObj["domain_strategy"] = dataStore->domain_strategy;
735+
inboundObj["domain_strategy"] = dataStore->routing->domain_strategy;
732736
status->inbounds += inboundObj;
733737
}
734738

@@ -831,19 +835,19 @@ namespace NekoRay {
831835
dnsServers += QJsonObject{
832836
{"tag", "dns-remote"},
833837
{"address_resolver", "dns-local"},
834-
{"strategy", dataStore->remote_dns_strategy},
835-
{"address", dataStore->remote_dns},
838+
{"strategy", dataStore->routing->remote_dns_strategy},
839+
{"address", dataStore->routing->remote_dns},
836840
{"detour", tagProxy},
837841
};
838842

839843
// Direct
840-
auto directDNSAddress = dataStore->direct_dns;
844+
auto directDNSAddress = dataStore->routing->direct_dns;
841845
if (directDNSAddress == "localhost") directDNSAddress = BOX_UNDERLYING_DNS_EXPORT;
842846
if (!status->forTest)
843847
dnsServers += QJsonObject{
844848
{"tag", "dns-direct"},
845849
{"address_resolver", "dns-local"},
846-
{"strategy", dataStore->direct_dns_strategy},
850+
{"strategy", dataStore->routing->direct_dns_strategy},
847851
{"address", directDNSAddress.replace("+local://", "://")},
848852
{"detour", "direct"},
849853
};
@@ -868,6 +872,10 @@ namespace NekoRay {
868872

869873
dns["servers"] = dnsServers;
870874
dns["rules"] = dnsRules;
875+
876+
if (dataStore->routing->use_dns_object) {
877+
dns = QString2QJsonObject(dataStore->routing->dns_object);
878+
}
871879
status->result->coreConfig.insert("dns", dns);
872880

873881
// Routing

main/NekoRay.cpp

+15-10
Original file line numberDiff line numberDiff line change
@@ -32,17 +32,9 @@ namespace NekoRay {
3232
_add(new configItem("inbound_socks_port", &inbound_socks_port, itemType::integer));
3333
_add(new configItem("inbound_http_port", &inbound_http_port, itemType::integer));
3434
_add(new configItem("log_level", &log_level, itemType::string));
35-
_add(new configItem("remote_dns", &remote_dns, itemType::string));
36-
_add(new configItem("remote_dns_strategy", &remote_dns_strategy, itemType::string));
37-
_add(new configItem("direct_dns", &direct_dns, itemType::string));
38-
_add(new configItem("direct_dns_strategy", &direct_dns_strategy, itemType::string));
39-
_add(new configItem("domain_strategy", &domain_strategy, itemType::string));
40-
_add(new configItem("outbound_domain_strategy", &outbound_domain_strategy, itemType::string));
41-
_add(new configItem("sniffing_mode", &sniffing_mode, itemType::integer));
4235
_add(new configItem("mux_protocol", &mux_protocol, itemType::string));
4336
_add(new configItem("mux_concurrency", &mux_concurrency, itemType::integer));
4437
_add(new configItem("traffic_loop_interval", &traffic_loop_interval, itemType::integer));
45-
_add(new configItem("dns_routing", &dns_routing, itemType::boolean));
4638
_add(new configItem("test_concurrent", &test_concurrent, itemType::integer));
4739
_add(new configItem("theme", &theme, itemType::string));
4840
_add(new configItem("custom_inbound", &custom_inbound, itemType::string));
@@ -127,16 +119,29 @@ namespace NekoRay {
127119
_add(new configItem("block_domain", &this->block_domain, itemType::string));
128120
_add(new configItem("def_outbound", &this->def_outbound, itemType::string));
129121
_add(new configItem("custom", &this->custom, itemType::string));
122+
//
123+
_add(new configItem("remote_dns", &this->remote_dns, itemType::string));
124+
_add(new configItem("remote_dns_strategy", &this->remote_dns_strategy, itemType::string));
125+
_add(new configItem("direct_dns", &this->direct_dns, itemType::string));
126+
_add(new configItem("direct_dns_strategy", &this->direct_dns_strategy, itemType::string));
127+
_add(new configItem("domain_strategy", &this->domain_strategy, itemType::string));
128+
_add(new configItem("outbound_domain_strategy", &this->outbound_domain_strategy, itemType::string));
129+
_add(new configItem("dns_routing", &this->dns_routing, itemType::boolean));
130+
_add(new configItem("sniffing_mode", &this->sniffing_mode, itemType::integer));
131+
_add(new configItem("use_dns_object", &this->use_dns_object, itemType::boolean));
132+
_add(new configItem("dns_object", &this->dns_object, itemType::string));
130133
}
131134

132135
QString Routing::DisplayRouting() const {
133-
return QString("[Proxy] %1\n[Proxy] %2\n[Direct] %3\n[Direct] %4\n[Block] %5\n[Block] %6")
136+
return QString("[Proxy] %1\n[Proxy] %2\n[Direct] %3\n[Direct] %4\n[Block] %5\n[Block] %6\n[Default Outbound] %7\n[DNS] %8")
134137
.arg(SplitLinesSkipSharp(proxy_domain).join(","))
135138
.arg(SplitLinesSkipSharp(proxy_ip).join(","))
136139
.arg(SplitLinesSkipSharp(direct_domain).join(","))
137140
.arg(SplitLinesSkipSharp(direct_ip).join(","))
138141
.arg(SplitLinesSkipSharp(block_domain).join(","))
139-
.arg(SplitLinesSkipSharp(block_ip).join(","));
142+
.arg(SplitLinesSkipSharp(block_ip).join(","))
143+
.arg(def_outbound)
144+
.arg(use_dns_object ? "DNS Object" : "Simple DNS");
140145
}
141146

142147
QStringList Routing::List() {

main/NekoRay_DataStore.hpp

+15-11
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,20 @@ namespace NekoRay {
1313
QString def_outbound = "proxy";
1414
QString custom = "{\"rules\": []}";
1515

16+
// DNS
17+
QString remote_dns = "https://8.8.8.8/dns-query";
18+
QString remote_dns_strategy = "";
19+
QString direct_dns = "localhost";
20+
QString direct_dns_strategy = "";
21+
bool dns_routing = true;
22+
bool use_dns_object = false;
23+
QString dns_object = "";
24+
25+
// Misc
26+
QString domain_strategy = "AsIs";
27+
QString outbound_domain_strategy = "AsIs";
28+
int sniffing_mode = SniffingMode::FOR_ROUTING;
29+
1630
explicit Routing(int preset = 0);
1731

1832
[[nodiscard]] QString DisplayRouting() const;
@@ -118,22 +132,12 @@ namespace NekoRay {
118132
InboundAuthorization *inbound_auth = new InboundAuthorization;
119133
QString custom_inbound = "{\"inbounds\": []}";
120134

121-
// DNS
122-
QString remote_dns = "https://8.8.8.8/dns-query";
123-
QString remote_dns_strategy = "";
124-
QString direct_dns = "localhost";
125-
QString direct_dns_strategy = "";
126-
bool dns_routing = true;
127-
128135
// Routing
129-
bool fake_dns = false;
130-
QString domain_strategy = "AsIs";
131-
QString outbound_domain_strategy = "AsIs";
132-
int sniffing_mode = SniffingMode::FOR_ROUTING;
133136
QString custom_route_global = "{\"rules\": []}";
134137
QString active_routing = "Default";
135138

136139
// VPN
140+
bool fake_dns = false;
137141
bool vpn_internal_tun = true;
138142
int vpn_implementation = 0;
139143
int vpn_mtu = 9000;

translations/fa_IR.ts

+50-14
Original file line numberDiff line numberDiff line change
@@ -527,14 +527,6 @@ These settings can be changed later.</source>
527527
<source>Preset</source>
528528
<translation>پیشفرض</translation>
529529
</message>
530-
<message>
531-
<source>Custom</source>
532-
<translation>سفارشی</translation>
533-
</message>
534-
<message>
535-
<source>Custom (global)</source>
536-
<translation type="unfinished"></translation>
537-
</message>
538530
<message>
539531
<source>Mange route set</source>
540532
<translation type="unfinished"></translation>
@@ -580,27 +572,71 @@ These settings can be changed later.</source>
580572
<translation type="unfinished"></translation>
581573
</message>
582574
<message>
583-
<source>Remote</source>
575+
<source>Domain Strategy</source>
584576
<translation type="unfinished"></translation>
585577
</message>
586578
<message>
587-
<source>DNS Query Strategy</source>
579+
<source>Server Address Strategy</source>
588580
<translation type="unfinished"></translation>
589581
</message>
590582
<message>
591-
<source>Domain Strategy</source>
583+
<source>Sniff result for routing</source>
592584
<translation type="unfinished"></translation>
593585
</message>
594586
<message>
595-
<source>Server Address Strategy</source>
587+
<source>Sniff result for destination</source>
596588
<translation type="unfinished"></translation>
597589
</message>
598590
<message>
599-
<source>Sniff result for routing</source>
591+
<source>Common</source>
592+
<translation type="unfinished">متداول</translation>
593+
</message>
594+
<message>
595+
<source>DNS</source>
600596
<translation type="unfinished"></translation>
601597
</message>
602598
<message>
603-
<source>Sniff result for destination</source>
599+
<source>Simple DNS Settings</source>
600+
<translation type="unfinished"></translation>
601+
</message>
602+
<message>
603+
<source>Use DNS Object</source>
604+
<translation type="unfinished"></translation>
605+
</message>
606+
<message>
607+
<source>DNS Object Settings</source>
608+
<translation type="unfinished"></translation>
609+
</message>
610+
<message>
611+
<source>Simple Route</source>
612+
<translation type="unfinished"></translation>
613+
</message>
614+
<message>
615+
<source>Custom Route</source>
616+
<translation type="unfinished"></translation>
617+
</message>
618+
<message>
619+
<source>Custom Route (global)</source>
620+
<translation type="unfinished"></translation>
621+
</message>
622+
<message>
623+
<source>Note: Other settings are independent for each route set.</source>
624+
<translation type="unfinished"></translation>
625+
</message>
626+
<message>
627+
<source>Route sets</source>
628+
<translation type="unfinished"></translation>
629+
</message>
630+
<message>
631+
<source>Query Strategy</source>
632+
<translation type="unfinished"></translation>
633+
</message>
634+
<message>
635+
<source>Document</source>
636+
<translation type="unfinished">اسناد</translation>
637+
</message>
638+
<message>
639+
<source>Format</source>
604640
<translation type="unfinished"></translation>
605641
</message>
606642
</context>

0 commit comments

Comments
 (0)