Commit Graph

2340 Commits

Author SHA1 Message Date
世界
81f5cd2200 dns: unify match_response gate error for all Response Match Fields
ip_cidr and ip_is_private are Response Match Fields in new mode,
same as response_rcode/answer/ns/extra. Use a single consistent
error message when any of them appear without match_response.
2026-04-07 00:54:57 +08:00
世界
4ab8ddbb86 dns: simplify evaluate action transport resolution
Remove resolveDNSRoute indirection from evaluate action since
evaluate+fakeip is already rejected at build time, making the
dnsRouteStatusSkipped branch dead code. Inline transport lookup
directly instead.

Also remove the context-cancellation early return that was not
part of the design spec, and fix test naming to avoid newMode.
2026-04-07 00:54:56 +08:00
世界
bd545e2ccc dns: ignore split lookup errors on partial success 2026-04-07 00:54:56 +08:00
世界
afe6137cc9 dns: allow rule-set updates that keep new mode 2026-04-07 00:54:56 +08:00
世界
8289dc481e dns: hard-fail lookup split rule misuse 2026-04-07 00:54:55 +08:00
世界
2f13c4b17b docs: fix broken anchors, change block ordering, and fakeip field name 2026-04-07 00:54:55 +08:00
世界
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