กับดักประสิทธิภาพที่ซ่อนอยู่ของ Linux Connection Tracking ต่อ DNS: มุมมองและวิธีแก้ไขจากคอมมูนิตี้

BigGo Editorial Team
กับดักประสิทธิภาพที่ซ่อนอยู่ของ Linux Connection Tracking ต่อ DNS: มุมมองและวิธีแก้ไขจากคอมมูนิตี้

การสนทนาในชุมชนเมื่อเร็วๆ นี้ได้เน้นย้ำถึงปัญหาสำคัญที่มักถูกมองข้ามซึ่งส่งผลกระทบต่อประสิทธิภาพของเซิร์ฟเวอร์ DNS บนระบบ Linux: ผลกระทบของโมดูล connection tracking (conntrack) ต่อการทำงานของ DNS หัวข้อนี้ได้รับความสนใจเมื่อผู้ดูแลระบบพบกับคอขวดด้านประสิทธิภาพ โดยเฉพาะในสภาพแวดล้อม DNS ที่มีการรับส่งข้อมูลสูง

กับดักการโหลดโมดูล Conntrack

ปัญหาที่แอบแฝงอยู่เกิดขึ้นจากงานบริหารจัดการที่ดูเหมือนไม่มีอะไรซับซ้อน ตามที่มีการพูดคุยในชุมชน แม้แต่การดำเนินการพื้นฐานอย่างการแสดงรายการกฎของ iptables ก็สามารถทำให้เกิดการโหลดโมดูล conntrack ซึ่งอาจก่อให้เกิดปัญหาด้านประสิทธิภาพ เนื่องจากค่าจำกัดการเชื่อมต่อสูงสุดที่ตั้งไว้ต่ำเกินไป ปัญหานี้จะยิ่งรุนแรงสำหรับเซิร์ฟเวอร์ DNS หรือระบบที่ต้องทำการค้นหา DNS จำนวนมาก

ความท้าทายในการตั้งค่า

ผู้ดูแลระบบต้องเผชิญกับความซับซ้อนเพิ่มเติมเมื่อพยายามกำหนดค่า conntrack ผ่านวิธีการแบบดั้งเดิม ชุมชนได้ระบุว่าการตั้งค่าพารามิเตอร์ conntrack ใน /etc/sysctl.conf หรือ /etc/sysctl.d มักล้มเหลวเพราะโมดูลอาจยังไม่ถูกโหลดในขณะที่การตั้งค่าเหล่านี้ถูกประมวลผลระหว่างการเริ่มต้นระบบ สิ่งนี้นำไปสู่การพัฒนาวิธีแก้ปัญหา เช่น การโหลดโมดูล nf_conntrack อย่างชัดเจนตั้งแต่ตอนเริ่มต้นระบบ

พารามิเตอร์การกำหนดค่าที่สำคัญ:

  • คีย์ sysctl สมัยใหม่: net.netfilter.nf_conntrack_max
  • ชื่อโมดูล: nf_conntrack
  • บริการที่ได้รับผลกระทบ: DNS (UDP/53)
  • ขอบเขตผลกระทบ: ครอบคลุมทั้งเนมเซิร์ฟเวอร์แบบ authoritative และ recursive resolver

บริบทสมัยใหม่และวิวัฒนาการ

แม้ว่าการอภิปรายเดิมเกี่ยวกับ connection tracking และ DNS จะมาจากเคอร์เนล Linux รุ่นเก่า แต่ปัญหานี้ยังคงมีความเกี่ยวข้องในสภาพแวดล้อมปัจจุบัน ภูมิทัศน์ได้พัฒนาไปพร้อมกับการเปลี่ยนผ่านจาก iptables ไปสู่ nftables และการแพร่หลายของ IPv6 ที่เพิ่มขึ้นได้เพิ่มความซับซ้อนให้กับการทำงานของ DNS เนื่องจากระบบสมัยใหม่ส่วนใหญ่ต้องจัดการทั้งคำขอ IPv4 และ IPv6 พร้อมกัน

ข้อพิจารณาด้านความปลอดภัยและประสิทธิภาพ

มีการถกเถียงที่น่าสนใจเกี่ยวกับความสมดุลระหว่างความปลอดภัยและประสิทธิภาพ ในขณะที่บางคนเสนอให้ย้าย DNS ไปใช้ TCP เท่านั้นเพื่อป้องกันการโจมตีแบบขยาย คนอื่นๆ ชี้ให้เห็นว่าวิธีนี้จะสร้างปัญหาใหม่กับพอร์ตชั่วคราวและสถานะ TIME_WAIT ฉันทามติของชุมชนแนะนำว่าวิธีแก้ปัญหาที่แท้จริงอยู่ที่การกำหนดค่าเครือข่ายที่เหมาะสมและการปฏิบัติตามแนวทางที่ดีที่สุดเช่น BCP38 เพื่อป้องกันการปลอมแปลงที่อยู่ต้นทาง

วิธีแก้ปัญหาในทางปฏิบัติ

สำหรับผู้ดูแลระบบที่กำลังจัดการกับปัญหาเหล่านี้ มีหลายแนวทางที่เกิดขึ้นจากชุมชน:

  1. การตั้งค่า nf_conntrack_max ให้สูงขึ้นแต่เนิ่นๆ
  2. การโหลดโมดูล conntrack อย่างชัดเจนตั้งแต่ตอนเริ่มต้นระบบ
  3. พิจารณาว่าจำเป็นต้องใช้ connection tracking สำหรับการรับส่งข้อมูล DNS หรือไม่
  4. การใช้มาตรการรักษาความปลอดภัยเครือข่ายที่เหมาะสมโดยไม่พึ่งพา connection tracking เพียงอย่างเดียว

การอภิปรายที่ดำเนินอยู่แสดงให้เห็นว่าแม้ Linux connection tracking จะทำหน้าที่ด้านความปลอดภัยที่สำคัญ แต่การทำงานร่วมกับบริการ DNS ต้องการการพิจารณาและการกำหนดค่าอย่างรอบคอบเพื่อหลีกเลี่ยงปัญหาคอขวดด้านประสิทธิภาพ

แหล่งอ้างอิง: Linux connection tracking and DNS