چرا WireGuard در MikroTik RouterOS 7.24 بعد از ریبوت وصل نمی‌شود
میکروتیک

چرا WireGuard در MikroTik RouterOS 7.24 بعد از ریبوت وصل نمی‌شود؟ + ۵ روش تشخیص و رفع مشکل

چرا WireGuard در MikroTik RouterOS 7.24 بعد از ریبوت وصل نمی‌شود؟ + ۵ روش تشخیص و رفع مشکل

اگر از RouterOS 7.24 استفاده می‌کنید و بعد از هر ریبوت، تونل WireGuard شما از کار می‌افتد، تنها نیستید. این یک باگ شناخته‌شده در نسخه 7.24 است که باعث می‌شود peer‌های WireGuard بعد از reboot یا disable/enable مجدداً در data plane نصب نشوند و ترافیک عبور نکند. در این مقاله، علت اصلی، ۵ روش تشخیص و رفع مشکل، و روش‌های پیشگیری را به‌صورت گام‌به‌گام بررسی می‌کنیم.

⚠️ هشدار مهم: اگر با نسخه 7.24 مشکل دارید، توصیه می‌شود قبل از هر اقدام، یک نسخه پشتیبان از کانفیگ RouterOS تهیه کنید. تغییرات نادرست در تنظیمات WireGuard می‌تواند منجر به قطع کامل دسترسی شود.

علت مشکل WireGuard بعد از ریبوت در RouterOS 7.24 چیست؟

در RouterOS 7.24، یک باگ در نحوه مدیریت state مربوط به peer‌های WireGuard وجود دارد. زمانی که روتر reboot می‌شود یا یک peer غیرفعال و دوباره فعال می‌شود، peer مربوطه به‌درستی در data plane نصب نمی‌شود. نتیجه این می‌شود که:

🔹 Interface وضعیت R (Running) نشان می‌دهد

🔹 Peer فعال است اما current-endpoint-address خالی و rx=0, tx=0 است

🔹 هیچ handshake رخ نمی‌دهد و ترافیک با خطای ENOKEY رد می‌شود

🔹 flush کردن connection tracking، disable/enable مجدد peer و حتی interface مشکل را حل نمی‌کند

این مشکل مخصوص RouterOS 7.24 است و در نسخه‌های قبلی (7.23.x) وجود نداشت. در واقع، در نسخه 7.24 مکانیزم disable/enable state handling مربوط به WireGuard تغییر کرده و باگ وارد شده است.

۵ روش تشخیص و رفع مشکل WireGuard در RouterOS 7.24

روش ۱: بررسی وضعیت Handshake و ترافیک Peer

اولین قدم تشخیص، بررسی وضعیت دقیق peer در ترمینال RouterOS است. اگر فیلدهای rx و tx صفر باشند و last-handshake خالی یا قدیمی باشد، یعنی peer در data plane نصب نشده است:

/interface/wireguard/peers/print detail

در خروجی این دستور، به دنبال مقادیر غیرصفر در rx و tx باشید. اگر همه صفر بودند و handshake‌ای ثبت نشده بود، مشکل همان باگ نسخه 7.24 است.

روش ۲: ترفند Toggle Responder (راه‌حل فوری)

سریع‌ترین راه‌حل بدون ریبوت، استفاده از دستورات زیر در ترمینال RouterOS است. این روش باعث می‌شود peer مجدداً به data plane تزریق شود:

/interface/wireguard/peers/set [find name="peer-name"] responder=yes
/interface/wireguard/peers/set [find name="peer-name"] responder=no

به‌جای peer-name نام دقیق peer خود را قرار دهید. بلافاصله بعد از اجرای این دو دستور، peer شروع به ارسال و دریافت بسته‌ها می‌کند و تونل دوباره برقرار می‌شود.

📌 نکته: می‌توانید این کار را برای همه peer‌ها به‌صورت یکجا انجام دهید. کافی است در دستور بالا، [find name=”peer-name”] را با [find] جایگزین کنید تا روی تمام peer‌ها اعمال شود.

روش ۳: بررسی Endpoint و Firewall

گاهی مشکل فقط باگ 7.24 نیست و ممکن است endpoint یا تنظیمات firewall مانع برقراری تونل شده باشد. برای تشخیص:

🔹 current-endpoint-address را بررسی کنید؛ اگر خالی باشد، peer هنوز نمی‌داند بسته‌ها را به کجا بفرستد.

🔹 در /ip/firewall/filter مطمئن شوید پورت UDP مربوط به WireGuard باز است.

🔹 در /ip/firewall/nat بررسی کنید که NAT rule مربوط به WireGuard حذف یا اشتباه تنظیم نشده باشد.

🔹 با دستور /ping از سمت روتر به endpoint peer، دسترسی شبکه‌ای را تست کنید.

روش ۴: ارتقاء به RouterOS 7.24.1 یا بالاتر (راه‌حل قطعی)

شرکت MikroTik در نسخه 7.24.1 این باگ را رسماً برطرف کرده است. در changelog این نسخه آمده است:

🔹 wireguard – fix peer disable/enable state handling, which could leave the tunnel non-functional (introduced in v7.24)

🔹 wireguard – fix private key handling, including empty private keys

بنابراین اگر با این مشکل مواجه هستید، بهترین و پایدارترین راه‌حل، ارتقاء RouterOS به نسخه 7.24.1 یا بالاتر است.

روش ۵: اسکریپت Watchdog خودکار (راه‌حل موقت)

اگر به هر دلیلی نمی‌توانید RouterOS را به‌روزرسانی کنید، می‌توانید از یک اسکریپت Scheduler استفاده کنید که به‌صورت دوره‌ای وضعیت peer‌ها را بررسی کرده و در صورت نیاز، آنها را ری‌ست کند:

:local timeoutSec 130

:foreach i in=[/interface/wireguard/peers/find] do={
    :local hs [/interface/wireguard/peers/get $i last-handshake]
    :local name [/interface/wireguard/peers/get $i name]
    :if ([:len $hs] > 0) do={
        :local h [:tonum [:pick $hs 0 2]]
        :local m [:tonum [:pick $hs 3 5]]
        :local s [:tonum [:pick $hs 6 8]]
        :local age ($h * 3600 + $m * 60 + $s)
        :if ($age > $timeoutSec) do={
            /interface/wireguard/peers/disable $i
            :delay 1
            /interface/wireguard/peers/enable $i
            :log warning "WG peer $name restarted: handshake $age sec ago"
        }
    } else={
        :log debug "WG peer $name never connected: no handshake"
    }
}

این اسکریپت را می‌توانید در /system/scheduler با بازه زمانی دلخواه (مثلاً هر 2 دقیقه) اجرا کنید.

📌 راه‌حل اصولی برای محیط‌های Production

اگر از WireGuard در محیط عملیاتی و حساس استفاده می‌کنید، هیچ راه‌حل موقتی جای ارتقاء به نسخه پایدار را نمی‌گیرد. ایرانیکاسرور سرورهای مجازی میکروتیک با RouterOS 7.24.x و نسخه‌های پایدارتر را با کانفیگ اولیه WireGuard آماده ارائه می‌کند.

🔹 سرور مجازی میکروتیک ایران: مشاهده و سفارش

چرا Peer بعد از Disable/Enable دوباره وصل نمی‌شود؟

در RouterOS 7.24، مکانیزم داخلی peer state management دچار نقص شده است. وقتی یک peer غیرفعال می‌شود، اطلاعات آن از data plane حذف می‌شود، اما هنگام فعال‌سازی مجدد، مسیر بازگشت به data plane به‌درستی طی نمی‌شود. این مشکل به‌ویژه زمانی رخ می‌دهد که:

🔹 چند peer روی یک interface تعریف شده باشد

🔹 از Responder برای برخی peer‌ها استفاده شود

🔹 بعد از تغییر endpoint یا IP، peer بخواهد مجدداً متصل شود

🔹 روتر reboot شود و peer‌ها از حافظه پاک شده باشند

در نسخه‌های بعدی (7.24.1 به بعد) این مشکل برطرف شده و peer‌ها به‌درستی در data plane نصب می‌شوند.

بهترین مشخصات سرور مجازی برای RouterOS و WireGuard

اگر قصد دارید RouterOS را روی سرور مجازی اجرا کنید، انتخاب مشخصات مناسب تأثیر مستقیمی بر پایداری تونل‌های WireGuard دارد. برای محیط‌های production با چندین تونل همزمان، حداقل مشخصات زیر توصیه می‌شود:

🔹 CPU: حداقل 2 هسته (برای چند peer و ترافیک رمزنگاری‌شده)

🔹 RAM: حداقل 1GB (RouterOS CHR به حافظه کافی نیاز دارد)

🔹 دیسک: حداقل 2GB فضای ذخیره‌سازی

🔹 شبکه: پهنای باند پایدار و IP اختصاصی

🔹 سیستم‌عامل: RouterOS CHR نسخه 7.24.1 یا بالاتر

ایرانیکاسرور سرور مجازی میکروتیک با منابع اختصاصی، دیسک NVMe و پشتیبانی 24/7 ارائه می‌کند که برای راه‌اندازی WireGuard و RouterOS کاملاً بهینه شده است.

جمع‌بندی و توصیه نهایی

مشکل WireGuard بعد از ریبوت در RouterOS 7.24 یک باگ شناخته‌شده است که با ۵ روش زیر برطرف می‌شود:

روش ۱: بررسی وضعیت handshake و ترافیک peer

روش ۲ (فوری): Toggle کردن فیلد responder برای peer مورد نظر

روش ۳: بررسی endpoint و تنظیمات firewall

روش ۴ (قطعی): ارتقاء RouterOS به نسخه 7.24.1 یا بالاتر

روش ۵ (موقت): اجرای اسکریپت Watchdog برای ری‌ست خودکار peer‌های گیرکرده

سوالات متداول (FAQ)

آیا این مشکل در RouterOS 7.24.1 برطرف شده است؟

بله، در نسخه 7.24.1 این باگ به‌صورت رسمی برطرف شده است. در changelog این نسخه به رفع مشکل peer disable/enable state handling اشاره شده است.

چرا بعد از reboot، peer من rx=0 و tx=0 نشان می‌دهد؟

این نشانه اصلی باگ RouterOS 7.24 است. peer در data plane نصب نشده و به همین دلیل بسته‌ای ارسال یا دریافت نمی‌کند. با toggle responder یا reboot مجدد مشکل موقتاً برطرف می‌شود.

آیا downgrade به 7.23.x مشکل را حل می‌کند؟

در برخی موارد downgrade RouterOS به 7.23.x راه‌حل بوده، اما ممکن است firmware دستگاه همچنان 7.24 باقی بماند و مشکل ادامه یابد. بهترین راه‌حل، ارتقاء به 7.24.1 یا بالاتر است.

آیا اسکریپت Watchdog روی performance تأثیر دارد؟

خیر، اسکریپت بسیار سبک است و هر چند دقیقه یک‌بار اجرا می‌شود. فقط در صورت نیاز، peer را ری‌ست می‌کند و تأثیر محسوسی بر CPU یا حافظه ندارد.

برای چند peer همزمان چه مشخصاتی از سرور مجازی نیاز است؟

برای بیش از 10 peer همزمان، حداقل 2 vCPU و 2GB RAM توصیه می‌شود. ایرانیکاسرور سرورهای میکروتیک با منابع اختصاصی و امکان ارتقاء ارائه می‌کند.

🛠 مشکل WireGuard یا RouterOS خود را به ما بسپارید

اگر در تنظیمات WireGuard یا RouterOS با چالش مواجه شده‌اید، تیم فنی ایرانیکاسرور آماده کمک است. کافیست درخواست خود را ثبت کنید تا کارشناسان ما در سریع‌ترین زمان بررسی کنند.

🔹 ثبت درخواست کانفیگ و رفع مشکل

📞 تماس با پشتیبانی: 021-91302460 | ایرانیکاسرور

🎯 چالش آموزشی
مباحثی که در این مقاله یاد گرفتید را در عمل پیاده‌سازی کنید و نتیجه را با ما به اشتراک بگذارید.
شروع چالش

💬 دیدگاه‌ها 0

هنوز دیدگاهی ثبت نشده است. اولین نفری باشید که نظر می‌دهید!

✍️ دیدگاه خود را بنویسید