เนมเซิร์ฟเวอร์ของ 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 ที่ล้าสมัยและโผล่กลับมาหลังตัดการเชื่อมต่อคือบั๊กวงจรชีวิตในการผสานรวมฝั่งไคลเอนต์. การย้ายไปไว้ล่างสุดซ่อนอาการและทิ้งตัวแก้ชื่อที่ตายแล้วไว้ในรายการ

ปลดมันออกผ่านองค์ประกอบที่ลงทะเบียนมันไว้ แล้วยืนยันว่าไดเรกทอรีระเบียนไม่แสดงมันอีก

บันทึกชื่อผู้ให้บริการ แพตเทิร์นที่คุณแก้ และการค้นหาสองครั้งที่คุณรัน คนถัดไปต้องการชื่อเหล่านั้นมากกว่าเรื่องราว

บทความที่เกี่ยวข้อง