Проблема
Я хочу заблокировать разрешения DNS, которые возвращают IP-адреса частного диапазона. Что я нашел до сих пор, так это то, что для этого вам нужно настроить кеш/рекурсивный DNS-сервер. Однако, поскольку я хочу использовать его внутри докера, я натыкаюсь на трудности.
Самый простой способ, который я нашел, это использовать dnsmasq
(как объясняется в этом другом отвечать). С другой стороны, просто нужно запустить один процесс, поэтому узнал о надзиратель
который решает эту проблему. Тем не менее, создал образец образа докера, и когда я использую DNS-сервер localhost (dnsmasq
), добавив флаг --dns 127.0.0.1
или замена /etc/resolv.conf
изнутри контейнера я получаю сообщение об ошибке ** сервер не может найти google.com: REFUSED
, что имеет смысл после предупреждения, которое я получаю во время запуска контейнера:
ПРЕДУПРЕЖДЕНИЕ. Настройка DNS Localhost (--dns=127.0.0.1) может привести к сбою в контейнерах.
Среда
Образец докера:
ОТ убунту: последняя
ЗАПУСТИТЬ обновление &&\
подходящее обновление -y
ВЫПОЛНИТЬ apt install -y супервизор \
DNS-маска \
днсутилс \
iputils-пинг \
нано
RUN echo "stop-dns-rebind" > /etc/dnsmasq.d/stop-rebinding
КОПИРОВАТЬ supervisor.conf /etc/supervisor.conf
ТОЧКА ВХОДА ["/usr/bin/supervisord", "-c", "/etc/supervisor.conf"]
супервизор.конф:
[руководитель]
нодемон=истина
logfile=/dev/stdout
logfile_maxbytes=0
[программа:dnsmasq]
команда = dnsmasq --no-daemon
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
Строить:
судо докер сборка. -t выборка nsmasq
Бег:
sudo docker run -it --dns 127.0.0.1 --rm samplednsmasq: последний
Это выполнимо?
Я хотел бы знать, есть ли способ заставить его работать (без использования нескольких контейнеров, таких как docker-compose) и dnsmasq, я также открыт для других альтернатив, которые не включают сервер кэширования DNS.
Решение:
Изменено supervisor.conf
к:
[руководитель]
нодемон=истина
logfile=/dev/stdout
logfile_maxbytes=0
[программа: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
ОТ убунту: последняя
ЗАПУСТИТЬ обновление &&\
подходящее обновление -y
ВЫПОЛНИТЬ apt install -y супервизор \
DNS-маска \
днсутилс \
iputils-пинг \
нано \
сетевые инструменты
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
КОПИРОВАТЬ supervisor.conf /etc/supervisor.conf
ТОЧКА ВХОДА ["/usr/bin/supervisord", "-c", "/etc/supervisor.conf"]