Domain-Name-System

如何將 docker 內的私有 dns 解析列入黑名單?

  • December 23, 2021

問題

我想阻止返回私有範圍 IP 地址的 DNS 解析。到目前為止,我發現要做這樣的事情你需要設置一個記憶體/遞歸 DNS 伺服器。但是,由於我想在 docker 中使用它,所以我遇到了困難。

我發現最簡單的方法是使用dnsmasq(如其他答案中所述)。另一方面,只需要執行一個程序,以便找出supervisord解決該問題的方法。儘管如此,創建了一個範例 docker 映像,當我dnsmasq通過添加標誌或從容器中--dns 127.0.0.1替換來使用 localhost dns 伺服器()時,我得到一個錯誤,這在我在執行容器時收到警告之後才有意義:/etc/resolv.conf``** server can't find google.com: REFUSED

WARNING: Localhost DNS setting (--dns=127.0.0.1) may fail in containers.

環境

範例泊塢窗圖像:

FROM ubuntu:latest

RUN apt update &&\
   apt upgrade -y

RUN apt install -y supervisor \
   dnsmasq \
   dnsutils \
   iputils-ping \
   nano

RUN echo "stop-dns-rebind" > /etc/dnsmasq.d/stop-rebinding

COPY supervisor.conf /etc/supervisor.conf

ENTRYPOINT ["/usr/bin/supervisord", "-c", "/etc/supervisor.conf"]

主管.conf:

[supervisord]
nodaemon=true
logfile=/dev/stdout
logfile_maxbytes=0

[program:dnsmasq]
command=dnsmasq --no-daemon
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

建造:

sudo docker build . -t samplednsmasq

跑:

sudo docker run -it --dns 127.0.0.1 --rm samplednsmasq:latest

可行嗎?

我想知道是否有任何方法可以使它工作(不使用像 docker-compose 這樣的多容器)和 dnsmasq,我也對不涉及 dns 記憶體伺服器的其他替代方案持開放態度。

解決方案:更改supervisor.conf為:

[supervisord]
nodaemon=true
logfile=/dev/stdout
logfile_maxbytes=0

[program:dnsmasq]
command=dnsmasq --no-daemon --interface=lo --stop-dns-rebind
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

還更新了 Dockerfile

FROM ubuntu:latest

RUN apt update &&\
   apt upgrade -y

RUN apt install -y supervisor \
   dnsmasq \
   dnsutils \
   iputils-ping \
   nano \
   net-tools

RUN echo "listen-address=127.0.0.1\nbind-interfaces\nstop-dns-rebind" > /etc/dnsmasq.d/stop-rebinding &&\
   echo "\nserver=8.8.8.8\nserver=8.8.4.4\nno-resolv" >> /etc/dnsmasq.conf

COPY supervisor.conf /etc/supervisor.conf

ENTRYPOINT ["/usr/bin/supervisord", "-c", "/etc/supervisor.conf"]

server can't find google.com: REFUSED表示沒有 DNS 伺服器監聽指定的地址。預設情況下dnsmasq不會監聽127.0.0.1地址。

引用自:https://serverfault.com/questions/1088081