Score:0

ไม่สามารถใช้ Docker DNS กับ nftables

ธง pw

ฉันมีคอนเทนเนอร์ 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 แต่ไม่มีกฎ

jp flag
นักเทียบท่าไม่รองรับ `nftables`
Desultory avatar
pw flag
นั่นไม่เป็นประโยชน์ ควรมีวิธีใช้ nftables ล้วนๆ กับ docker, iptables และ nftables ทั้งคู่คล้ายกันพอสมควร
jp flag
นักเทียบท่าขึ้นอยู่กับ `iptables` อย่างมากในการกำหนดค่าเครือข่าย แต่ไม่รองรับ `nftables` เลย หากคุณค้นหา google `site:docs.docker.com nftables` คุณจะพบการเข้าชมเพียงครั้งเดียว
Desultory avatar
pw flag
ทุกอย่างยกเว้น DNS ทำงานได้อย่างสมบูรณ์กับ nftables ปัญหาคือนักเทียบท่าใช้แฮ็กเพื่อให้ DNS ภายในทำงาน
Ginnungagap avatar
gu flag
ฉันมีการตั้งค่าที่เหมือนกันส่วนใหญ่กับ Gentoo โดยไม่มีตัวเลือกเคอร์เนล iptables แบบดั้งเดิมและวิธีเดียวที่ฉันจะทำให้ Docker ใช้งานได้จริงคือเปลี่ยนจุดเข้าใช้งานของคอนเทนเนอร์เพื่อแก้ไข `/etc/resolve.conf` ก่อนเริ่มจุดเข้าใช้งานจริง ฉันนิ่งงันที่ Docker สกปรกโดยเฉพาะอย่างยิ่งเมื่อพวกเขาควรจะมีตัวเลือกในการกำหนดค่า daemon ที่จะไม่แก้ไขการกำหนดค่า iptables ซึ่งส่วนใหญ่ไม่สนใจอยู่ดี
Desultory avatar
pw flag
@Ginnungagap วิธีการที่แน่นอนของคุณในการแก้ไข resolv.conf ของคอนเทนเนอร์คืออะไร ฉันเห็นด้วยที่ไม่ควรสกปรกขนาดนี้ ฉันรู้สึกว่าการระบุตัวเลือก DNS ควรเขียนทับ resolv.conf หรือบางอย่างแทน docker โดยใช้ dns proxying ภายใน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา