Problemă
Vreau să blochez rezoluțiile DNS care returnează adrese IP din intervale private. Ceea ce am descoperit până acum este că pentru a face așa ceva trebuie să configurați un server DNS cache/recursiv. Cu toate acestea, din moment ce vreau să-l folosesc în interiorul dockerului, acolo mă pot întâlni cu dificultăți.
Cel mai simplu mod pe care l-am găsit este folosirea dnsmasq
(după cum este explicat în celălalt Răspuns). Pe de altă parte, trebuie doar să ruleze un singur proces, așa că am aflat despre supraveghetor
care rezolvă această problemă. Cu toate acestea, am creat un exemplu de imagine Docker și când folosesc serverul localhost dns (dnsmasq
) prin adăugarea steagului --dns 127.0.0.1
sau înlocuirea /etc/resolv.conf
din interiorul containerului primesc o eroare ** serverul nu poate găsi google.com: REFUSAT
, care are sens doar după avertismentul pe care îl primesc în momentul rulării containerului:
AVERTISMENT: Setarea DNS localhost (--dns=127.0.0.1) poate eșua în containere.
Mediu inconjurator
Exemplu de imagine docker:
DIN ubuntu:latest
RUN actualizare apt &&\
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"]
supervisor.conf:
[supraveghetor]
nodaemon=adevărat
logfile=/dev/stdout
logfile_maxbytes=0
[program:dnsmasq]
comandă=dnsmasq --no-daemon
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
Construi:
sudo docker build . -t samplednsmasq
Alerga:
sudo docker run -it --dns 127.0.0.1 --rm samplednsmasq:latest
Este realizabil?
Aș dori să știu dacă există vreo modalitate de a-l face să funcționeze (fără a folosi multi-container precum docker-compose) și dnsmasq, sunt, de asemenea, deschis către alte alternative care nu implică un server de cache DNS.
Soluţie:
A schimbat supraveghetor.conf
la:
[supraveghetor]
nodaemon=adevărat
logfile=/dev/stdout
logfile_maxbytes=0
[program:dnsmasq]
comandă=dnsmasq --no-daemon --interface=lo --stop-dns-rebind
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
De asemenea, a fost actualizat Dockerfile
DIN ubuntu:latest
RUN actualizare apt &&\
apt upgrade -y
RUN apt install -y supervisor\
dnsmasq \
dnsutils \
iputils-ping \
nano \
net-instrumente
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"]