mirror of
https://github.com/Control-D-Inc/ctrld.git
synced 2026-08-10 13:20:33 +02:00
Improving DOH header logging
This commit is contained in:
@@ -146,61 +146,67 @@ func (r *dohResolver) Resolve(ctx context.Context, msg *dns.Msg) (*dns.Msg, erro
|
|||||||
return answer, nil
|
return answer, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// addHeader adds necessary HTTP header to request based on upstream config.
|
||||||
func addHeader(ctx context.Context, req *http.Request, uc *UpstreamConfig) {
|
func addHeader(ctx context.Context, req *http.Request, uc *UpstreamConfig) {
|
||||||
req.Header.Set("Content-Type", headerApplicationDNS)
|
|
||||||
req.Header.Set("Accept", headerApplicationDNS)
|
|
||||||
|
|
||||||
printed := false
|
printed := false
|
||||||
|
dohHeader := make(http.Header)
|
||||||
if uc.UpstreamSendClientInfo() {
|
if uc.UpstreamSendClientInfo() {
|
||||||
if ci, ok := ctx.Value(ClientInfoCtxKey{}).(*ClientInfo); ok && ci != nil {
|
if ci, ok := ctx.Value(ClientInfoCtxKey{}).(*ClientInfo); ok && ci != nil {
|
||||||
printed = ci.Mac != "" || ci.IP != "" || ci.Hostname != ""
|
printed = ci.Mac != "" || ci.IP != "" || ci.Hostname != ""
|
||||||
switch {
|
switch {
|
||||||
case uc.isControlD():
|
case uc.isControlD():
|
||||||
addControlDHeaders(req, ci)
|
dohHeader = newControlDHeaders(ci)
|
||||||
case uc.isNextDNS():
|
case uc.isNextDNS():
|
||||||
addNextDNSHeaders(req, ci)
|
dohHeader = newNextDNSHeaders(ci)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if printed {
|
if printed {
|
||||||
Log(ctx, ProxyLogger.Load().Debug().Interface("header", req.Header), "sending request header")
|
Log(ctx, ProxyLogger.Load().Debug(), "sending request header: %v", dohHeader)
|
||||||
}
|
}
|
||||||
|
dohHeader.Set("Content-Type", headerApplicationDNS)
|
||||||
|
dohHeader.Set("Accept", headerApplicationDNS)
|
||||||
|
req.Header = dohHeader
|
||||||
}
|
}
|
||||||
|
|
||||||
// addControlDHeaders set DoH/Doh3 HTTP request headers for ControlD upstream.
|
// newControlDHeaders returns DoH/Doh3 HTTP request headers for ControlD upstream.
|
||||||
func addControlDHeaders(req *http.Request, ci *ClientInfo) {
|
func newControlDHeaders(ci *ClientInfo) http.Header {
|
||||||
req.Header.Set(dohOsHeader, dohOsHeaderValue())
|
header := make(http.Header)
|
||||||
|
header.Set(dohOsHeader, dohOsHeaderValue())
|
||||||
if ci.Mac != "" {
|
if ci.Mac != "" {
|
||||||
req.Header.Set(dohMacHeader, ci.Mac)
|
header.Set(dohMacHeader, ci.Mac)
|
||||||
}
|
}
|
||||||
if ci.IP != "" {
|
if ci.IP != "" {
|
||||||
req.Header.Set(dohIPHeader, ci.IP)
|
header.Set(dohIPHeader, ci.IP)
|
||||||
}
|
}
|
||||||
if ci.Hostname != "" {
|
if ci.Hostname != "" {
|
||||||
req.Header.Set(dohHostHeader, ci.Hostname)
|
header.Set(dohHostHeader, ci.Hostname)
|
||||||
}
|
}
|
||||||
if ci.Self {
|
if ci.Self {
|
||||||
req.Header.Set(dohOsHeader, dohOsHeaderValue())
|
header.Set(dohOsHeader, dohOsHeaderValue())
|
||||||
}
|
}
|
||||||
switch ci.ClientIDPref {
|
switch ci.ClientIDPref {
|
||||||
case "mac":
|
case "mac":
|
||||||
req.Header.Set(dohClientIDPrefHeader, "1")
|
header.Set(dohClientIDPrefHeader, "1")
|
||||||
case "host":
|
case "host":
|
||||||
req.Header.Set(dohClientIDPrefHeader, "2")
|
header.Set(dohClientIDPrefHeader, "2")
|
||||||
}
|
}
|
||||||
|
return header
|
||||||
}
|
}
|
||||||
|
|
||||||
// addNextDNSHeaders set DoH/Doh3 HTTP request headers for nextdns upstream.
|
// newNextDNSHeaders returns DoH/Doh3 HTTP request headers for nextdns upstream.
|
||||||
// https://github.com/nextdns/nextdns/blob/v1.41.0/resolver/doh.go#L100
|
// https://github.com/nextdns/nextdns/blob/v1.41.0/resolver/doh.go#L100
|
||||||
func addNextDNSHeaders(req *http.Request, ci *ClientInfo) {
|
func newNextDNSHeaders(ci *ClientInfo) http.Header {
|
||||||
|
header := make(http.Header)
|
||||||
if ci.Mac != "" {
|
if ci.Mac != "" {
|
||||||
// https: //github.com/nextdns/nextdns/blob/v1.41.0/run.go#L543
|
// https: //github.com/nextdns/nextdns/blob/v1.41.0/run.go#L543
|
||||||
req.Header.Set("X-Device-Model", "mac:"+ci.Mac[:8])
|
header.Set("X-Device-Model", "mac:"+ci.Mac[:8])
|
||||||
}
|
}
|
||||||
if ci.IP != "" {
|
if ci.IP != "" {
|
||||||
req.Header.Set("X-Device-Ip", ci.IP)
|
header.Set("X-Device-Ip", ci.IP)
|
||||||
}
|
}
|
||||||
if ci.Hostname != "" {
|
if ci.Hostname != "" {
|
||||||
req.Header.Set("X-Device-Name", ci.Hostname)
|
header.Set("X-Device-Name", ci.Hostname)
|
||||||
}
|
}
|
||||||
|
return header
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user