diff --git a/adapter/outbound/wireguard.go b/adapter/outbound/wireguard.go index 3a21c938b..fe1f69fae 100644 --- a/adapter/outbound/wireguard.go +++ b/adapter/outbound/wireguard.go @@ -146,7 +146,12 @@ func NewWireGuard(option WireGuardOption) (*WireGuard, error) { return address.AddrPort(), nil } udpAddr, err := resolveUDPAddrWithPrefer(ctx, "udp", address.String(), outbound.prefer) - return udpAddr.AddrPort(), err + if err != nil { + return netip.AddrPort{}, err + } + // net.ResolveUDPAddr maybe return 4in6 address, so unmap at here + addrPort := udpAddr.AddrPort() + return netip.AddrPortFrom(addrPort.Addr().Unmap(), addrPort.Port()), nil } var reserved [3]uint8 diff --git a/dns/resolver.go b/dns/resolver.go index 8ea68ed70..08de69adf 100644 --- a/dns/resolver.go +++ b/dns/resolver.go @@ -324,7 +324,7 @@ func (r *Resolver) ipExchange(ctx context.Context, m *D.Msg) (msg *D.Msg, err er func (r *Resolver) lookupIP(ctx context.Context, host string, dnsType uint16) (ips []netip.Addr, err error) { ip, err := netip.ParseAddr(host) if err == nil { - isIPv4 := ip.Is4() + isIPv4 := ip.Is4() || ip.Is4In6() if dnsType == D.TypeAAAA && !isIPv4 { return []netip.Addr{ip}, nil } else if dnsType == D.TypeA && isIPv4 {