Commit Graph
377 Commits
Author SHA1 Message Date
世界 e4c8b49eaf Improve network reset 2026-08-30 17:41:43 +08:00
世界 5d424ea2ac refactor: Async DNS 2026-08-30 17:41:43 +08:00
世界 90d75b9673 Refactor UDP DNS hijack 2026-08-30 17:41:43 +08:00
世界 719676519d Fix bind control for auto redirect 2026-08-30 17:41:43 +08:00
世界 668ced35f8 Refactor endpoint listen 2026-08-30 17:41:43 +08:00
世界 1f7d571017 refactor: New tun udpnat 2026-08-30 17:41:43 +08:00
世界 9dfe842794 Add multiple tags support to rule-sets 2026-08-30 17:41:43 +08:00
世界 0a4e4c8061 boxdd: Add insecure mode 2026-08-30 17:41:43 +08:00
世界 4f330d73ec platform: Add http proxy support for Windows 2026-08-30 17:41:42 +08:00
世界 b35a747dab Fix process and neighbor rules not matched in pre-match 2026-08-30 17:41:42 +08:00
世界 97bbf2a9a4 Improve bridge 2026-08-30 17:41:42 +08:00
世界 1e2f1d04da Add bridge outbound 2026-08-30 17:41:42 +08:00
世界 fa479edc12 Imrpove flow tracking & sniff action 2026-08-30 17:41:42 +08:00
世界 5f2054bf90 Add L3 forwarding support 2026-08-30 17:41:42 +08:00
世界 d8cd38d31b Improve remote rule-set update 2026-08-30 17:41:41 +08:00
世界 704853b3be Fix lint errors 2026-08-30 17:41:40 +08:00
世界 ae0c62aae8 Fix reset network 2026-08-30 17:41:40 +08:00
macronutand世界 d9290bc940 Add more spoof method
Signed-off-by: macronut <4027187+macronut@users.noreply.github.com>
2026-08-30 17:41:40 +08:00
世界 3c016c978b Allow customizing TUN DNS mode and hijack interface DNS by default 2026-08-30 17:41:40 +08:00
世界 14b8f1bd4d dns: Add preferred_by rule item 2026-08-30 17:41:40 +08:00
世界 f8a623e0c6 dns: Add neighbor-based hostname resolution to local server 2026-08-30 17:41:40 +08:00
世界 87c2b89120 dns: Add timeout configuration 2026-08-30 17:41:40 +08:00
世界 2bbff23640 Improve UDP batch support 2026-08-30 17:41:40 +08:00
世界 a04daaff75 Reject pure-IP rule-set references without match_response
DNS rules referencing rule-sets that contain only ip_cidr predicates
silently stopped matching when legacy DNS mode was disabled, because the
IP-CIDR branch cannot match against an in-flight DNS query. The existing
validation intentionally let every rule_set through on the premise that
mixed sets still work via their non-IP branches, which is only true when
such a branch exists. Track whether a rule-set carries any non-IP-CIDR
predicate and reject pure-IP references the same way bare ip_cidr fields
are already rejected.
2026-08-30 17:41:39 +08:00
世界 8e8d1dcca8 Fix legacy rule-set download_detour blocked by empty direct check 2026-08-30 17:41:39 +08:00
世界 2515811356 Refactor: HTTP clients, unified HTTP2/QUIC options, Apple engines 2026-08-30 17:41:39 +08:00
世界 c322ad5d33 Add optimistic DNS cache 2026-08-30 17:41:39 +08:00
世界 bc6f9703e3 Add package_name_regex route, DNS and headless rule item 2026-08-30 17:41:39 +08:00
世界 d72c1d9be7 Un-deprecate ip_accept_any DNS rule item 2026-08-30 17:41:39 +08:00
nekohasekai cd77e78f0a Add evaluate DNS rule action and related rule items 2026-08-30 17:41:39 +08:00
世界 1cde511d6d Add macOS support for MAC and hostname rule items 2026-08-30 17:41:38 +08:00
世界 39592518b0 Add Android support for MAC and hostname rule items 2026-08-30 17:41:38 +08:00
世界 57c62b5330 Add MAC and hostname rule items 2026-08-30 17:41:38 +08:00
世界 4444f297c2 Fix address filter matching for inverted DNS rules
Inverted rules whose address filter conditions come from rule sets or
logical rules were rejected during pre-lookup matching, so the lookup was
never sent and the rules never matched; for plain ip rule sets this was a
regression from the rule-set invert fix in 1.12.22. Pre-lookup matching
now tracks whether the result depends on deferred address filter
conditions and defers such rules to the response phase, while results
already determined by evaluated conditions are still decided during
pre-lookup.
2026-08-22 16:14:54 +08:00
Gavin LuoandGitHub 7ac8e5c0ab Fix reset network 2026-08-10 23:10:24 +08:00
世界 890544e88b Fix rule-set file descriptor leak 2026-07-27 15:51:12 +08:00
世界 7b9439f761 route: Refetch rule-set when cache restore fails 2026-07-27 15:51:12 +08:00
世界 4e1af0600b Fix UDP sniff fragment timeout treated as fatal error 2026-06-20 19:45:36 +08:00
世界 761b7f4e12 Handle TUN loopback in direct outbound 2026-06-03 12:56:36 +08:00
世界 5e7fd7ad78 Fix lint errors 2026-05-13 23:39:27 +08:00
世界 6475a5e036 Skip kickWriteHandshake for server first protocols 2026-05-13 16:28:49 +08:00
世界 f102ef1d94 Fix process search skipped for Android again 2026-04-23 05:52:22 +08:00
世界 71f6a2ab4e Fix process search skipped for TUN 2026-04-21 15:45:05 +08:00
世界 e4bc459975 Skip process search for non-local source addresses 2026-04-20 09:49:39 +08:00
世界 3124cdd661 Fix windows bssid matching 2026-04-20 09:49:39 +08:00
世界 6381de7bab route: Fix query_type never matching in rule_set headless rules 2026-03-26 13:26:18 +08:00
世界 b0c6762bc1 route: merge rule_set branches into outer rules
Treat rule_set items as merged branches instead of standalone boolean
sub-items.

Evaluate each branch inside a referenced rule-set as if it were merged
into the outer rule and keep OR semantics between branches. This lets
outer grouped fields satisfy matching groups inside a branch without
introducing a standalone outer fallback or cross-branch state union.

Keep inherited grouped state outside inverted default and logical
branches. Negated rule-set branches now evaluate !(...) against their
own conditions and only reapply the outer grouped match after negation
succeeds, so configs like outer-group && !inner-condition continue to
work.

Add regression tests for same-group merged matches, cross-group and
extra-AND failures, DNS merged-branch behaviour, and inverted merged
branches. Update the route and DNS rule docs to clarify that rule-set
branches merge into the outer rule while keeping OR semantics between
branches.
2026-03-25 14:00:29 +08:00
世界 d454aa0fdf route: formalize nested rule_set group-state semantics
Before 795d1c289, nested rule-set evaluation reused the parent rule
match cache. In practice, this meant these fields leaked across nested
evaluation:

- SourceAddressMatch
- SourcePortMatch
- DestinationAddressMatch
- DestinationPortMatch
- DidMatch

That leak had two opposite effects.

First, it made included rule-sets partially behave like the docs'
"merged" semantics. For example, if an outer route rule had:

  rule_set = ["geosite-additional-!cn"]
  ip_cidr  = 104.26.10.0/24

and the inline rule-set matched `domain_suffix = speedtest.net`, the
inner match could set `DestinationAddressMatch = true` and the outer
rule would then pass its destination-address group check. This is why
some `rule_set + ip_cidr` combinations used to work.

But the same leak also polluted sibling rules and sibling rule-sets.
A branch could partially match one group, then fail later, and still
leave that group cache set for the next branch. This broke cases such
as gh-3485: with `rule_set = [test1, test2]`, `test1` could touch
destination-address cache before an AdGuard `@@` exclusion made the
whole branch fail, and `test2` would then run against dirty state.

795d1c289 fixed that by cloning metadata for nested rule-set/rule
evaluation and resetting the rule match cache for each branch. That
stopped sibling pollution, but it also removed the only mechanism by
which a successful nested branch could affect the parent rule's grouped
matching state.

As a result, nested rule-sets became pure boolean sub-items against the
outer rule. The previous example stopped working: the inner
`domain_suffix = speedtest.net` still matched, but the outer rule no
longer observed any destination-address-group success, so it fell
through to `final`.

This change makes the semantics explicit instead of relying on cache
side effects:

- `rule_set: ["a", "b"]` is OR
- rules inside one rule-set are OR
- each nested branch is evaluated in isolation
- failed branches contribute no grouped match state
- a successful branch contributes its grouped match state back to the
  parent rule
- grouped state from different rule-sets must not be combined together
  to satisfy one outer rule

In other words, rule-sets now behave as "OR branches whose successful
group matches merge into the outer rule", which matches the documented
intent without reintroducing cross-branch cache leakage.
2026-03-24 15:03:43 +08:00
世界 9ac1e2ff32 Match package_name in process_path rule on Android 2026-03-23 18:57:35 +08:00
世界 0045103d14 Fix package_name shared uid matching 2026-03-23 18:57:35 +08:00