|
|
|
|
@ -47,7 +47,7 @@ import ( |
|
|
|
|
"tailscale.com/wgengine/magicsock" |
|
|
|
|
"tailscale.com/wgengine/monitor" |
|
|
|
|
"tailscale.com/wgengine/router" |
|
|
|
|
"tailscale.com/wgengine/tsdns" |
|
|
|
|
"tailscale.com/net/dns" |
|
|
|
|
"tailscale.com/wgengine/tstun" |
|
|
|
|
"tailscale.com/wgengine/wgcfg" |
|
|
|
|
"tailscale.com/wgengine/wglog" |
|
|
|
|
@ -95,7 +95,7 @@ type userspaceEngine struct { |
|
|
|
|
tundev *tstun.TUN |
|
|
|
|
wgdev *device.Device |
|
|
|
|
router router.Router |
|
|
|
|
resolver *tsdns.Resolver |
|
|
|
|
resolver *dns.Resolver |
|
|
|
|
magicConn *magicsock.Conn |
|
|
|
|
linkMon *monitor.Mon |
|
|
|
|
linkMonOwned bool // whether we created linkMon (and thus need to close it)
|
|
|
|
|
@ -246,7 +246,7 @@ func newUserspaceEngine(logf logger.Logf, rawTUNDev tun.Device, conf Config) (_ |
|
|
|
|
e.linkMonOwned = true |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
e.resolver = tsdns.NewResolver(tsdns.ResolverConfig{ |
|
|
|
|
e.resolver = dns.NewResolver(dns.ResolverConfig{ |
|
|
|
|
Logf: logf, |
|
|
|
|
Forward: true, |
|
|
|
|
LinkMonitor: e.linkMon, |
|
|
|
|
@ -476,13 +476,13 @@ func (e *userspaceEngine) isLocalAddr(ip netaddr.IP) bool { |
|
|
|
|
// handleDNS is an outbound pre-filter resolving Tailscale domains.
|
|
|
|
|
func (e *userspaceEngine) handleDNS(p *packet.Parsed, t *tstun.TUN) filter.Response { |
|
|
|
|
if p.Dst.IP == magicDNSIP && p.Dst.Port == magicDNSPort && p.IPProto == ipproto.UDP { |
|
|
|
|
request := tsdns.Packet{ |
|
|
|
|
request := dns.Packet{ |
|
|
|
|
Payload: append([]byte(nil), p.Payload()...), |
|
|
|
|
Addr: netaddr.IPPort{IP: p.Src.IP, Port: p.Src.Port}, |
|
|
|
|
} |
|
|
|
|
err := e.resolver.EnqueueRequest(request) |
|
|
|
|
if err != nil { |
|
|
|
|
e.logf("tsdns: enqueue: %v", err) |
|
|
|
|
e.logf("dns: enqueue: %v", err) |
|
|
|
|
} |
|
|
|
|
return filter.Drop |
|
|
|
|
} |
|
|
|
|
@ -493,11 +493,11 @@ func (e *userspaceEngine) handleDNS(p *packet.Parsed, t *tstun.TUN) filter.Respo |
|
|
|
|
func (e *userspaceEngine) pollResolver() { |
|
|
|
|
for { |
|
|
|
|
resp, err := e.resolver.NextResponse() |
|
|
|
|
if err == tsdns.ErrClosed { |
|
|
|
|
if err == dns.ErrClosed { |
|
|
|
|
return |
|
|
|
|
} |
|
|
|
|
if err != nil { |
|
|
|
|
e.logf("tsdns: error: %v", err) |
|
|
|
|
e.logf("dns: error: %v", err) |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -511,7 +511,7 @@ func (e *userspaceEngine) pollResolver() { |
|
|
|
|
} |
|
|
|
|
hlen := h.Len() |
|
|
|
|
|
|
|
|
|
// TODO(dmytro): avoid this allocation without importing tstun quirks into tsdns.
|
|
|
|
|
// TODO(dmytro): avoid this allocation without importing tstun quirks into dns.
|
|
|
|
|
const offset = tstun.PacketStartOffset |
|
|
|
|
buf := make([]byte, offset+hlen+len(resp.Payload)) |
|
|
|
|
copy(buf[offset+hlen:], resp.Payload) |
|
|
|
|
@ -1047,7 +1047,7 @@ func (e *userspaceEngine) SetFilter(filt *filter.Filter) { |
|
|
|
|
e.tundev.SetFilter(filt) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func (e *userspaceEngine) SetDNSMap(dm *tsdns.Map) { |
|
|
|
|
func (e *userspaceEngine) SetDNSMap(dm *dns.Map) { |
|
|
|
|
e.resolver.SetMap(dm) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|