راهاندازی کامل و امن WireGuard VPN روی MikroTik CHR (RouterOS v7+)
مقدمه
WireGuard یک پروتکل VPN سبک، سریع و امن است که با طراحی مدرن و استفاده از الگوریتمهای رمزنگاری بهروز مثل Curve25519 و ChaCha20، سرعت و امنیت بالاتری نسبت به پروتکلهای سنتی ارائه میدهد. این پروتکل با کاهش پیچیدگیهای پیکربندی — حذف نیاز به SSL Certificateها، حسابهای کاربری و استخرهای IP پیچیده — نصب و نگهداری آسانتری دارد و برای محیطهای ابری و دستگاههای متنوع از جمله Windows، macOS، Linux، iOS و Android مناسب است. مصرف کم منابع و تاخیر پایین آن باعث میشود برای اتصالات پرترافیک و دستگاههای موبایل نیز ایدهآل باشد.
در محیطهای سرور میکروتیک CHR با RouterOS v7 به بالا، پشتیبانی از WireGuard بهصورت یکپارچه فراهم شده است و میتوان سرورهای VPN کارآمدی را روی روترهای مجازی یا فیزیکی پیادهسازی کرد. استفاده از WireGuard در CHR امکان تنظیم سریع رابطها، تعریف peers با کلیدهای عمومی/خصوصی، و مدیریت ساده فایروال و NAT را میدهد؛ که این امر بهخصوص برای ارائهدهندگان سرویس ابری یا مدیران شبکه که نیاز به راهاندازی سریع و مقیاسپذیر دارند، بسیار مفید است.
پیشنیازها
– دستگاه MikroTik CHR یا هر دستگاه MikroTik با پشتیبانی از CPU x86/ARM و RouterOS v7+
– یک شبکه خصوصی برای رابط WireGuard (مثلاً 192.168.34.0/24)
– دستگاههای کلاینت برای اتصال (Windows, macOS, Android, iOS, Linux)
– دسترسی به WinBox/WebFig یا SSH به دستگاه CHR
1) بهروزرسانی CHR به RouterOS v7
برای بهرهبرداری از قابلیتهای کامل WireGuard در MikroTik CHR لازم است سیستمعامل RouterOS به نسخه v7 یا بالاتر ارتقا یابد. فرایند ارتقا از طریق منوی System > Packages در WinBox/WebFig یا با دستورات CLI ساده قابل انجام است: ابتدا با دستور check-for-updates نسخه جدید را بررسی، سپس آن را دانلود و در نهایت با reboot سیستم را راهاندازی مجدد کنید. اگر دستگاه شما هنوز روی v6 است، تغییر channel به “upgrade” ممکن است برای دریافت نسخه v7 ضروری باشد. قبل از هر ارتقا تهیه پشتیبان از پیکربندی دستگاه و اطمینان از سازگاری بستهها و لایسنسها الزامی است تا در صورت بروز مشکل بازگشت به تنظیمات قبلی امکانپذیر باشد.

از منوی System > Packages گزینه Check for updates را بزنید، سپس دانلود و ریبوت کنید. یا از CLI:
/system package update check-for-updates /system package update download /system reboot
2) ساخت رابط WireGuard و تخصیص IP
ایجاد رابط WireGuard در MikroTik بسیار ساده است: از منوی Interfaces گزینه WireGuard را انتخاب و با مشخص کردن یک نام و پورت گوشدهی (غیر سرویسهای سیستمی) رابط را اضافه کنید. سپس یک آدرس IP خصوصی به این رابط اختصاص دهید—بهعنوان مثال استفاده از اولین آدرس قابل استفاده در یک شبکه خصوصی مانند 192.168.34.1/24 برای سرور رایج است—در حالی که کلاینتها آدرسهای بعدی (مثلاً 192.168.34.2، 192.168.34.3) را بهصورت دستی دریافت میکنند. انتخاب آدرسهای /32 برای هر peer و استفاده از یک محدوده آدرس جدا برای شبکه WireGuard مانع از تداخل با سایر شبکههای داخلی میشود و مدیریت مسیرها و سیاستهای فایروال را تسهیل میکند.

– در WinBox/WebFig: Interfaces > WireGuard > +
نام و Listen Port دلخواه (مثلاً 13231) انتخاب کنید.
– CLI:
/interface wireguard add listen-port=13231 name=wireguard1 /ip address add address=192.168.34.1/24 interface=wireguard1

نکته: برای شبکه WireGuard بهتر است IP اولین آدرس قابل استفاده را برای سرور انتخاب کنید و آدرسهای کلاینتها را دستی تنظیم کنید (مثلاً 192.168.34.2، 192.168.34.3، …).
3) فایروال — اجازه عبور پورت WireGuard و NAT
برای بهرهبرداری از قابلیتهای کامل WireGuard در MikroTik CHR لازم است سیستمعامل RouterOS به نسخه v7 یا بالاتر ارتقا یابد. فرایند ارتقا از طریق منوی System > Packages در WinBox/WebFig یا با دستورات CLI ساده قابل انجام است: ابتدا با دستور check-for-updates نسخه جدید را بررسی، سپس آن را دانلود و در نهایت با reboot سیستم را راهاندازی مجدد کنید. اگر دستگاه شما هنوز روی v6 است، تغییر channel به “upgrade” ممکن است برای دریافت نسخه v7 ضروری باشد. قبل از هر ارتقا تهیه پشتیبان از پیکربندی دستگاه و اطمینان از سازگاری بستهها و لایسنسها الزامی است تا در صورت بروز مشکل بازگشت به تنظیمات قبلی امکانپذیر باشد.





– اجازه ورود بستههای UDP به پورت WireGuard:
CLI:
/ip firewall filter add chain=input protocol=udp dst-port=13231 action=accept comment="WireGuard pass" place-before=1
یا از طریق GUI: IP > Firewall > Filter Rules > +
گزینهها: Chain=input, Protocol=udp, Dst. Port=13231, Action=accept
– NAT ماسکاراد برای دسترسی کلاینتها به اینترنت (فرض خروج به ether1):
CLI:
/ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade comment="WireGuard NAT"
نکته: قوانین فایروال جدید را بالای قوانین drop قرار دهید (place-before یا با کشیدن در GUI).
4) (اختیاری) تنظیمات فایروال برای دسترسی داخلی (مثلاً DNS داخلی / Pi-hole)
چنانچه قصد دارید کلاینتهای WireGuard از DNS محلی مثل Pi-hole یا سرویسهای مدیریتی روی CHR استفاده کنند، لازم است در فایروال قانونی ایجاد کنید که ترافیک ورودی از شبکه WireGuard (مثلاً 192.168.34.0/24) را مجاز بدارد. این قانون باید محدود به آدرس مبدأ شبکه WireGuard باشد تا سطوح دسترسی کنترلشده بماند و در عین حال دسترسی به سرویسهای ضروری مانند DNS (پورت 53) و مدیریت درونسازمانی فراهم گردد. قرار دادن این قانون بالاتر از قوانین drop و بررسی مسیرهای NAT و سرویسدهی داخلی تضمین میکند که درخواستهای DNS و سرویسهای داخلی از طریق تونل بیمشکل عبور کنند.
اگر میخواهید کلاینتها به سرویسهای داخلی CHR یا DNS داخلی دسترسی داشته باشند، یک قانون ورودی برای شبکه WireGuard اضافه کنید:
CLI:
/ip firewall filter add chain=input src-address=192.168.34.0/24 action=accept comment="Allow access from WireGuard network" place-before=1


این قانون را هم بالاتر از قواعد drop قرار دهید.
5) تولید کلیدها و افزودن peers (سرور و هر کلاینت)
در WireGuard احراز هویت بر پایه جفت کلید عمومی/خصوصی انجام میشود؛ کلاینتها کلید خصوصی خود را نگه میدارند و public key را به سرور میدهند. در RouterOS میتوان public key کلاینت را بهعنوان peer روی رابط WireGuard اضافه کرد و آدرس اختصاصی هر peer را در فیلد allowed-address بهصورت /32 وارد نمود. برای کلاینتها فایل پیکربندی شامل PrivateKey، Address داخلی، و بخش Peer با PublicKey سرور و Endpoint (public_ip:port) مورد نیاز است. فعالکردن PersistentKeepalive برای کلاینتهایی که پشت NAT هستند (مثلاً 25 ثانیه) قطع و وصلهای ناخواسته را کاهش میدهد و اطمینان از برقرار ماندن تماس با سرور را افزایش میدهد.
– در MikroTik، کلید خصوصی/عمومی را میتوانید با فرمان داخلی تولید کنید یا کلیدها را از کلاینت تولید و در سرور وارد کنید.
تولید کلید در RouterOS (اگر موجود باشد):
/interface wireguard peers generate-key-pair
(در برخی نسخهها ممکن است نیاز باشد کلیدها را در کلاینت تولید کنید؛ مثال با wg-quick یا ابزارهای سیستمعامل.)
برای هر peer در سرور:
– public key کلاینت را وارد کنید
– Allowed Address: آدرس IP اختصاصیافته به آن peer (مثلاً 192.168.34.2/32)
– Endpoint (برای peers که از شبکههای NAT بیرونی استفاده میکنند، معمولاً نیازی نیست مگر در حالت site-to-site)
CLI نمونه (اضافه کردن peer):
/interface wireguard peers add interface=wireguard1 public-key="CWx...clientPubKey..." allowed-address=192.168.34.2/32 comment="client1"
برای سرور، نیاز به وارد کردن public key سرور در فایل کانفیگ کلاینت:
– Server public key: از RouterOS یا از تولید key pair سرور بگیرید
– Server endpoint: public_ip:listen-port (مثلاً 203.0.113.5:13231)
– Client private key: کلید خصوصی تولید شده در دستگاه کلاینت
– Address: IP داخل شبکه WireGuard (مثلاً 192.168.34.2/32)
نمونه فایل کانفیگ wg-quick برای کلاینت (Linux/macOS/Windows wg-quick compatible):
[Interface] PrivateKey = <client-private-key> Address = 192.168.34.2/32 DNS = 192.168.34.1 [Peer] PublicKey = <server-public-key> Endpoint = <server-public-ip>:13231 AllowedIPs = 0.0.0.0/0, ::/0 PersistentKeepalive = 25
توضیح: PersistentKeepalive روی 25 ثانیه برای پشت NAT بودن کلاینتها مفید است.
6) تنظیم DNS برای کلاینتها
برای ارائه نامگشایی مطمئن به کلاینتها میتوانید آدرس DNS سرور CHR یا Pi-hole را در بخش DNS پیکربندی WireGuard کلاینتها قرار دهید—مثلاً DNS=192.168.34.1—یا در تنظیمات سیستمعامل کلاینت بهصورت دستی وارد کنید. باید فایروال را طوری تنظیم کنید که دسترسی UDP/TCP پورت 53 از شبکه WireGuard مجاز باشد و در صورت استفاده از DNS over HTTPS/QUIC یا DNS over TLS، پورتها و سرویسهای مرتبط نیز باز شوند. توجه داشته باشید که اگر AllowedIPs کلاینت روی 0.0.0.0/0 تنظیم شده باشد، ترافیک DNS بهطور پیشفرض از طریق تونل عبور خواهد کرد؛ در غیر این صورت لازم است مسیرهای مناسب برای دسترسی به DNS محلی تعریف گردد.
– اگر میخواهید CHR یا Pi-hole را به عنوان DNS کلاینتها قرار دهید، در تنظیمات کلاینتها DNS را روی IP رابط WireGuard (مثلاً 192.168.34.1) تنظیم کنید یا در فایل کانفیگ wg-quick مقدار DNS را قرار دهید.
– مطمئن شوید که فایروال اجازه دسترسی به سرویس DNS (UDP/TCP 53) از شبکه WireGuard را میدهد (قانونی که در بخش 4 آورده شد).
7) تست و عیبیابی
برای اطمینان از صحت تنظیمات ابتدا وضعیت رابط و peers را در RouterOS بررسی کنید (/interface wireguard print و /interface wireguard peers print) و لاگها را جهت خطاها مرور نمایید. از سمت کلاینت اتصال برقرار کنید، وجود handshake را بررسی و پینگ به آدرس داخلی سرور (مثلاً 192.168.34.1) را امتحان کنید؛ در صورت برقراری ارتباط اما نداشتن دسترسی اینترنت، قوانین NAT و مسیر پیشفرض روی سرور را بازبینی کنید. اگر اتصال برقرار نمیشود، بررسی کنید پورت UDP روی میزبان یا ISP مسدود نباشد، کلیدها صحیح باشند، و PersistentKeepalive برای کلاینتهای پشت NAT فعال باشد.
– بررسی وضعیت رابط WireGuard در MikroTik:
/interface wireguard print /interface wireguard peers print
– از سمت کلاینت: تلاش برای اتصال و بررسی handshakes، پینگ به آدرس سرور 192.168.34.1، و دسترسی به اینترنت.
– اگر اتصال برقرار نشد: بررسی فایروال سرور/مسیریابی، صحت کلیدها، پورت UDP در ISP یا میزبان مسدود نباشد.
8) مثال کامل دستورات CLI (خلاصه)
در این بخش مجموعهای از دستورات کلیدی CLI برای راهاندازی کامل WireGuard در MikroTik گردآوری شده است تا بهسادگی در محیط SSH اجرا شوند: شامل بررسی و نصب بهروزرسانی، افزودن رابط wireguard با listen-port، اختصاص آدرس IP به رابط، افزودن قوانین فایروال برای پورت WireGuard و دسترسی شبکه WireGuard، قانون NAT برای ماسکاراد، و اضافهکردن peerها با public-key و allowed-address. اجرای این دستورات بهصورت متوالی محیط پایهای کارکرد VPN را فراهم میکند؛ البته مقادیر پیشفرض مانند نام رابط، پورت، آدرس شبکه و public keys باید با مقادیر واقعی شما جایگزین شوند تا راهاندازی کامل و امن صورت گیرد.
/system package update check-for-updates /system package update download /system reboot /interface wireguard add listen-port=13231 name=wireguard1 /ip address add address=192.168.34.1/24 interface=wireguard1 /ip firewall filter add chain=input protocol=udp dst-port=13231 action=accept comment="WireGuard pass" place-before=1 /ip firewall filter add chain=input src-address=192.168.34.0/24 action=accept comment="Allow access from WireGuard network" place-before=1 /ip firewall nat add chain=srcnat out-interface=ether1 action=masquerade comment="WireGuard NAT" /interface wireguard peers add interface=wireguard1 public-key="CLIENT_PUBLIC_KEY" allowed-address=192.168.34.2/32 comment="client1"
(جایگزین کنید CLIENT_PUBLIC_KEY و تنظیمات شبکه/پورت را مطابق نیاز خود.)
نکات تکمیلی و بهترین روشها
برای امنیت و پایداری بهتر از آدرسهای /32 برای هر peer استفاده کنید، کلیدهای خصوصی را فقط روی دستگاههای مربوطه نگهداری نمایید، و برای کلاینتهای پشت NAT PersistentKeepalive فعال کنید. در سناریوهای چندسایت یا مسیردهی انتخابی از AllowedIPs مناسب استفاده کنید؛ اگر میخواهید فقط ترافیک معین از طریق VPN برود، آن شبکهها را در AllowedIPs قرار دهید و برای تونل تمامترافیک از 0.0.0.0/0 استفاده کنید. همچنین از گرفتن بکاپ منظم پیکربندی و کلیدها اطمینان حاصل کنید و در محیطهای تولیدی نظارت بر لاگ و بهروزرسانی مرتب RouterOS را برنامهریزی نمایید.
– استفاده از آدرسهای /32 برای هر peer در Allowed Address برای جلوگیری از درز ترافیک.
– نگهداری private key در دستگاه کلاینت و public key در سرور.
– فعال کردن PersistentKeepalive برای کلاینتهایی که پشت NAT هستند.
– گزینههای routing: اگر میخواهید فقط ترافیک خاص را از VPN عبور دهید، در AllowedIPs کلاینتها فقط آن شبکهها را قرار دهید؛ برای سوییچ کامل ترافیک به VPN از 0.0.0.0/0 استفاده کنید.
– بکاپ از پیکربندی RouterOS و کلیدها نگه دارید.





قوانین ارسال دیدگاه
لطفاً در ارسال دیدگاه از کلمات مناسب استفاده کنید. ارسال اسپم ممنوع است.