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

สภาพบางส่วนคือความล้มเหลวปกติ

พฤติกรรมนั้นควรคาดหมาย ไม่ใช่ถือว่าเสียหาย อินเทอร์เฟซเป็นส่วนที่ถูกที่สุดของการตั้งค่าและทิ้งไว้ได้ง่ายที่สุด และเป็นส่วนที่ทำให้เครื่องดูเหมือนทำงานครึ่งเดียว

สิ่งที่ยังไม่มีคือทุกสิ่งทุกอย่างที่ตามมาหลังขั้นตอนที่ล้มเหลว หากความล้มเหลวอยู่ที่ขั้นตอนของตัวแปลงชื่อ แอดเดรสและเส้นทางมีอยู่ แต่ DNS ไม่มี หากเป็นเส้นทาง อุโมงค์มีแอดเดรสและไม่มีทางผ่าน

ผลลัพธ์คือเครื่องที่ตอบแบบทดสอบบางอย่างและล้มเหลวในข้ออื่น ซึ่งเป็นเหตุให้คนสรุปว่าบริการกระพริบทั้งที่มันไม่เคยเริ่มได้สำเร็จ บริการที่ไม่เคยเสร็จสิ้นย่อมกระพริบไม่ได้ มันทำได้เพียงล้มเหลวซ้ำ ๆ ด้วยเหตุผลเดิม

หาขั้นตอนแรกที่ล้มเหลว

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

คำสั่งเหล่านี้พิมพ์สถานะของยูนิต บันทึกการบูตของยูนิตนั้น และสถานะสดของอุโมงค์

systemctl status wg-quick@wg0
journalctl -u wg-quick@wg0 -b --no-pager | tail -40
wg show
ip -4 addr show dev wg0

ข้อผิดพลาดของตัวแปลงชื่อ เส้นทางที่มีอยู่แล้ว ฮุกที่ออกด้วยโค้ดที่ไม่ใช่ศูนย์ และความล้มเหลวในการแยกวิเคราะห์การตั้งค่า ล้วนปรากฏในหน้าต่างนั้น และแต่ละอย่างระบุองค์ประกอบของตัวเอง การเดาจากสถานะอินเทอร์เฟซเพียงอย่างเดียวละเลยข้อมูลทั้งหมดนั้น

สามเงื่อนไขที่กำหนดการซ่อม

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

หากอินเทอร์เฟซเสียแต่การตั้งค่าถูกต้อง ให้ล้างแล้วเริ่มใหม่ หากการตั้งค่าผิด ให้แก้ไขและยังคงล้างก่อน เพราะการเริ่มตัวจัดการตัวที่สองบนสภาพบางส่วนจะสร้างเจ้าของสองรายสำหรับอินเทอร์เฟซเดียว หากความล้มเหลวคือองค์ประกอบระบบที่ขาดหาย เช่น ตัวช่วยตัวแปลงชื่อที่เครื่องไม่มี ให้ติดตั้งหรือถอนการพึ่งพานั้นอย่างตั้งใจ แทนที่จะแก้ไขยูนิตจนกว่ามันจะเลิกบ่น

สามกรณีนั้นครอบคลุมส่วนใหญ่ของสิ่งที่ดูเหมือนยูนิตสีแดงลึกลับ คำถามที่แยกแยะคือความล้มเหลวเดิมจะเกิดขึ้นบนเครื่องที่มีสภาพสะอาดหรือไม่ และคำตอบมักมาจากบรรทัดข้อผิดพลาดแรก

ล้างก่อนลองใหม่

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

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

พิสูจน์อุโมงค์ ไม่ใช่ยูนิต

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

ส่งคำขอผ่านอุโมงค์และอ่านสถานะที่สร้างมันขึ้นมา

systemctl is-active wg-quick@wg0
wg show wg0 latest-handshakes
ping -c 3 10.63.0.1
resolvectl query internal.example.net

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

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