WireGuard สร้างอินเทอร์เฟซไม่ได้: เคอร์เนลหรือสิทธิ์?
การสร้างอินเทอร์เฟซล้มเหลวก่อนที่เพียร์ใดจะส่งแฮนด์เชก อ่านข้อผิดพลาดเพื่อแยกระหว่างโมดูลที่หายไป ขอบเขตสิทธิ์ หรือเจ้าของอินเทอร์เฟซที่มีอยู่แล้ว
WireGuard สร้างอินเทอร์เฟซของตัวเองไม่ได้ จึงไม่มีอุปกรณ์ให้กำหนดค่า ไม่มีคีย์ให้แลกเปลี่ยน และไม่มีแฮนด์เชกให้ตรวจแก้ ความล้มเหลวอยู่บนเครื่องท้องถิ่นทั้งหมด และข้อความข้อผิดพลาดบอกว่าส่วนใดของสแตกท้องถิ่นปฏิเสธ การอ่านอย่างถูกต้องเร็วกว่าการติดตั้งการกำหนดค่าของเพียร์ใหม่ ชั้นต่าง ๆ แยกจากกันได้ และข้อความระบุชื่อชั้นที่ปฏิเสธ
ข้อผิดพลาดเกิดขึ้นก่อนที่เพียร์ใดจะพูด
การสร้างอินเทอร์เฟซคือคำขอ netlink ครั้งเดียวไปยังเคอร์เนลเพื่อขออุปกรณ์ชนิด wireguard เคอร์เนลมีไดรเวอร์ที่เข้าใจชนิดนั้นหรือไม่มี และคำตอบกลับมาทันที ในขั้นนี้ไม่มีแพ็กเก็ตใดออกจากเครื่อง ดังนั้นที่อยู่ปลายทางและคีย์ของเซิร์ฟเวอร์จึงเป็นสาเหตุไม่ได้
ลำดับนี้สำคัญต่อการวินิจฉัย หากคำสั่งไม่เคยสร้างอุปกรณ์ ปัญหาจะเป็นคีย์สาธารณะผิดหรือพอร์ต UDP ที่ถูกบล็อกไม่ได้ แก้เส้นทางการสร้างในเครื่องก่อน แล้วค่อยมองออกไปข้างนอก
การใช้งานใดควรเป็นเจ้าของอุปกรณ์
การใช้งานสองแบบสามารถตอบคำขอนั้นได้ โมดูลในเคอร์เนลลงทะเบียนชนิดอุปกรณ์ wireguard และการใช้งานในพื้นที่ผู้ใช้อย่าง wireguard-go ให้อินเทอร์เฟซเดียวกันผ่านกลไกอื่น หากไม่มีโมดูล เคอร์เนลจะปฏิเสธคำขอพร้อมข้อผิดพลาดอุปกรณ์ที่ไม่รองรับ และทางแก้คือโหลดโมดูลหรือชี้เครื่องมือไปที่การใช้งานในพื้นที่ผู้ใช้
ตรวจสอบว่ามีอะไรอยู่จริงก่อนเลือกระหว่างสองทาง คำสั่งแรกแสดงว่าโมดูลถูกโหลดหรือไม่ และคำสั่งที่สองถามเคอร์เนลโดยตรง:
lsmod | grep wireguard
ip link add wgtest0 type wireguard
คำสั่งที่สองคือการทำซ้ำที่เล็กที่สุดเท่าที่เป็นไปได้: ขออุปกรณ์และไม่ขอสิ่งอื่น หากล้มเหลวพร้อมข้อความชนิดที่ไม่รองรับ ส่วนที่ขาดคือการใช้งาน ไม่ใช่ไฟล์กำหนดค่าของคุณ
| Error text | What refused | Next step |
|---|---|---|
| Unknown device type or operation not supported | The kernel has no wireguard driver | Load the module or use the userspace implementation |
| Operation not permitted | Missing privilege | Use the service context or grant the capability |
| File exists | The name is already in use | Inspect the owner before touching it |
| No such device in a container | No tunnel device or capability | Add the device and NET_ADMIN to the container |
สิทธิ์และขอบเขตของคอนเทนเนอร์
การสร้างและกำหนดค่าอุปกรณ์เครือข่ายต้องใช้สิทธิ์ ไม่ว่าจะเป็น root หรือมีความสามารถในการบริหารเครือข่าย เซสชันผู้ใช้ปกติทำไม่ได้ และข้อจำกัดนั้นคือการออกแบบ ไม่ใช่อุปสรรคที่ต้องหลบเลี่ยงด้วยการเรียกใช้ตัวติดตั้งที่คุณไม่ได้ตรวจสอบ
ภายในคอนเทนเนอร์ ขอบเขตเพิ่มเป็นสองเท่า คอนเทนเนอร์ต้องเข้าถึงอุปกรณ์อุโมงค์และมีความสามารถในการกำหนดค่า และแฟล็กที่ให้สิ่งนั้นเป็นตัวเดียวกับที่คอนเทนเนอร์ VPN บน Linux ใช้ แขกที่ถูกจำกัดซึ่งท่องเว็บได้ตามปกติก็ยังสร้างอินเทอร์เฟซไม่ได้ เพราะการท่องเว็บไม่ต้องใช้ความสามารถนั้น ให้ความสามารถแก่บริการที่ต้องการ ไม่ใช่ทุกเซสชันบนโฮสต์
แก้ความขัดแย้งของชื่อ แล้วลองอีกครั้ง
อินเทอร์เฟซที่มีอยู่แล้วไม่ใช่ของตกค้างโดยอัตโนมัติ ตัวจัดการอื่นอาจเป็นเจ้าของชื่อและกำลังใช้งานอยู่ตอนนี้ จึงตรวจสอบก่อนลบสิ่งใด:
ip link show wg0
sudo wg show wg0
หากเจ้าของเป็นบริการที่ทำงานอยู่ ให้กำหนดค่าบริการนั้นแทนการสร้างอุปกรณ์ที่สอง หากเก่าจริง ให้ลบผ่านเครื่องมือที่สร้างมันขึ้นมา แล้วยกอินเทอร์เฟซขึ้นด้วยไคลเอนต์หรือยูนิตตามเอกสาร เพื่อให้การกำหนดค่าและอุปกรณ์สอดคล้องกัน
เมื่อการสร้างสำเร็จ ความล้มเหลวถัดไปเป็นของขั้นตอนที่มาทีหลัง และยูนิตที่รายงานความล้มเหลวหลังจากอุปกรณ์มีอยู่แล้วเป็นปัญหาคนละอย่างกับอุปกรณ์ที่ไม่เคยถูกสร้างขึ้น แยกสองสิ่งนี้ออกก่อนเปลี่ยนสิทธิ์อีกครั้ง