تعذر على 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
إذا كان المالك خدمة نشطة، فاهيئ تلك الخدمة بدل إنشاء جهاز ثانٍ. وإذا كان قديمًا فعلًا، فأزله عبر الأداة التي أنشأته، ثم ارفع الواجهة بالعميل أو الوحدة الموثقة حتى يبقى الإعداد والجهاز متوافقين.
بعد نجاح الإنشاء، ينتمي الفشل التالي إلى مرحلة لاحقة، ووحدة تبلّغ عن فشل بعد وجود الجهاز مشكلة مختلفة عن جهاز لم يُنشأ قط. افصل بينهما قبل تغيير الصلاحيات مرة أخرى.