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

ข้อผิดพลาดเกิดขึ้นก่อนที่เพียร์ใดจะพูด

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

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

การใช้งานใดควรเป็นเจ้าของอุปกรณ์

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

ตรวจสอบว่ามีอะไรอยู่จริงก่อนเลือกระหว่างสองทาง คำสั่งแรกแสดงว่าโมดูลถูกโหลดหรือไม่ และคำสั่งที่สองถามเคอร์เนลโดยตรง:

lsmod | grep wireguard
ip link add wgtest0 type wireguard

คำสั่งที่สองคือการทำซ้ำที่เล็กที่สุดเท่าที่เป็นไปได้: ขออุปกรณ์และไม่ขอสิ่งอื่น หากล้มเหลวพร้อมข้อความชนิดที่ไม่รองรับ ส่วนที่ขาดคือการใช้งาน ไม่ใช่ไฟล์กำหนดค่าของคุณ

Error textWhat refusedNext step
Unknown device type or operation not supportedThe kernel has no wireguard driverLoad the module or use the userspace implementation
Operation not permittedMissing privilegeUse the service context or grant the capability
File existsThe name is already in useInspect the owner before touching it
No such device in a containerNo tunnel device or capabilityAdd the device and NET_ADMIN to the container

สิทธิ์และขอบเขตของคอนเทนเนอร์

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

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

แก้ความขัดแย้งของชื่อ แล้วลองอีกครั้ง

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

ip link show wg0
sudo wg show wg0

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

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

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