From f377ae1fdba6553446e88129d0b05f8345e3bc4f Mon Sep 17 00:00:00 2001 From: Denis Kadyshev Date: Mon, 13 Jan 2025 18:46:59 +0700 Subject: [PATCH 1/3] Update Dockerfile-dnsdist --- Dockerfile-dnsdist | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Dockerfile-dnsdist b/Dockerfile-dnsdist index d303c2be1e2b..100b0d617bef 100644 --- a/Dockerfile-dnsdist +++ b/Dockerfile-dnsdist @@ -91,10 +91,9 @@ FROM debian:12-slim RUN apt-get update && apt-get -y dist-upgrade && apt-get clean # - python3 and jinja2 (for startup script) -# - python3-atomicwrites (for backend management) # - tini (for signal management) # - ca-certificates (for verifying downstream DoH/DoT certificates) -RUN apt-get install -y python3 python3-jinja2 python3-atomicwrites tini libcap2-bin ca-certificates && apt-get clean +RUN apt-get install -y python3 python3-jinja2 tini libcap2-bin ca-certificates && apt-get clean # Output from builder COPY --from=builder /build / @@ -126,6 +125,5 @@ EXPOSE 8083/tcp WORKDIR /etc/dnsdist COPY dockerdata/dnsdist-resolver.lua /etc/dnsdist/ -COPY dockerdata/dnsdist-resolver.py /usr/local/bin/dnsdist-resolver ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/dnsdist-startup"] From fa27c7247dfeb7085bedffcc7e1085318d0aa187 Mon Sep 17 00:00:00 2001 From: Denis Kadyshev Date: Mon, 13 Jan 2025 18:48:41 +0700 Subject: [PATCH 2/3] Delete dockerdata/dnsdist-resolver.py --- dockerdata/dnsdist-resolver.py | 43 ---------------------------------- 1 file changed, 43 deletions(-) delete mode 100755 dockerdata/dnsdist-resolver.py diff --git a/dockerdata/dnsdist-resolver.py b/dockerdata/dnsdist-resolver.py deleted file mode 100755 index 152298d61635..000000000000 --- a/dockerdata/dnsdist-resolver.py +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env python3 -import socket -import sys -import threading -import time - -from atomicwrites import atomic_write - -class LookupThread(threading.Thread): - def run(self): - while True: - ips = dict() - for target in self.targets: - addrs = ips.get(target, []) - - try: - res = socket.getaddrinfo(target, 0, proto=socket.IPPROTO_UDP) - addrs = [item[4][0] for item in res] - except socket.gaierror as e: - if e.errno in (socket.EAI_NODATA, socket.EAI_NONAME): - addrs = [] - - ips[target] = addrs - - with atomic_write(self.fname, overwrite=True) as out: - out.write('return {\n') - for name,addrs in ips.items(): - out.write(' ["{}"]='.format(name) + '{\n') - for addr in addrs: - out.write(' "{}",\n'.format(addr)) - out.write(' },\n') - out.write('}\n') - - time.sleep(1) - -if __name__ == '__main__': - lt = LookupThread() - lt.setDaemon(True) - lt.targets = [] - lt.fname = '/tmp/dnsdist-resolver.out' - lt.start() - for line in sys.stdin: - lt.targets=line.split() From ab5fabef3dfb39d3a7dad1a497fe5fa67a370e22 Mon Sep 17 00:00:00 2001 From: Denis Kadyshev Date: Mon, 13 Jan 2025 18:54:35 +0700 Subject: [PATCH 3/3] Update dnsdist-resolver.lua --- dockerdata/dnsdist-resolver.lua | 25 ++++++++++--------------- 1 file changed, 10 insertions(+), 15 deletions(-) diff --git a/dockerdata/dnsdist-resolver.lua b/dockerdata/dnsdist-resolver.lua index 89e24b319e6e..f9bf8d1c3c04 100644 --- a/dockerdata/dnsdist-resolver.lua +++ b/dockerdata/dnsdist-resolver.lua @@ -17,7 +17,15 @@ _M.verbose = false local ourservers = {} local ourcount = {} -local resolverpipe = io.popen('/usr/local/bin/dnsdist-resolver', 'w') +-- Global variable for store results for getAddressInfo() function +local resout = {} + +local function resolveCB(hostname, ips) + resout[hostname] = {} + for _, ip in ipairs(ips) do + table.insert(resout[hostname], ip:toString()) + end +end local function tablecopy(t) local t2 = {} @@ -71,22 +79,9 @@ local function setServer(name, ip) end function _M.maintenance() - -- TODO: only do this if the list has changed - -- TODO: check return values for k in pairs(_M.servers) do - resolverpipe:write(k .. ' ') + getAddressInfo(k, resolveCB) end - resolverpipe:write('\n') - resolverpipe:flush() - - -- TODO: maybe this failure should be quiet for the first X seconds? - local ret, resout = pcall(loadfile, '/tmp/dnsdist-resolver.out') - if not ret then - error(resout) - end - - -- on purpose no pcall, an error here is a bug - resout = resout() local activeservers = {} -- check for servers removed by controller