Commit Graph

2334 Commits

Author SHA1 Message Date
世界
bdfb344955 dns: validate rule-set updates before commit 2026-04-07 00:54:54 +08:00
世界
ca43d71152 Standardize legacy DNS feature terminology in docs and error messages
Use concrete feature names per design spec: "Legacy Address Filter
Fields", "Legacy `strategy` DNS rule action option", "Legacy
`ip_accept_any` DNS rule item", "Legacy `rule_set_ip_cidr_accept_empty`
DNS rule item" for deprecated features, and "Response Match Fields" for
the new response matching section.
2026-04-07 00:54:54 +08:00
世界
4bbff319bf Unify evaluate-produced DNS message terminology to "evaluated response" 2026-04-07 00:54:54 +08:00
世界
2779bca0d9 Add DNS respond rule action 2026-04-07 00:54:53 +08:00
世界
65967a51dc dns: reject evaluate fakeip servers 2026-04-07 00:54:53 +08:00
世界
5e97d5e296 Fix evaluate response-match validation 2026-04-07 00:54:53 +08:00
世界
eb4c550da2 Replace internal terminology in docs and error messages
Remove all user-facing references to the internal `legacyDNSMode` variable
name. Error messages now reuse the deprecated.Note.MessageWithLink() method
to provide consistent deprecation text with migration URLs. Other internal
jargon ("consume response state", "response_*") is replaced with
user-friendly descriptions.

Add two migration guide entries under 1.14.0: one for strategy → rule items,
one for address filter fields → evaluate with match_response.
2026-04-07 00:54:52 +08:00
世界
c5c9d3ec05 Simplify DNS router internals
- Replace dnsRuleModeRequirements 4-tuple return with dnsRuleModeFlags struct
- Eliminate redundant hasDNSRuleActionStrategy tree walk by reusing mode flags from buildRules
- Remove single-field lookupWithRulesResponse wrapper
- Accept fields directly in resolveDNSRoute instead of *RuleActionDNSRoute
- Extract rulesAndMode() helper to deduplicate snapshot unpacking
- Trim verbose RuleSetMetadata comment
2026-04-07 00:54:52 +08:00
世界
30bd87eb53 test: remove internal-state assertions that test through unexported fields 2026-04-07 00:54:52 +08:00
世界
aaa11fbdf1 test: remove low-value DNS WHAT tests 2026-04-07 00:54:51 +08:00
世界
1362e5d4fc Fix minor robustness issues found during code review
- dns/router: add r.closing guard in registerRuleSetCallbacks to
  prevent callback leak when Close() races with Start() in daemon path
- adapter/inbound: validate addr.IsValid() in DNSResponseAddresses
  before appending to guard against zero-RDATA DNS records
- adapter/rule: add evaluate to non-final actions in IsFinalAction
2026-04-07 00:54:51 +08:00
世界
3036955776 Simplify nested action validation and fix FallbackNetworkType bug
- Rename nested_action.go to rule_nested_action.go for naming consistency
- Export error message constants from option package to deduplicate
- Fix RuleActionRouteOptions.Descriptions using wrong field for fallback-network-type
2026-04-07 00:54:50 +08:00
世界
9e95438463 Format code 2026-04-07 00:54:50 +08:00
世界
16c4fad99e option: add round-trip test for DNSRuleAction with evaluate action 2026-04-07 00:54:50 +08:00
世界
bb546bd375 dns: add evaluate integration tests for response_rcode, response_ns, response_extra 2026-04-07 00:54:49 +08:00
世界
e0259ddea0 dns: remove redundant DNSResponse assignment in addressLimitResponseCheck
MatchAddressLimit internally copies metadata and sets DNSResponse,
making the prior assignment in the closure unnecessary.
2026-04-07 00:54:49 +08:00
世界
c64f50fdcb dns: remove redundant queryOptions variable 2026-04-07 00:54:49 +08:00
世界
791abb0893 dns: remove dead lookupStrategyAllowsQueryType helper 2026-04-07 00:54:48 +08:00
世界
b0f8ba847d dns: remove dead lookup strategy guard in lookupWithRulesType 2026-04-07 00:54:48 +08:00
世界
73c7d7ec82 adapter: remove unused DestinationAddressesForMatch 2026-04-07 00:54:48 +08:00
世界
5e18b7eb48 dns: fix variable shadowing in matchDNSHeadlessRuleStatesForMatch 2026-04-07 00:54:47 +08:00
世界
e661af6b98 dns: fix err shadowing in buildRules
Reuse the outer err variable in the rule-construction and rule-startup
loops instead of redeclaring it with :=, and declare dnsRule separately.
2026-04-07 00:54:47 +08:00
世界
df75088039 dns: return immediately on context cancellation in evaluate exchange 2026-04-07 00:54:46 +08:00
世界
1bd9756c48 dns: reject method reply is not supported for DNS rules
Add config-time validation in NewDNSRule that rejects
RejectMethodReply for both default and logical DNS rules,
matching the existing TCP/UDP validation in route/route.go.
2026-04-07 00:54:46 +08:00
世界
49cecb6aab dns: improve test coverage and cleanup
- Add t.Cleanup(router.Close) in newTestRouter for automatic cleanup
- Remove unnecessary testCase loop variable capture (Go 1.22+)
- Add tests for reject drop action, route_options effect, and
  chained evaluate response overwrite
2026-04-07 00:54:46 +08:00
世界
a2b2e60082 dns: fix test style issues in repro_test.go
- Rename addrs to addresses per naming conventions
- Replace errors.New with E.New per error-handling rules
2026-04-07 00:54:45 +08:00
世界
746b75f34f fix: add missing EnvName, document Strategy invariant, improve rcode display
- Add EnvName to four new deprecation constants so users can suppress
  warnings via ENABLE_DEPRECATED_* environment variables
- Add comment explaining why applyDNSRouteOptions skips Strategy
- Use dns.RcodeToString in DNSResponseRCodeItem.String() for readability
- Remove redundant Fqdn(FqdnToDomain(domain)) round-trip
2026-04-07 00:54:45 +08:00
世界
b4ee7185ea docs: fix strategy deprecation format, explain legacyDNSMode, unify CN/EN order
- Use standard !!! failure block for strategy deprecation notice
- Add Legacy DNS Mode section explaining automatic mode detection
- Reorder ip_accept_any/rule_set_ip_cidr_accept_empty in Chinese docs
  to match English
2026-04-07 00:54:45 +08:00
世界
ea18a0d490 dns: populate reverse mapping for legacy predefined responses
The legacy path returned predefined responses early, bypassing the
reverse mapping cache. Use goto to reach the shared post-exchange
block so both legacy and new paths record predefined A/AAAA answers.
2026-04-07 00:54:45 +08:00
世界
ab99607614 route/rule: remove dead IgnoreDestinationIPCIDRMatch field
The field was never set to true after the legacy pre-match refactor
in 3549c02b8. Remove the declaration, guard check, and redundant
false assignments.
2026-04-07 00:54:44 +08:00
世界
63d9af04ac dns: use refcounted snapshot to narrow rule lock scope
Exchange and Lookup held rulesAccess.RLock across all DNS network I/O,
blocking rebuildRules from swapping in new rules until every in-flight
query finished. Replace the RWMutex with an atomic pointer to a
refcounted rulesSnapshot so queries only hold a snapshot reference
during execution, allowing concurrent rule rebuilds.
2026-04-07 00:54:44 +08:00
世界
663b70d860 dns: serialize rebuilds and keep last good rules on failure 2026-04-07 00:54:44 +08:00
世界
9127a29164 docs: fix grammar errors and typos 2026-04-07 00:54:43 +08:00
世界
d710461ba0 Suppress SA1019 lint warnings for intentional deprecated field usage 2026-04-07 00:54:43 +08:00
世界
18af3d61fb docs: add evaluate action, response matching fields, and deprecation notices 2026-04-07 00:54:42 +08:00
世界
f5b58215fc Use typed SVCB hint structs instead of string parsing 2026-04-07 00:54:42 +08:00
世界
6821d44f8b option: reject nested rule actions 2026-04-07 00:54:42 +08:00
世界
1495f24e60 dns: make rule strategy legacy-only 2026-04-07 00:54:42 +08:00
世界
8d44f52233 Make DNS match_response fail as a normal condition 2026-04-07 00:54:42 +08:00
世界
7ae1eaa403 Fix DNS rule-set ref handling 2026-04-07 00:54:42 +08:00
世界
7257fa590e Fix legacy DNS rule_set accept_empty matching 2026-04-07 00:54:42 +08:00
世界
c52ae06a4a dns: restore lookup reject semantics 2026-04-07 00:54:41 +08:00
世界
7f64980ea3 Fix DNS record parser file inclusion and rule match log index
Remove SetIncludeAllowed(true) from the DNS record zone parser.
The $INCLUDE directive allows opening arbitrary files via os.Open,
which is unnecessary and dangerous when parsing a single record string
from configuration (especially remote profiles).

Fix displayRuleIndex arithmetic in dns/router.go that computed
2*index+1 instead of the correct 0-based index. This was a
reintroduction of a bug previously fixed in be8ee370a. Both
matchDNS and logRuleMatch now use the index directly, matching
the pattern in route/route.go.
2026-04-07 00:54:41 +08:00
世界
4ea33a00b1 Fix DNS record parsing and shutdown race 2026-04-07 00:54:41 +08:00
世界
db7655e7d3 dns: restore init validation and fix rule-set query type 2026-04-07 00:54:41 +08:00
世界
60c9f02fb4 dns: make rule path selection rule-set aware 2026-04-07 00:54:41 +08:00
世界
58f9933f14 dns: complete lookup rule execution in new mode 2026-04-07 00:54:41 +08:00
世界
3803c0f8de Fix legacy DNS negation expansion 2026-04-07 00:54:41 +08:00
世界
a5c3201140 dns: isolate legacy pre-match semantics 2026-04-07 00:54:40 +08:00
世界
0893488073 dns: preserve legacy address-filter pre-match semantics
Legacy DNS address-filter mode still accepts destination-side IP
predicates with a deprecation warning, but the recent evaluate/
match_response refactor started evaluating those predicates during
pre-response Match(). That broke rules whose transport selection must
be deferred until MatchAddressLimit() can inspect the upstream reply.

Restore the old defer behavior by reintroducing an internal
IgnoreDestinationIPCIDRMatch flag on InboundContext and using it only
for legacy pre-response DNS matching. Default and logical DNS rules now
carry the legacy mode bit, set the ignore flag on metadata copies while
performing pre-response Match(), and explicitly clear it again for
match_response and MatchAddressLimit() so response-phase matching still
checks the returned addresses.

Add regression coverage for direct legacy destination-IP rules,
rule_set-backed CIDR rules, logical wrappers, and the legacy Lookup
router path, including fallback after a rejected response. This keeps
legacy configs working without changing new-mode evaluate semantics.

Tests: go test ./route/rule ./dns
Tests: make
2026-04-07 00:54:40 +08:00