⚙️ إضافة VLANs تلقائيًا في MikroTik — سكربت جاهز مع DHCP/NAT/Hotspot (131 → 200)

السلام عليكم معشر المشبكين 👋،

في هذا الدليل العملي ستنشئ عشرات الفيلانات VLAN بضغطة واحدة على MikroTik — مع تهيئة كاملة: VLAN Interface + عنوان IP + DHCP Server/Pool + NAT + Hotspot لكل VLAN. السكربت يعتمد حلقة تلقائية من VLAN 131 حتى 200 على منفذ ترنك واحد.

🎯 الفكرة بسرعة

  • إنشاء VLAN لكل رقم في المدى (131→200) على واجهة واحدة (ترنك).
  • توليد شبكة /24 لكل VLAN بالاعتماد على أوكتت أساسي 8.9.X.0/24 (يمكن تغييره).
  • إضافة DHCP (Network + Server) وPool تلقائي لكل VLAN.
  • تفعيل NAT (Masquerade) لكل شبكة للخروج إلى الإنترنت.
  • إنشاء Hotspot لكل VLAN (باستخدام الإعدادات الافتراضية أو التي تضبطها لاحقًا).
المكوّنات الأساسية في السكربت:
str=بداية مدى VLAN، end=نهاية المدى، int=منفذ الترنك (مثل ether10)، ip1=الأوكتتان الأوليان للشبكة (مثل 8.9).

🧰 المتطلبات قبل التشغيل

  1. حدّد منفذ الترنك الذي سيحمل كل الفيلانات (مثل ether10 إلى سويتش/راوتر آخر).
  2. تأكد أن الطرف المقابل يدعم VLAN Trunk وقائم عليه Tagging لنفس قائمة الـ VLANs.
  3. تأكد من وجود حزمة DHCP وحزمة Hotspot مثبّتتين على الراوتر.
  4. إن كنت تستخدم تصميم Bridge VLAN Filtering، راجع قسم “وضع الجسر” أدناه.

✅ السكربت الأصلي (جاهز للنسخ)

:global str 131
:global end 200
:global int "ether10"
:global ip1 "8.9"

:for x from=$str to=$end do={
    :local name ("M-" . $x)
    :local ip2 $x
    /interface vlan add name=$name vlan-id=$x interface=$int
    /ip address add address="$ip1.$ip2.1/24" interface=$name
    /ip pool add name=$name ranges="$ip1.$ip2.3-$ip1.$ip2.254"
    /ip firewall nat add chain=srcnat action=masquerade src-address="$ip1.$ip2.0/24"
    /ip dhcp-server network add address="$ip1.$ip2.0/24" gateway="$ip1.$ip2.1"
    /ip dhcp-server add name=$name address-pool=$name interface=$name disabled=no
    /ip hotspot add name=$name interface=$name disabled=no
}
  

✏️ غيّر int إلى واجهتك، وبدّل ip1 إلى نطاقك الأساس، وعدّل مدى str/end كما تريد.

🛡️ نسخة محسّنة وآمنة (تمنع التكرار)

هذه النسخة تتحقّق قبل كل إضافة—فلا تُنشئ كائنًا موجودًا أصلًا (VLAN, Address, Pool, NAT, DHCP, Hotspot). ممتازة للتشغيل المتكرر أو بعد إعادة تشغيل.

:global str 131
:global end 200
:global int "ether10"
:global ip1 "8.9"

:for x from=$str to=$end do={
    :local name ("M-" . $x)
    :local ip2 $x
    :local cidr ("$ip1.$ip2.0/24")
    :local gw ("$ip1.$ip2.1")
    :local poolRange ("$ip1.$ip2.3-$ip1.$ip2.254")

    # VLAN Interface
    :if ([:len [/interface vlan find where name=$name]] = 0) do={
        /interface vlan add name=$name vlan-id=$x interface=$int
    }

    # IP Address
    :if ([:len [/ip address find where address="$gw/24" interface=$name]] = 0) do={
        /ip address add address="$gw/24" interface=$name
    }

    # DHCP Pool
    :if ([:len [/ip pool find where name=$name]] = 0) do={
        /ip pool add name=$name ranges=$poolRange
    }

    # NAT
    :if ([:len [/ip firewall nat find where chain=srcnat src-address=$cidr]] = 0) do={
        /ip firewall nat add chain=srcnat action=masquerade src-address=$cidr
    }

    # DHCP Network
    :if ([:len [/ip dhcp-server network find where address=$cidr]] = 0) do={
        /ip dhcp-server network add address=$cidr gateway=$gw
    }

    # DHCP Server
    :if ([:len [/ip dhcp-server find where name=$name]] = 0) do={
        /ip dhcp-server add name=$name address-pool=$name interface=$name disabled=no
    }

    # Hotspot
    :if ([:len [/ip hotspot find where name=$name]] = 0) do={
        /ip hotspot add name=$name interface=$name disabled=no
    }
}
  

🔌 إعداد منفذ الـ Trunk (نصيحة مهمة)

السكربت يضع الفيلانات مباشرة على $int (مثل ether10). تأكّد أن المنفذ متصل بطرف يقبل Tagged VLANs (سويتش/راوتر) وأن الطرف المقابل مُهيّأ على نفس قائمة الـ VLANs.

بديل مُستحسن: وضع الجسر (Bridge VLAN Filtering)

لو عندك bridge رئيسي، الأفضل إنشاء الفيلانات على interface=bridge وليس على ether10، ثم تحديد Tag/Untag عبر:

/interface bridge vlan
add bridge=bridge vlan-ids=131-200 tagged=bridge,ether10 untagged=<منافذ_الوصول>

هذا يُبسّط الإدارة ويستفيد من تسريع العتاد حيثما أمكن.

🧪 أوامر فحص سريعة

/interface vlan print where name~"^M-"
/ip address print where interface~"^M-"
/ip dhcp-server print
/ip firewall nat print where chain=srcnat
/ip hotspot print

🧠 أفضل الممارسات

  • لا تُنشئ آلاف الكائنات دفعة واحدة وقت الذروة — نفّذ أثناء صيانة.
  • راقب CPU/RAM وعدادات الـ DHCP/Hotspot بعد الإنشاء.
  • يمكنك تقليل مدى الـ Pool إذا أردت عدد عناوين أقل لكل VLAN.
  • استخدم Profile واحد للـ Hotspot واربِطه لاحقًا بكل واجهة لتوحيد الإعدادات.
✅ السكربت الآمن يسمح لك بإعادة التشغيل أو التشغيل المتكرر بدون مضاعفة الكائنات.

⚠️ تحذير وإخلاء مسؤولية

قبل التنفيذ خذ Backup لإعداداتك (/system backup save). تحقّق من توافق تصميم الشبكة (Trunk/Access/Bridge) حتى لا يتعطل المرور. لا تُفعِّل Hotspot على VLANs لا تحتاج مصادقة عليها.

تم بحمد الله — إذا رغبت نسخة مخصّصة (مدى مختلف، IP Schema آخر، أو ربط تلقائي بBridge VLAN Filtering) أخبرني بالتفاصيل وأجهزها لك فورًا 🔧