mirror of
https://github.com/v2fly/v2ray-core.git
synced 2026-01-07 01:35:39 -05:00
overrideable dns
This commit is contained in:
@@ -6,7 +6,6 @@ import (
|
||||
"context"
|
||||
|
||||
"v2ray.com/core/app"
|
||||
"v2ray.com/core/app/dns"
|
||||
"v2ray.com/core/common"
|
||||
"v2ray.com/core/common/net"
|
||||
"v2ray.com/core/proxy"
|
||||
@@ -19,7 +18,6 @@ var (
|
||||
type Router struct {
|
||||
domainStrategy Config_DomainStrategy
|
||||
rules []Rule
|
||||
dnsServer dns.Server
|
||||
}
|
||||
|
||||
func NewRouter(ctx context.Context, config *Config) (*Router, error) {
|
||||
@@ -41,21 +39,15 @@ func NewRouter(ctx context.Context, config *Config) (*Router, error) {
|
||||
}
|
||||
r.rules[idx].Condition = cond
|
||||
}
|
||||
|
||||
r.dnsServer = dns.FromSpace(space)
|
||||
if r.dnsServer == nil {
|
||||
return newError("DNS is not found in the space")
|
||||
}
|
||||
return nil
|
||||
})
|
||||
return r, nil
|
||||
}
|
||||
|
||||
type ipResolver struct {
|
||||
ip []net.Address
|
||||
domain string
|
||||
resolved bool
|
||||
dnsServer dns.Server
|
||||
ip []net.Address
|
||||
domain string
|
||||
resolved bool
|
||||
}
|
||||
|
||||
func (r *ipResolver) Resolve() []net.Address {
|
||||
@@ -65,7 +57,10 @@ func (r *ipResolver) Resolve() []net.Address {
|
||||
|
||||
newError("looking for IP for domain: ", r.domain).WriteToLog()
|
||||
r.resolved = true
|
||||
ips := r.dnsServer.Get(r.domain)
|
||||
ips, err := net.LookupIP(r.domain)
|
||||
if err != nil {
|
||||
newError("failed to get IP address").Base(err).WriteToLog()
|
||||
}
|
||||
if len(ips) == 0 {
|
||||
return nil
|
||||
}
|
||||
@@ -77,9 +72,7 @@ func (r *ipResolver) Resolve() []net.Address {
|
||||
}
|
||||
|
||||
func (r *Router) TakeDetour(ctx context.Context) (string, error) {
|
||||
resolver := &ipResolver{
|
||||
dnsServer: r.dnsServer,
|
||||
}
|
||||
resolver := &ipResolver{}
|
||||
if r.domainStrategy == Config_IpOnDemand {
|
||||
if dest, ok := proxy.TargetFromContext(ctx); ok && dest.Address.Family().IsDomain() {
|
||||
resolver.domain = dest.Address.Domain()
|
||||
|
||||
Reference in New Issue
Block a user