Domain-Name-System
如何將 docker 內的私有 dns 解析列入黑名單?
問題
我想阻止返回私有範圍 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
地址。