如何将docker内部的私有dns解析列入黑名单?

如何将docker内部的私有dns解析列入黑名单?

问题

我想阻止返回私有范围 IP 地址的 DNS 解析。到目前为止,我发现要做到这一点,您需要设置缓存/递归 DNS 服务器。但是,由于我想在 docker 中使用它,所以我遇到了困难。

我发现最简单的方法是使用dnsmasq(如另一个回答)。另一方面,只需要运行一个进程,这样就可以找到supervisord解决该问题的方法。尽管如此,还是创建了一个示例 docker 镜像,当我dnsmasq通过添加标志--dns 127.0.0.1/etc/resolv.conf在容器内替换来使用 localhost dns 服务器()时,我收到一个错误** server can't find google.com: REFUSED,这在运行容器时收到警告后才有意义:

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

环境

示例 Docker 镜像:

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"]

答案1

server can't find google.com: REFUSED表示没有 DNS 服务器监听指定地址。默认情况下dnsmasq不会监听该127.0.0.1地址。

相关内容