1
0
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:
Darien Raymond
2017-12-19 23:55:09 +01:00
parent 7d11286d80
commit ab4f245313
11 changed files with 74 additions and 85 deletions

View File

@@ -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()