Skip to content

Conversation

@BeautyyuYanli
Copy link

@BeautyyuYanli BeautyyuYanli commented Nov 7, 2025

This PR introduces a new selection strategy for URLTest outbound groups. The changes add support for two selection modes (min_latency and first_available).

Currently, the URLTest group select the min latency outbound. In my cases, the quailty of outbounds is not only related to the latency, but also other aspects. The outbounds' priority is alreay sorted when defined them in the config file as an array, so the task is to check their health periodically and choose the first available one.

What changes in this PR

  • Added a new select_mode field to URLTestOutboundOptions in option/group.go, along with the URLTestMode type and validation logic.
  • Refactored the selection logic in protocol/group/urltest.go to support both min_latency and first_available strategies.
  • Updated docs/configuration/outbound/urltest.md
  • Propagated the select_mode option through constructors and struct fields.
  • Simplified import aliasing in protocol/group/urltest.go for clarity.

Zephyruso and others added 30 commits November 4, 2025 21:31
We mistakenly believed that `libresolv`'s `search` function worked correctly in NetworkExtension, but it seems only `getaddrinfo` does.

This commit changes the behavior of the `local` DNS server in NetworkExtension to prefer DHCP, falling back to `getaddrinfo` if DHCP servers are unavailable.

It's worth noting that `prefer_go` does not disable DHCP since it respects Dial Fields, but `getaddrinfo` does the opposite. The new behavior only applies to NetworkExtension, not to all scenarios (primarily command-line binaries) as it did previously.

In addition, this commit also improves the DHCP DNS server to use the same robust query logic as `local`.
We do not have the `com.apple.developer.networking.multicast` entitlement and are unable to obtain it for non-technical reasons.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants