From da01a146d26390fb25a3a8d678dab4d6810f6381 Mon Sep 17 00:00:00 2001 From: Cuong Manh Le Date: Fri, 19 Apr 2024 07:49:56 +0700 Subject: [PATCH] internal/clientinfo: check hostname mapping for both ipv4/ipv6 --- cmd/cli/dns_proxy.go | 5 ++--- internal/clientinfo/client_info.go | 10 ++++++---- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/cmd/cli/dns_proxy.go b/cmd/cli/dns_proxy.go index d6d4142..a5242c5 100644 --- a/cmd/cli/dns_proxy.go +++ b/cmd/cli/dns_proxy.go @@ -794,7 +794,6 @@ func (p *prog) getClientInfo(remoteIP string, msg *dns.Msg) *ctrld.ClientInfo { ci.Mac = p.ciTable.LookupMac(ci.IP) } - isV6 := ctrldnet.IsIPv6(ci.IP) // If MAC is still empty here, that mean the requests are made from virtual interface, // like VPN/Wireguard clients, so we use ci.IP as hostname to distinguish those clients. if ci.Mac == "" { @@ -808,7 +807,7 @@ func (p *prog) getClientInfo(remoteIP string, msg *dns.Msg) *ctrld.ClientInfo { // IDs created for the same device, which is pointless. // // TODO(cuonglm): investigate whether this can be a false positive for other clients? - if !isV6 { + if !ctrldnet.IsIPv6(ci.IP) { ci.Hostname = ci.IP p.ciTable.StoreVPNClient(ci) } @@ -820,7 +819,7 @@ func (p *prog) getClientInfo(remoteIP string, msg *dns.Msg) *ctrld.ClientInfo { // If this is a query from self, but ci.IP is not loopback IP, // try using hostname mapping for lookback IP if presents. if ci.Self { - if name := p.ciTable.LocalHostname(isV6); name != "" { + if name := p.ciTable.LocalHostname(); name != "" { ci.Hostname = name } } diff --git a/internal/clientinfo/client_info.go b/internal/clientinfo/client_info.go index 646994c..780334b 100644 --- a/internal/clientinfo/client_info.go +++ b/internal/clientinfo/client_info.go @@ -328,11 +328,13 @@ func (t *Table) LookupRFC1918IPv4(mac string) string { } // LocalHostname returns the localhost hostname associated with loopback IP. -func (t *Table) LocalHostname(v6 bool) string { - if v6 { - return t.LookupHostname(ipv6Loopback, "") +func (t *Table) LocalHostname() string { + for _, ip := range []string{ipV4Loopback, ipv6Loopback} { + if name := t.LookupHostname(ip, ""); name != "" { + return name + } } - return t.LookupHostname(ipV4Loopback, "") + return "" } type macEntry struct {