mirror of
https://github.com/cedar2025/hysteria.git
synced 2025-06-28 07:19:58 +00:00
fix: use bootstrap address in routedns resolvers to avoid loopback (closes #408)
This commit is contained in:
parent
a10abd473f
commit
a31f826a1e
@ -3,6 +3,7 @@ package main
|
|||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
"net"
|
"net"
|
||||||
|
"net/url"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/HyNetwork/hysteria/pkg/utils"
|
"github.com/HyNetwork/hysteria/pkg/utils"
|
||||||
@ -49,22 +50,41 @@ func setResolver(dns string) error {
|
|||||||
r = client
|
r = client
|
||||||
} else if strings.HasPrefix(dns, "https://") {
|
} else if strings.HasPrefix(dns, "https://") {
|
||||||
// DoH resolver
|
// DoH resolver
|
||||||
client, err := rdns.NewDoHClient("doh", dns, rdns.DoHClientOptions{})
|
if dohURL, err := url.Parse(dns); err != nil {
|
||||||
if err != nil {
|
|
||||||
return err
|
return err
|
||||||
|
} else {
|
||||||
|
// Need to set bootstrap address to avoid loopback DNS lookup
|
||||||
|
dohIPAddr, err := net.ResolveIPAddr("ip", dohURL.Hostname())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
client, err := rdns.NewDoHClient("doh", dns, rdns.DoHClientOptions{
|
||||||
|
BootstrapAddr: dohIPAddr.String(),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
r = client
|
||||||
}
|
}
|
||||||
r = client
|
|
||||||
} else if strings.HasPrefix(dns, "tls://") {
|
} else if strings.HasPrefix(dns, "tls://") {
|
||||||
// DoT resolver
|
// DoT resolver
|
||||||
dns = strings.TrimPrefix(dns, "tls://")
|
dns = strings.TrimPrefix(dns, "tls://")
|
||||||
if dns == "" {
|
if dns == "" {
|
||||||
return errInvalidSyntax
|
return errInvalidSyntax
|
||||||
}
|
}
|
||||||
if _, _, err := utils.SplitHostPort(dns); err != nil {
|
dotHost, _, err := utils.SplitHostPort(dns)
|
||||||
// Append the default DoT port
|
if err != nil {
|
||||||
|
// Append the default DNS port
|
||||||
dns = net.JoinHostPort(dns, "853")
|
dns = net.JoinHostPort(dns, "853")
|
||||||
}
|
}
|
||||||
client, err := rdns.NewDoTClient("dot", dns, rdns.DoTClientOptions{})
|
// Need to set bootstrap address to avoid loopback DNS lookup
|
||||||
|
dotIPAddr, err := net.ResolveIPAddr("ip", dotHost)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
client, err := rdns.NewDoTClient("dot", dns, rdns.DoTClientOptions{
|
||||||
|
BootstrapAddr: dotIPAddr.String(),
|
||||||
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@ -75,7 +95,19 @@ func setResolver(dns string) error {
|
|||||||
if dns == "" {
|
if dns == "" {
|
||||||
return errInvalidSyntax
|
return errInvalidSyntax
|
||||||
}
|
}
|
||||||
client, err := rdns.NewDoQClient("doq", dns, rdns.DoQClientOptions{})
|
doqHost, _, err := utils.SplitHostPort(dns)
|
||||||
|
if err != nil {
|
||||||
|
// Append the default DNS port
|
||||||
|
dns = net.JoinHostPort(dns, "853")
|
||||||
|
}
|
||||||
|
// Need to set bootstrap address to avoid loopback DNS lookup
|
||||||
|
doqIPAddr, err := net.ResolveIPAddr("ip", doqHost)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
client, err := rdns.NewDoQClient("doq", dns, rdns.DoQClientOptions{
|
||||||
|
BootstrapAddr: doqIPAddr.String(),
|
||||||
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user