mirror of
https://github.com/coredns/coredns.git
synced 2026-07-15 12:10:11 -04:00
fix(forward): make dnstap FORWARDER_* describe the socket from CoreDNS to upstream (#8184)
Signed-off-by: Jaime Hablutzel <hablutzel1@gmail.com>
This commit is contained in:
@@ -7,7 +7,6 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/coredns/coredns/plugin/dnstap/msg"
|
||||
"github.com/coredns/coredns/plugin/pkg/proxy"
|
||||
"github.com/coredns/coredns/request"
|
||||
|
||||
tap "github.com/dnstap/golang-dnstap"
|
||||
@@ -15,7 +14,7 @@ import (
|
||||
)
|
||||
|
||||
// toDnstap will send the forward and received message to the dnstap plugin.
|
||||
func toDnstap(ctx context.Context, f *Forward, host string, state request.Request, opts proxy.Options, reply *dns.Msg, start time.Time) {
|
||||
func toDnstap(ctx context.Context, f *Forward, host string, localAddr net.Addr, proto string, state request.Request, reply *dns.Msg, start time.Time) {
|
||||
ap, _ := netip.ParseAddrPort(host) // this is preparsed and can't err here
|
||||
ip := net.IP(ap.Addr().AsSlice())
|
||||
port := int(ap.Port())
|
||||
@@ -24,15 +23,7 @@ func toDnstap(ctx context.Context, f *Forward, host string, state request.Reques
|
||||
IP: ip,
|
||||
Port: port,
|
||||
}
|
||||
t := state.Proto()
|
||||
switch {
|
||||
case opts.ForceTCP:
|
||||
t = "tcp"
|
||||
case opts.PreferUDP:
|
||||
t = "udp"
|
||||
}
|
||||
|
||||
if t == "tcp" {
|
||||
if proto == "tcp" {
|
||||
ta = &net.TCPAddr{IP: ip, Port: port}
|
||||
}
|
||||
|
||||
@@ -40,9 +31,12 @@ func toDnstap(ctx context.Context, f *Forward, host string, state request.Reques
|
||||
// Query
|
||||
q := new(tap.Message)
|
||||
msg.SetQueryTime(q, start)
|
||||
// Forwarder dnstap messages are from the perspective of the downstream server
|
||||
// (upstream is the forward server)
|
||||
msg.SetQueryAddress(q, state.W.RemoteAddr())
|
||||
// Forwarder dnstap messages are from the perspective of the
|
||||
// downstream DNS server (current CoreDNS) to an upstream DNS
|
||||
// server.
|
||||
if localAddr != nil {
|
||||
msg.SetQueryAddress(q, localAddr)
|
||||
}
|
||||
msg.SetResponseAddress(q, ta)
|
||||
if t.IncludeRawMessage {
|
||||
buf, _ := state.Req.Pack()
|
||||
@@ -59,7 +53,9 @@ func toDnstap(ctx context.Context, f *Forward, host string, state request.Reques
|
||||
r.ResponseMessage = buf
|
||||
}
|
||||
msg.SetQueryTime(r, start)
|
||||
msg.SetQueryAddress(r, state.W.RemoteAddr())
|
||||
if localAddr != nil {
|
||||
msg.SetQueryAddress(r, localAddr)
|
||||
}
|
||||
msg.SetResponseAddress(r, ta)
|
||||
msg.SetResponseTime(r, time.Now())
|
||||
msg.SetType(r, tap.Message_FORWARDER_RESPONSE)
|
||||
|
||||
Reference in New Issue
Block a user