@@ -26,6 +26,11 @@ import (
2626 "gopkg.in/yaml.v3"
2727)
2828
29+ // defaultHTTPTimeout is the default timeout for HTTP server operations.
30+ //
31+ // TODO(a.garipov): Consider making configurable.
32+ const defaultHTTPTimeout = 10 * time .Second
33+
2934// TODO(e.burkov): Use a separate type for the YAML configuration file.
3035
3136// createProxyConfig initializes [proxy.Config]. l must not be nil.
@@ -58,6 +63,24 @@ func createProxyConfig(
5863 return nil , fmt .Errorf ("ratelimit mw: %w" , err )
5964 }
6065
66+ httpConf := & proxy.HTTPConfig {
67+ ServerHeader : conf .HTTPSServerName ,
68+ Routes : conf .DoHRoutes ,
69+ ReadTimeout : defaultHTTPTimeout ,
70+ WriteTimeout : defaultHTTPTimeout ,
71+ HTTP3Enabled : conf .HTTP3 ,
72+ InsecureEnabled : conf .DoHInsecureEnabled ,
73+ }
74+
75+ if uiStr := conf .HTTPSUserinfo ; uiStr != "" {
76+ user , pass , ok := strings .Cut (uiStr , ":" )
77+ if ok {
78+ httpConf .Userinfo = url .UserPassword (user , pass )
79+ } else {
80+ httpConf .Userinfo = url .User (user )
81+ }
82+ }
83+
6184 proxyConf = & proxy.Config {
6285 Logger : l .With (slogutil .KeyPrefix , proxy .LogPrefix ),
6386 CacheEnabled : conf .Cache ,
@@ -68,7 +91,6 @@ func createProxyConfig(
6891 CacheOptimisticMaxAge : time .Duration (conf .OptimisticMaxAge ),
6992 CacheOptimistic : conf .CacheOptimistic ,
7093 RefuseAny : conf .RefuseAny ,
71- HTTP3 : conf .HTTP3 ,
7294 // TODO(e.burkov): The following CIDRs are aimed to match any address.
7395 // This is not quite proper approach to be used by default so think
7496 // about configuring it.
@@ -78,23 +100,14 @@ func createProxyConfig(
78100 },
79101 EnableEDNSClientSubnet : conf .EnableEDNSSubnet ,
80102 UDPBufferSize : conf .UDPBufferSize ,
81- HTTPSServerName : conf .HTTPSServerName ,
82103 MaxGoroutines : conf .MaxGoRoutines ,
83104 UsePrivateRDNS : conf .UsePrivateRDNS ,
84105 PrivateSubnets : netutil .SubnetSetFunc (netutil .IsLocallyServed ),
85106 RequestHandler : ratelimitMw .Wrap (preMw .Wrap (proxy.DefaultHandler {})),
86107 PendingRequests : & proxy.PendingRequestsConfig {
87108 Enabled : conf .PendingRequestsEnabled ,
88109 },
89- }
90-
91- if uiStr := conf .HTTPSUserinfo ; uiStr != "" {
92- user , pass , ok := strings .Cut (uiStr , ":" )
93- if ok {
94- proxyConf .Userinfo = url .UserPassword (user , pass )
95- } else {
96- proxyConf .Userinfo = url .User (user )
97- }
110+ HTTPConfig : httpConf ,
98111 }
99112
100113 conf .initBogusNXDomain (ctx , l , proxyConf )
@@ -391,60 +404,58 @@ func (conf *configuration) initListenAddrs(config *proxy.Config) (err error) {
391404 if len (conf .ListenPorts ) == 0 {
392405 // If ListenPorts has not been parsed through config file nor command
393406 // line we set it to 53.
394- conf .ListenPorts = []int {53 }
407+ conf .ListenPorts = []uint16 {53 }
395408 }
396409
397410 for _ , port := range conf .ListenPorts {
398411 for _ , ip := range addrs {
399- addrPort := netip .AddrPortFrom (ip , uint16 ( port ) )
412+ addrPort := netip .AddrPortFrom (ip , port )
400413
401414 config .UDPListenAddr = append (config .UDPListenAddr , net .UDPAddrFromAddrPort (addrPort ))
402415 config .TCPListenAddr = append (config .TCPListenAddr , net .TCPAddrFromAddrPort (addrPort ))
403416 }
404417 }
405418
406- initTLSListenAddrs (config , conf , addrs )
407- initDNSCryptListenAddrs (config , conf , addrs )
419+ if config .TLSConfig != nil {
420+ initTLSListenAddrs (config , conf , addrs )
421+ }
422+
423+ if config .DNSCryptResolverCert != nil && config .DNSCryptProviderName != "" {
424+ initDNSCryptListenAddrs (config , conf , addrs )
425+ }
408426
409427 return nil
410428}
411429
412- // initTLSListenAddrs sets up proxy configuration TLS listen addresses.
430+ // initTLSListenAddrs sets up proxy configuration TLS listen addresses. conf,
431+ // proxyConf must not be nil. If conf.HTTPSListenPorts is not empty,
432+ // proxyConf.HTTPConfig must not be nil.
413433func initTLSListenAddrs (proxyConf * proxy.Config , conf * configuration , addrs []netip.Addr ) {
414- if proxyConf .TLSConfig == nil {
415- return
416- }
417-
434+ httpConfig := proxyConf .HTTPConfig
418435 for _ , ip := range addrs {
419436 for _ , port := range conf .TLSListenPorts {
420- a := net .TCPAddrFromAddrPort (netip .AddrPortFrom (ip , uint16 ( port ) ))
437+ a := net .TCPAddrFromAddrPort (netip .AddrPortFrom (ip , port ))
421438 proxyConf .TLSListenAddr = append (proxyConf .TLSListenAddr , a )
422439 }
423440
424441 for _ , port := range conf .HTTPSListenPorts {
425- a := net . TCPAddrFromAddrPort ( netip .AddrPortFrom (ip , uint16 ( port )) )
426- proxyConf . HTTPSListenAddr = append (proxyConf . HTTPSListenAddr , a )
442+ a := netip .AddrPortFrom (ip , port )
443+ httpConfig . ListenAddresses = append (httpConfig . ListenAddresses , a )
427444 }
428445
429446 for _ , port := range conf .QUICListenPorts {
430- a := net .UDPAddrFromAddrPort (netip .AddrPortFrom (ip , uint16 ( port ) ))
447+ a := net .UDPAddrFromAddrPort (netip .AddrPortFrom (ip , port ))
431448 proxyConf .QUICListenAddr = append (proxyConf .QUICListenAddr , a )
432449 }
433450 }
434451}
435452
436453// initDNSCryptListenAddrs sets up proxy configuration DNSCrypt listen
437- // addresses.
454+ // addresses. proxyConf and conf must not be nil.
438455func initDNSCryptListenAddrs (proxyConf * proxy.Config , conf * configuration , addrs []netip.Addr ) {
439- if proxyConf .DNSCryptResolverCert == nil || proxyConf .DNSCryptProviderName == "" {
440- return
441- }
442-
443456 for _ , port := range conf .DNSCryptListenPorts {
444- p := uint16 (port )
445-
446457 for _ , ip := range addrs {
447- addrPort := netip .AddrPortFrom (ip , p )
458+ addrPort := netip .AddrPortFrom (ip , port )
448459
449460 tcp := net .TCPAddrFromAddrPort (addrPort )
450461 proxyConf .DNSCryptTCPListenAddr = append (proxyConf .DNSCryptTCPListenAddr , tcp )
0 commit comments