ฉันมีคอนเทนเนอร์ DNS ของ bind9 ที่ทำงานบน 10.64.128.53 ซึ่งอยู่ใน "เซิร์ฟเวอร์" ของเครือข่ายนักเทียบท่าบนเครือข่ายย่อย 10.64.128.0/24 มันใช้งานได้ดีและถ้าฉันวิ่ง:
nslookup google.com 10.64.128.53
ฉันได้รับผลลัพธ์:
เซิร์ฟเวอร์: 10.64.128.53
ที่อยู่: 10.64.128.53#53
คำตอบที่ไม่ได้รับอนุญาต:
ชื่อ: google.co.th
ที่อยู่: 216.58.193.142
เมื่อฉันเรียกใช้คำสั่งเดียวกันในคอนเทนเนอร์นักเทียบท่า: นักเทียบท่าเรียกใช้ --rm -it --เซิร์ฟเวอร์เครือข่าย --dns 10.64.128.53 อัลไพน์ nslookup google.com 10.64.1 28.53
ฉันได้รับผลลัพธ์:
เซิร์ฟเวอร์: 10.64.128.53
ที่อยู่: 10.64.128.53:53
คำตอบที่ไม่ได้รับอนุญาต:
ชื่อ: google.co.th
ที่อยู่: 216.58.193.142
นี้คาดว่าจะ
ตอนนี้ถ้าฉันวิ่ง: นักเทียบท่าเรียกใช้ --rm -it --เซิร์ฟเวอร์เครือข่าย --dns 10.64.128.53 อัลไพน์ nslookup google.com
ฉันได้รับผลลัพธ์:
nslookup: เขียนถึง '127.0.0.11': การเชื่อมต่อถูกปฏิเสธ
;; หมดเวลาการเชื่อมต่อ; ไม่สามารถเข้าถึงเซิร์ฟเวอร์ได้
สิ่งนี้ไม่สมเหตุสมผลสำหรับฉันเพราะฉันระบุเซิร์ฟเวอร์ DNS ของนักเทียบท่า แต่ฉันถือว่านักเทียบท่ารันผ่านพร็อกซีภายในบน 127.0.0.11 มันจะดีมากถ้าฉันใช้มัน แต่ฉันไม่ต้องการมัน ทางออกที่ดีที่สุดที่ฉันคิดได้คือการเขียนทับ /etc/resolv.conf
ด้วยเซิร์ฟเวอร์ DNS ของฉัน แต่ดูเหมือนว่าจะเป็นวิธีแก้ปัญหาที่แย่มาก ฉันเห็นสิ่งนี้ https://github.com/moby/moby/issues/19474#issuecomment-173093011 แต่ไม่สามารถใช้งานได้ใน nftables แต่ฉันเดาว่านี่เป็นวิธีเดียวเพราะดูเหมือนว่าเซิร์ฟเวอร์ DNS ของนักเทียบท่าต้องการการเชื่อมต่อจาก 127.0.0.11:53
โฮสต์คือ Gentoo Linux ฉันรู้ว่าระบบเครือข่ายใช้งานได้เมื่อติดตั้ง iptables ฉันเห็นข้อผิดพลาดเหล่านี้ในบันทึกของนักเทียบท่าทุกครั้งที่ฉันเริ่ม VM:
time="2022-01-25T03:08:56Z" level=warning msg="Failed to find iptables: exec: \"iptables\": executable file not found in $PATH"
เวลา="2022-01-25T03:08:56Z" level=error msg="การตั้งค่ากฎล้มเหลว [-t nat -I DOCKER_OUTPUT -d 127.0.0.11 -p udp --dport 53 -j DNAT --to- ปลายทาง 127.0.0.11:50360]"
เวลา="2022-01-25T03:08:56Z" level=error msg="การตั้งค่ากฎล้มเหลว [-t nat -I DOCKER_POSTROUTING -s 127.0.0.11 -p udp --sport 50360 -j SNAT --to- ที่มา :53]"
เวลา="2022-01-25T03:08:56Z" level=error msg="การตั้งค่ากฎล้มเหลว [-t nat -I DOCKER_OUTPUT -d 127.0.0.11 -p tcp --dport 53 -j DNAT --to- ปลายทาง 127.0.0.11:46531]"
เวลา="2022-01-25T03:08:56Z" level=error msg="การตั้งค่ากฎล้มเหลว [-t nat -I DOCKER_POSTROUTING -s 127.0.0.11 -p tcp --sport 46531 -j SNAT --to- ที่มา :53]"
ฉันยังเห็นข้อผิดพลาดนี้ทุกครั้งที่พยายามเรียกใช้คำสั่ง nslookup ในคอนเทนเนอร์นักเทียบท่า แต่ฉันไม่แน่ใจว่ามันเกี่ยวข้องกันอย่างไร:
time="2022-01-25T03:20:08.094540639Z" level=error msg="ตัวจัดการสำหรับ POST /v1.41/exec/d52b964c2e34acb78b67e5d2f02a8143e1efb3c45da0936fe128ed14fb6296ce/resize ส่งคืนข้อผิดพลาด: ไม่สามารถปรับขนาดคอนเทนเนอร์ที่หยุดทำงาน: ไม่ทราบ"
การใช้ iptables ไม่ใช่วิธีแก้ปัญหาที่นี่ ฉันต้องการให้เป็น nftables ล้วนๆ และนั่นก็ดูไม่สมเหตุสมผล
หากฉันใช้ iptables ดูเหมือนว่า Docker DNS จะใช้งานได้ แต่ไม่มีกฎเพิ่มใน iptables ฉันไม่เข้าใจว่าทำไมมันถึงต้องการ iptables แต่ไม่มีกฎ