ปัญหา
ฉันต้องการบล็อกการแก้ไข DNS ที่ส่งคืนที่อยู่ IP ของช่วงส่วนตัว สิ่งที่ฉันพบจนถึงตอนนี้คือ คุณต้องตั้งค่าแคช/เซิร์ฟเวอร์ DNS แบบเรียกซ้ำเพื่อทำสิ่งนั้น อย่างไรก็ตามเนื่องจากฉันต้องการใช้ภายในนักเทียบท่านั่นคือจุดที่ฉันสะดุดกับความยากลำบาก
วิธีที่ง่ายที่สุดที่ฉันพบคือการใช้ dnsmasq
(ตามที่อธิบายไว้ในนี้ คำตอบ). ในทางกลับกันเพียงแค่ต้องเรียกใช้กระบวนการเดียวจึงพบข้อมูลเกี่ยวกับ หัวหน้างาน
ซึ่งแก้ปัญหานั้น อย่างไรก็ตาม สร้างอิมเมจนักเทียบท่าตัวอย่างและเมื่อฉันใช้เซิร์ฟเวอร์ localhost dns (dnsmasq
) โดยการเพิ่มแฟล็ก --dns 127.0.0.1
หรือเปลี่ยน /etc/resolv.conf
จากภายในคอนเทนเนอร์ ฉันได้รับข้อผิดพลาด ** เซิร์ฟเวอร์ไม่พบ google.com: REFUSED
ซึ่งสมเหตุสมผลหลังจากคำเตือนที่ฉันได้รับในขณะที่เรียกใช้คอนเทนเนอร์:
คำเตือน: การตั้งค่า Localhost DNS (--dns=127.0.0.1) อาจล้มเหลวในคอนเทนเนอร์
สิ่งแวดล้อม
ภาพนักเทียบท่าตัวอย่าง:
จาก Ubuntu: ล่าสุด
RUN ปรับปรุง apt &&\
ฉลาดอัพเกรด -y
RUN apt install -y ผู้บังคับบัญชา \
dnsmasq \
dnsutils \
iputils-ปิง \
นาโน
RUN echo "stop-dns-rebind" > /etc/dnsmasq.d/stop-rebinding
คัดลอก Supervisor.conf /etc/supervisor.conf
จุดเข้าใช้งาน ["/usr/bin/supervisord", "-c", "/etc/supervisor.conf"]
Supervisor.conf:
[หัวหน้างาน]
โนดาเอมอน=จริง
logfile=/dev/stdout
logfile_maxbytes=0
[โปรแกรม:dnsmasq]
command=dnsmasq --no-daemon
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
สร้าง:
sudo docker สร้าง -t สุ่มตัวอย่าง nsmasq
วิ่ง:
sudo docker run -it --dns 127.0.0.1 --rm สุ่มตัวอย่าง nsmasq: ล่าสุด
ทำได้หรือไม่?
ฉันต้องการทราบว่ามีวิธีใดที่จะทำให้มันใช้งานได้ (โดยไม่ต้องใช้หลายคอนเทนเนอร์เช่น 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 ด้วย
จาก Ubuntu: ล่าสุด
RUN ปรับปรุง apt &&\
ฉลาดอัพเกรด -y
RUN apt install -y ผู้บังคับบัญชา \
dnsmasq \
dnsutils \
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"]