glider/dnstun.go

36 lines
614 B
Go
Raw Normal View History

// https://tools.ietf.org/html/rfc1035
2017-07-13 21:55:41 +08:00
package main
type dnstun struct {
*proxy
2017-07-13 21:55:41 +08:00
raddr string
udp Proxy
tcp Proxy
2017-07-13 21:55:41 +08:00
}
// DNSTun returns a dns forwarder. client -> dns.udp -> glider -> forwarder -> remote dns addr
func DNSTun(addr, raddr string, upProxy Proxy) (Proxy, error) {
2017-07-13 21:55:41 +08:00
s := &dnstun{
proxy: newProxy(addr, upProxy),
2017-07-13 21:55:41 +08:00
raddr: raddr,
}
s.udp, _ = DNSForwarder(addr, raddr, upProxy)
s.tcp, _ = TCPTun(addr, raddr, upProxy)
2017-07-13 21:55:41 +08:00
return s, nil
}
// ListenAndServe .
2017-07-13 21:55:41 +08:00
func (s *dnstun) ListenAndServe() {
if s.udp != nil {
go s.udp.ListenAndServe()
2017-07-13 21:55:41 +08:00
}
if s.tcp != nil {
s.tcp.ListenAndServe()
}
}