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
اگر مالک سرویسی فعال است، همان سرویس را پیکربندی کنید و دستگاه دومی نسازید. اگر واقعاً کهنه است، آن را با ابزاری که ساخته بود حذف کنید، و سپس رابط را با کارخواه یا واحدی که مستند شده بالا بیاورید تا پیکربندی و دستگاه همگام بمانند.
پس از موفقیت ساخت، شکست بعدی به مرحلهای دیرتر تعلق دارد، و واحدی که پس از وجود دستگاه شکست را گزارش میکند، مسئلهای متفاوت از دستگاهی است که هرگز ساخته نشد. پیش از تغییر دوباره مجوزها این دو را جدا کنید.