ลำดับระเบียนของ resolvconf บน Debian: วางระเบียน VPN ไว้ก่อน
เนมเซิร์ฟเวอร์ของ VPN ตกลงไปอยู่ใต้ของ LAN อยู่เรื่อยเพราะ resolvconf เรียงชื่อระเบียน แก้ interface-order สร้างใหม่แล้วตรวจสอบสองการค้นหา
เนมเซิร์ฟเวอร์ของ VPN ตกลงไปอยู่ใต้เนมเซิร์ฟเวอร์ของ LAN อยู่เรื่อย และการแก้ /etc/resolv.conf ก็ช่วยได้เพียงไม่กี่นาที ไฟล์นั้นถูกสร้างขึ้นใหม่ การแก้จึงไม่คงอยู่ตลอดไป ใน resolvconf ของ Debian อินพุตของลำดับคือ /etc/resolvconf/interface-order และมันเรียงชื่อระเบียนไม่ใช่ที่อยู่ DNS ยืนยันให้แน่ชัดว่าสแตกของตัวแก้ชื่อใดเป็นผู้รับผิดชอบจริงก่อนแตะไฟล์ใดไฟล์หนึ่งในสองไฟล์
ยืนยันว่า resolvconf เป็นเจ้าของเอาต์พุต
เริ่มด้วยการถามว่าอะไรเป็นคนเขียนไฟล์ปัจจุบันและอะไรจะเขียนมันอีกครั้ง แพ็กเกจ resolvconf อธิบายตัวเองว่าเป็นโครงสำหรับการกำหนดค่าตัวแก้ชื่อแบบไดนามิก และโฮสต์ที่รัน systemd-resolved หรือตัวแก้ชื่อที่ NetworkManager จัดการอาจดูเหมือนกันจากภายนอกแต่ใช้แนวนโยบายที่ต่างกันโดยสิ้นเชิง
readlink -f /etc/resolv.conf
dpkg -l resolvconf 2>/dev/null | tail -n 1
ถ้าเส้นทางที่แก้แล้วไม่ได้นำเข้าไดเรกทอรีรันไทม์ของ resolvconf ให้หยุดตรงนี้ คู่มือนี้เป็นของสแตกอื่น
หลังการตรวจนั้นแล้วจึงคุ้มค่าที่จะแสดงรายการระเบียนที่ resolvconf ถืออยู่ในตอนนี้
อ่านระเบียนก่อนเขียนแพตเทิร์น
interface-order จับคู่กับชื่อระเบียนของผู้ให้บริการ ไม่ใช่ที่อยู่และไม่ใช่ชื่ออินเทอร์เฟซของเคอร์เนล แสดงรายการสิ่งที่ลงทะเบียนไว้เพื่อให้แพตเทิร์นของคุณอ้างถึงรายการที่มีอยู่จริง
ls /run/resolvconf/interfaces
cat /etc/resolvconf/interface-order
ชื่อระเบียนมักมีคำต่อท้ายที่ระบุผู้ให้บริการ ดังนั้นระเบียนอุโมงค์และระเบียน DHCP อาจใช้คำนำหน้าอินเทอร์เฟซร่วมกันแต่ยังเรียงต่างกันได้ คัดลอกชื่อที่ถูกต้องจากรายการไดเรกทอรี อย่าเดาชื่อจากชื่ออินเทอร์เฟซ เพราะการผสานรวมฝั่งไคลเอนต์เป็นผู้ตัดสินว่าจะลงทะเบียนอะไร ชื่อที่คุณคิดขึ้นเองจะไม่มีวันตรงกัน และระเบียนจะตกลงไปที่แพตเทิร์นที่จับทุกอย่างโดยไม่มีข้อความแสดงข้อผิดพลาดใด ๆ
เขียนลำดับเป็นแพตเทิร์นแบบตรงกันแรก
ไฟล์นี้เป็นรายการแพตเทิร์น glob ของเชลล์ บรรทัดละหนึ่งรายการ ระเบียนจะได้ตำแหน่งของแพตเทิร์นแรกที่มันตรงด้วย ดังนั้นแพตเทิร์นกว้างที่อยู่เหนือแพตเทิร์นเฉพาะจะทำให้บรรทัดเฉพาะนั้นเข้าถึงไม่ได้
# /etc/resolvconf/interface-order
lo*
tun_work.*
enp*
*
วางแพตเทิร์นอุโมงค์ที่เฉพาะเจาะจงไว้เหนือแพตเทิร์นที่จับทุกอย่างและเหนือแพตเทิร์นของอินเทอร์เฟซจริง
เก็บบรรทัดอื่นที่ไฟล์มีอยู่เดิมไว้ การแทนนโยบายทั้งหมดด้วยตัวอย่างคือวิธีที่ผู้ให้บริการที่ไม่เกี่ยวข้องกันเคลื่อนที่อย่างเงียบ ๆ เปลี่ยนสักบรรทัด สร้างใหม่แล้วเปรียบเทียบ แพตเทิร์นต้องไม่มีช่องว่าง เครื่องหมายทับ หรือจุดหรือทิลด์นำหน้า และบรรทัดว่างกับคอมเมนต์แบบแฮชจะถูกข้ามไป
สร้างใหม่และตรวจสอบผลลัพธ์
ลำดับมีผลเมื่อสคริปต์อัปเดตสร้างไฟล์ใหม่ เรียกใช้เส้นทางการอัปเดตที่รองรับแทนการแก้เอาต์พุตที่สร้างขึ้น แล้วอ่านสิ่งที่ตัวแก้ชื่อได้รับจริง
resolvconf -u
cat /etc/resolv.conf
ตรวจสอบสองการค้นหาไม่ใช่หนึ่ง คือชื่อส่วนตัวที่ควรแก้ผ่านอุโมงค์และชื่อควบคุมสาธารณะ ถ้าชื่อส่วนตัวยังล้มเหลวทั้งที่ลำดับดูถูกต้อง ปัญหาคือการกำหนดเส้นทางเนมสเปซไม่ใช่ลำดับความสำคัญของระเบียน และการจัดเรียงใหม่เท่าไรก็ไม่ช่วย เปรียบเทียบทุกคำตอบกับเซิร์ฟเวอร์ที่ส่งกลับมา ไม่ใช่แค่ดูว่าสำเร็จ ชื่อส่วนตัวที่ตัวแก้ชื่อผิดเป็นผู้ตอบก็ยังถือว่าล้มเหลว และสำหรับผู้ใช้มันดูเหมือน DNS ขัดข้อง
ปลดระเบียนที่ล้าสมัยออกแทนที่จะลดลำดับความสำคัญ
ระเบียน VPN ที่ล้าสมัยและโผล่กลับมาหลังตัดการเชื่อมต่อคือบั๊กวงจรชีวิตในการผสานรวมฝั่งไคลเอนต์. การย้ายไปไว้ล่างสุดซ่อนอาการและทิ้งตัวแก้ชื่อที่ตายแล้วไว้ในรายการ
ปลดมันออกผ่านองค์ประกอบที่ลงทะเบียนมันไว้ แล้วยืนยันว่าไดเรกทอรีระเบียนไม่แสดงมันอีก
บันทึกชื่อผู้ให้บริการ แพตเทิร์นที่คุณแก้ และการค้นหาสองครั้งที่คุณรัน คนถัดไปต้องการชื่อเหล่านั้นมากกว่าเรื่องราว