المشكلة: راوتر فايبرهوم في وضع الجسر ← MikroTik ← أجهزة الشبكة المحلية لا تحصل على عناوين IPv6 عالمية.
السبب: شركة زين توزع IPv6 عبر SLAAC فقط — بادئة واحدة بحجم /64. لا تدعم DHCPv6 Prefix Delegation. راوترات OpenWRT كمثال تتعامل مع هذا تلقائياً، لكن MikroTik لا. Client DHCPv6 يقعد معلق searching.
تم التجربة على: MikroTik hEX S، RouterOS 7.23، في وضع الجسر FiberHome LG6851F. شبكة Zain السعودية.
الحطوات
اتصل بـ SSH على الراوتر:
الخطوة 1: طف DHCPv6 Client
/ipv6 dhcp-client set 0 disabled=yes
الخطوة 2: تعيين عنوان ثابت من بداية SLAAC إلى جسر الشبكة المحلية
خذ البداية اللي اخذتها من واجهة WAN (مثال: 2a02:cb80:4180:2847::/64) وعيّن ::1 إلى الجسر:
/ipv6 address add address=2a02:cb80:4180:2547::1/64 interface=bridge advertise=yes
استبدل
bridgeباسم الجسر الفعلي، والبداية اللي اخذتها من ether1.
الخطوة 3: تفعيل إعلانات الراوتر على الجسر
/ipv6 nd add interface=bridge ra-interval=20s-1m advertise-dns=yes other-configuration=yes
الخطوة 4: تأكيد تفعيل التوجيه
/ipv6 settings set forward=yes accept-router-advertisements=yes
التحقق
تأكد أن أجهزة الشبكة المحلية تحصل على عناوين عالمية:
/ipv6 neighbor print
سترى إدخالات مثل:
2a02:cb80:4180:2567:be34:11ff:fe0f:2c78 BC:24:11:0F:2C:78 bridge
من أي جهاز في الشبكة:
curl -6 ipv6.icanhazip.com
او من خلال المتصفح هنا
آلية العمل
زين (SLAAC /64)
│
▼
راوتر FiberHome (وضع Bridge)
│ fe80::1 (بوابة link-local)
▼
MikroTik ether1 (WAN)
│ يحصل على عنوان SLAAC من الشركة
│ يرسل RAs على الجسر بنفس البداية
▼
أجهزة الشبكة المحلية
تحصل على عناوين عالمية عبر SLAAC من إعلانات MikroTik
المسار الافتراضي → MikroTik → fe80::1 → شركة الاتصال
سكربت اذا تغيرت البداية
إذا غيرت الشركة البداية بيوقف العنوان الثابت ::1 عن العمل. هذا السكريبت لتحديثه:
/system script add name=ipv6-sync-bridge source=":local wan [ipv6/address/get [find interface=ether1 global] address]; :local end [:find \$wan \"/\"]; :local addr [:pick \$wan 0 \$end]; :local p -1; :for i from=1 to=4 do={:set p [:find \$addr \":\" (\$p+1)]}; :local prefix [:pick \$addr 0 (\$p+1)]; :local bridge (\$prefix . \":1/64\"); :local cur [ipv6/address/get [find interface=bridge global] address]; :if (\$bridge != \$cur) do={/ipv6/address/set [find interface=bridge global] address=\$bridge; :log info \"IPv6 bridge address updated to \$bridge\"}"
تشغيله
/system script run ipv6-sync-bridge