aboutsummaryrefslogtreecommitdiff
path: root/lib/dns/server.go
diff options
context:
space:
mode:
authorShulhan <ms@kilabit.info>2026-03-26 05:34:30 +0700
committerShulhan <ms@kilabit.info>2026-03-26 05:34:30 +0700
commit5a765dc7f90c2ebc9a11cd79dcfbd8a8b8d99fcd (patch)
treedd98807227b3cbe3f85435c3b5cf743a1a9494f6 /lib/dns/server.go
parentb6ba871a86797ad2f028eab2e3820509c3a36109 (diff)
downloadpakakeh.go-5a765dc7f90c2ebc9a11cd79dcfbd8a8b8d99fcd.tar.xz
lib/dns: refactoring DoT and DoH to use address instead of port
Using port makes the IP address of DoT and DoH listen on the same address with UDP. If we set ListenAddress to 0.0.0.0 and TLS termination is handled by proxy, this cause DoT and DoH will also listen on all addresses.
Diffstat (limited to 'lib/dns/server.go')
-rw-r--r--lib/dns/server.go24
1 files changed, 13 insertions, 11 deletions
diff --git a/lib/dns/server.go b/lib/dns/server.go
index 3d46d114..4ba59bd2 100644
--- a/lib/dns/server.go
+++ b/lib/dns/server.go
@@ -194,10 +194,10 @@ func (srv *Server) ListenAndServe() (err error) {
srv.startAllForwarders()
go srv.processRequest()
- if srv.opts.TLSPort > 0 {
+ if srv.opts.DoTListen != `` {
go srv.serveDoT()
}
- if srv.opts.HTTPPort > 0 {
+ if srv.opts.DoHListen != `` {
go srv.serveDoH()
}
go srv.serveTCP()
@@ -242,17 +242,14 @@ func (srv *Server) Stop() {
// serveDoH listen for request over HTTPS using certificate and key
// file in parameter. The path to request is static "/dns-query".
func (srv *Server) serveDoH() {
- var (
- logp = `serveDoH`
- addr = srv.opts.getHTTPAddress().String()
- )
+ logp := `serveDoH`
var mux = http.NewServeMux()
mux.Handle(`/dns-query`, srv)
srv.doh = &http.Server{
- Addr: addr,
+ Addr: srv.opts.DoHListen,
IdleTimeout: srv.opts.HTTPIdleTimeout,
ReadHeaderTimeout: 5 * time.Second,
Handler: mux,
@@ -260,11 +257,11 @@ func (srv *Server) serveDoH() {
var err error
if srv.tlsConfig != nil && !srv.opts.DoHBehindProxy {
- log.Printf(`%s: listening at %s`, logp, addr)
+ log.Printf(`%s: listening at %s`, logp, srv.doh.Addr)
srv.doh.TLSConfig = srv.tlsConfig
err = srv.doh.ListenAndServeTLS("", "")
} else {
- log.Printf(`%s: listening behind proxy at %s`, logp, addr)
+ log.Printf(`%s: listening behind proxy at %s`, logp, srv.doh.Addr)
err = srv.doh.ListenAndServe()
}
if errors.Is(err, io.EOF) {
@@ -278,14 +275,19 @@ func (srv *Server) serveDoH() {
func (srv *Server) serveDoT() {
var (
- logp = `serveDoT`
- dotAddr = srv.opts.getDoTAddress()
+ logp = `serveDoT`
cl *TCPClient
conn net.Conn
err error
)
+ dotAddr, err := net.ResolveTCPAddr(`tcp`, srv.opts.DoTListen)
+ if err != nil {
+ log.Printf(`%s: %s`, logp, err)
+ return
+ }
+
for {
if srv.opts.DoHBehindProxy || srv.tlsConfig == nil {
srv.dot, err = net.ListenTCP("tcp", dotAddr)