diff --git a/adapter/outbound/hysteria.go b/adapter/outbound/hysteria.go index adc904a2..9446cf93 100644 --- a/adapter/outbound/hysteria.go +++ b/adapter/outbound/hysteria.go @@ -72,6 +72,9 @@ func (h *Hysteria) ListenPacketContext(ctx context.Context, metadata *C.Metadata hyDialer: func() (net.PacketConn, error) { return dialer.ListenPacket(ctx, "udp", "", h.Base.DialOptions(opts...)...) }, + remoteAddr: func(addr string) (net.Addr, error) { + return resolveUDPAddrWithPrefer("udp", addr, h.prefer) + }, } udpConn, err := h.client.DialUDP(&hdc) if err != nil { diff --git a/adapter/outbound/util.go b/adapter/outbound/util.go index 0b859630..d5219131 100644 --- a/adapter/outbound/util.go +++ b/adapter/outbound/util.go @@ -104,7 +104,7 @@ func resolveUDPAddrWithPrefer(network, address string, prefer C.DNSPrefer) (*net ip = fallback } default: - // C.IPv4Prefer, C.DualStack and other + // C.IPv4Prefer, C.DualStack and other var ips []netip.Addr ips, err = resolver.ResolveAllIPProxyServerHost(host) var fallback netip.Addr @@ -119,7 +119,10 @@ func resolveUDPAddrWithPrefer(network, address string, prefer C.DNSPrefer) (*net } } } - ip = fallback + + if !ip.IsValid() && fallback.IsValid() { + ip = fallback + } } } diff --git a/docs/config.yaml b/docs/config.yaml index 9240bf96..53ed7416 100644 --- a/docs/config.yaml +++ b/docs/config.yaml @@ -169,7 +169,7 @@ proxies: # ipv4-prefer:优先使用 IPv4 对于 TCP 会进行双栈解析,并发链接但是优先使用 IPv4 链接, # UDP 则为双栈解析,获取结果中的第一个 IPv4 # ipv6-prefer 同 ipv4-prefer - # 现有协议都支持此参数 + # 现有协议都支持此参数,TCP 效果仅在开启 tcp-concurrent 生效 - name: "ss2" type: ss server: server