mirror of
https://github.com/Control-D-Inc/ctrld.git
synced 2026-02-03 22:18:39 +00:00
all: ignoring local interfaces RFC1918 IP for private resolver
Otherwises, the discovery may make a looping with new PTR query flow.
This commit is contained in:
committed by
Cuong Manh Le
parent
5897c174d3
commit
c3ff8182af
@@ -114,7 +114,7 @@ func (p *prog) serveDNS(listenerNum string) error {
|
||||
// addresses of the machine. So ctrld could receive queries from LAN clients.
|
||||
if needRFC1918Listeners(listenerConfig) {
|
||||
g.Go(func() error {
|
||||
for _, addr := range rfc1918Addresses() {
|
||||
for _, addr := range ctrld.Rfc1918Addresses() {
|
||||
func() {
|
||||
listenAddr := net.JoinHostPort(addr, strconv.Itoa(listenerConfig.Port))
|
||||
s, errCh := runDNSServer(listenAddr, proto, handler)
|
||||
@@ -737,21 +737,6 @@ func needRFC1918Listeners(lc *ctrld.ListenerConfig) bool {
|
||||
return lc.IP == "127.0.0.1" && lc.Port == 53
|
||||
}
|
||||
|
||||
func rfc1918Addresses() []string {
|
||||
var res []string
|
||||
interfaces.ForeachInterface(func(i interfaces.Interface, prefixes []netip.Prefix) {
|
||||
addrs, _ := i.Addrs()
|
||||
for _, addr := range addrs {
|
||||
ipNet, ok := addr.(*net.IPNet)
|
||||
if !ok || !ipNet.IP.IsPrivate() {
|
||||
continue
|
||||
}
|
||||
res = append(res, ipNet.IP.String())
|
||||
}
|
||||
})
|
||||
return res
|
||||
}
|
||||
|
||||
// ipFromARPA parses a FQDN arpa domain and return the IP address if valid.
|
||||
func ipFromARPA(arpa string) net.IP {
|
||||
if arpa, ok := strings.CutSuffix(arpa, ".in-addr.arpa."); ok {
|
||||
|
||||
@@ -438,7 +438,7 @@ func (p *prog) setDNS() {
|
||||
|
||||
nameservers := []string{ns}
|
||||
if needRFC1918Listeners(lc) {
|
||||
nameservers = append(nameservers, rfc1918Addresses()...)
|
||||
nameservers = append(nameservers, ctrld.Rfc1918Addresses()...)
|
||||
}
|
||||
if err := setDNS(netIface, nameservers); err != nil {
|
||||
logger.Error().Err(err).Msgf("could not set DNS for interface")
|
||||
|
||||
Reference in New Issue
Block a user