نوید یحیی پور
متخصص شبکه های سیسکو و امنیت زیرساخت

بررسی رفتار عجیب OSPFv3 میکروتیک در مقایسه با سیسکو

کسانی که با پروتکل OSPF آشنا هستند میدونند که مفهومی هست به اسم Area، این پروتکل با استفاده از این Area ها عملکرد کلیشو بهینه سازی میکنه، چون تو OSPF روترهای موجود در یک AREA دید کاملی از تمامی لینک ها و Neighbor های متصل به تمامی روترها اطلاعات کامل و برابری دارند، در واقع توپولوژی منطقی اون Area کامل تو دستشونه و میدونند کی به چی با چه هزینه ای متصل شده. زیاد وارد جزئیات نمیشم در این حد کفایت میکنه! 

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران


  • مورد اولی که واسم بعنوان یه متخصصی که اکثرا با روترهای سیسکو کار کرده عجیب بود عدم دریافت روت های IPv6 با طول پریفیکس غیر از 64 بود. در واقع Prefix و Prefix Length از طریق LSA ها (بسته های حاوی اطلاعات توپولوژی شبکه که بین روترهایی که به زبان OSPF با همدیگه ارتباط برقرار می کنند) به درستی دریافت میشد ولی روت مربوطه به جدول مسیریابی منتقل نمیشد! درسته که اکثرا در IPv6 با طول پریفیکس 64 سر و کار خواهیم داشت (با ISP های کلان کاری ندارم اونا طول 48 میگیرند) ولی نباید روتر MikroTik هم سرخود طول بیشتر از 64 رو نادیده بگیره! ولی تو اطلاعات جدول مسیریابی یه Warning کوچولو نشون میده که: فقط قادریم پریفیکس هایی با طول 64 رو ارسال کنیم! در مورد دریافت چیزی تو روتر نمایش داده نمیشه! شاید تو Logging ثبت بشه که اونم بعید میدونم. به مثال زیر توجه کنید:

TOSISNO

در شبکه ای که در شکل بالا مشاهده میکنید از روترهای مخصوص محیط های ابری این 2 شرکت استفاده شده که هر دو سیستم عامل Stable ای دارند. (روتر سیسکو CSR1000v نسخه Denali 16.03.03 و روتر میکروتیک CHR 6.44.3 Stable)

روترهای سیسکو بعنوان روترهای Backbone عمل می کنند یعنی تو Area 0 یا همون Backbone Area قرار دارند و روتر MikroTik-R3 بعنوان ABR عمل کرده (هم عضو Backbone هست هم اینترفیسی در Area 1 داره که بهش میگن Area Border Router).

تنظیمات روترها به این صورت انجام میشه:

hostname Cisco-R1
!
router ospfv3 1234
 router-id 1.1.1.1
 address-family ipv6 unicast
!
ipv6 unicast-routing
interface Loopback0
 ipv6 address 2001:192:168:1::1/128
 ospfv3 1234 ipv6 area 0 
interface GigabitEthernet1
 ipv6 address 2001:10:12::1/64
 ipv6 enable
 ospfv3 1234 ipv6 area 0
hostname Cisco-R2
!
router ospfv3 1234
 router-id 2.2.2.2
 address-family ipv6 unicast
!
ipv6 unicast-routing
interface Loopback0
 ipv6 address 2001:192:168:2::2/128
 ospfv3 1234 ipv6 area 0 
interface GigabitEthernet1
 ipv6 address 2001:10:12::2/64
 ipv6 enable
 ospfv3 1234 ipv6 area 0
interface GigabitEthernet2
 ipv6 address 2001:10:23::2/64
 ipv6 enable
 ospfv3 1234 ipv6 area 0
/ipv6 address
add address=2001:192:168:3::3/128 interface=Loopback0
add address=2001:10:23::3 interface=ether2
add address=2001:10:34::3 interface=ether1
/routing ospf-v3 area
add name=area1 area-id=0.0.0.1
/routing ospf-v3 interface
add area=area1 interface=Loopback0
add area=backbone interface=ether2
/system identity
set name=MikroTik-R3

همونطور که از خروجی دستور نمایش OSPFv3 Neighbor ها مشاهده می کنید 2 روتر R2 و R3 و همچنین R1 و R2 باهم Fully Adjacent هستند:

Cisco-R1#show ospfv3 neigh

          OSPFv3 1234 address-family ipv6 (router-id 1.1.1.1)

Neighbor ID     Pri   State           Dead Time   Interface ID    Interface
2.2.2.2           1   FULL/BDR        00:00:31    7               GigabitEthernet1
Cisco-R2#show ospfv3 neighbor

          OSPFv3 1234 address-family ipv6 (router-id 2.2.2.2)

Neighbor ID     Pri   State           Dead Time   Interface ID    Interface
3.3.3.3           1   FULL/BDR        00:00:35    4               GigabitEthernet2
1.1.1.1           1   FULL/DR         00:00:35    7               GigabitEthernet1
[admin@MikroTik-R3] > /routing ospf-v3 neighbor print br
 # ROUTER-ID       ADDRESS                                 STATE                                                        STATE-CHANGES
 0 2.2.2.2         fe80::5200:ff:fe02:1                    Full                                                                     5

ولی متاسفانه R3 با اینکه LSA های مربوطه رو دریافت کرده و از شبکه Loopback0 روترهای R1 و R2 تو Database خودش باخبره ولی اونارو به جدول مسیریابیش انتقال نمیده:

[admin@MikroTik-R3] > /ipv6 route print
Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, o - ospf, b - bgp, U - unreachable 
 #      DST-ADDRESS              GATEWAY                  DISTANCE
 0 ADo  2001:10:12::/64          fe80::5200:ff:fe02:1%...      110
 1 ADC  2001:10:23::/64          ether2                          0
 2 ADC  2001:10:34::/64          ether1                          0
 3 ADC  2001:192:168:3::3/128    Loopback0                       0
[admin@MikroTik-R3] /routing ospf-v3 lsa> print det
.
.
.
instance=default area=backbone type=intra-area-prefix id=0.0.0.0 originator=1.1.1.1 sequence-number=0x80000003 age=1176 
   checksum=0x272B options="" body=
     referenced-LS-type=Router LSA
     referenced-LS-ID=0
         prefix=2001:192:168:1::1/128 options=01000000  (LA)
instance=default area=backbone type=intra-area-prefix id=0.0.0.0 originator=2.2.2.2 sequence-number=0x80000003 age=897 
   checksum=0x77D0 options="" body=
     referenced-LS-type=Router LSA
     referenced-LS-ID=0
         prefix=2001:192:168:2::2/128 options=01000000  (LA)
.
.
.

ولی روترهای سیسکو بدون مشکل این طول پریفیکس رو قبول می کنند و محدودیتی بصورت پیش فرض روشون اعمال نشده که به نظرم باعث میشه رفتار روتر قابل پیش بینی تر باشه:

Cisco-R2#show ipv6 route ospf | begin O   
O   2001:192:168:1::1/128 [110/1]
     via FE80::5200:FF:FE01:0, GigabitEthernet1

دقت کردید که حتی روتر سیسکو هم آدرس Loopback0 روتر میکروتیک رو دریافت نکرده؟! دلیلش اینه که میکروتیک همچین اجازه ای رو نمیده (مقابل روت مربوط به Loopback0 قسمت ADVERTISE نوشته no و حتی اجازه نمیده به yes تبدیلش کنید:

[admin@MikroTik-R3] /ipv6 address> print
Flags: X - disabled, I - invalid, D - dynamic, G - global, L - link-local 
 #    ADDRESS                                     FROM-POOL INTERFACE                                                       ADVERTISE
 0 DL fe80::d005:eaff:fe21:a4dc/64                          Loopback0                                                       no       
 1 DL fe80::5200:ff:fe03:0/64                               ether1                                                          no       
 2 DL fe80::5200:ff:fe03:1/64                               ether2                                                          no       
 3 DL fe80::5200:ff:fe03:3/64                               ether4                                                          no       
 4 DL fe80::5200:ff:fe03:2/64                               ether3                                                          no       
 5  G 2001:192:168:3::3/128                                 Loopback0                                                       no       
 6  G 2001:10:23::3/64                                      ether2                                                          yes      
 7  G 2001:10:34::3/64                                      ether1                                                          yes      
[admin@MikroTik-R3] /ipv6 address> set advertise=yes numbers=5
failure: cannot advertise address with prefix length not equal to 64 (use advertise=no)

با تغییر طول Prefix های Loopback ها به 64 مشکل برطرف میشه:

[admin@MikroTik-R3] /ipv6 route> print
Flags: X - disabled, A - active, D - dynamic, C - connect, S - static, r - rip, o - ospf, b - bgp, U - unreachable 
 #      DST-ADDRESS              GATEWAY                  DISTANCE
 0 ADo  2001:10:12::/64          fe80::5200:ff:fe02:1%...      110
 1 ADC  2001:10:23::/64          ether2                          0
 2 ADC  2001:10:34::/64          ether1                          0
 3 ADo  2001:192:168:1::/64      fe80::5200:ff:fe02:1%...      110
 4 ADo  2001:192:168:2::/64      fe80::5200:ff:fe02:1%...      110
 5 ADC  2001:192:168:3::/64      Loopback0                       0

ولی همچنان یه مشکل دیگه ای پابرجاست! یه رفتار عجیب دیگه از میکروتیک!


  • میکروتیک تا زمانی که حداقل یک اینترفیس فیزیکی تو Area مربوطه نداشته باشه (AREA ای که قراره Loopback0 یا همون bridge داخلش تبلیغ بشه)، پریفیکس اینترفیس Loopback ای که در اینجا ساختیم رو به همسایه ها تبلیغ نمیکنه! بدون اطلاع، به همین راحتی! ببینید در خروجی زیر هیچ اینترفیس فیزیکی در area1 موجود نیست واسه همین روتش تبلیغ نمیشه!
[admin@MikroTik-R3] /routing ospf-v3 interface> print
Flags: X - disabled, I - inactive, D - dynamic, P - passive 
 #    INTERFACE                                           AREA                                           COST PRIORITY NETWORK-TYPE  
 0    Loopback0                                           area1                                            10        1 point-to-point
 1    ether2                                              backbone                                         10        1 default  
Cisco-R2#show ipv6 route ospf | begin O   
O   2001:192:168:1::/64 [110/2]
     via FE80::5200:FF:FE01:0, GigabitEthernet1

برای حل این مشکل اینترفیس ether1 روتر R3 و روتر MikroTik-R4 رو هم عضور area 1 میکنیم:

[admin@MikroTik-R3] /routing ospf-v3 interface> add interface=ether1 area=area1
/routing ospf-v3 instance
set [ find default=yes ] router-id=4.4.4.4
/ipv6 address
add address=2001:192:168:4::4 advertise=no interface=Loopback0
add address=2001:10:34::4 interface=ether1
/routing ospf-v3 interface
add area=area1 interface=Loopback0
add area=area1 interface=ether1
/system identity
set name=MikroTik-R4

و مشکل برطرف میشه!

Cisco-R1#show ipv6 route ospf | begin O   
O   2001:10:23::/64 [110/2]
     via FE80::5200:FF:FE02:0, GigabitEthernet1
OI  2001:10:34::/64 [110/12]
     via FE80::5200:FF:FE02:0, GigabitEthernet1
O   2001:192:168:2::/64 [110/2]
     via FE80::5200:FF:FE02:0, GigabitEthernet1
OI  2001:192:168:3::/64 [110/12]
     via FE80::5200:FF:FE02:0, GigabitEthernet1
OI  2001:192:168:4::/64 [110/22]
     via FE80::5200:FF:FE02:0, GigabitEthernet1

نوید یحیی پور
نوید یحیی پور

متخصص شبکه های سیسکو و امنیت زیرساخت

مدرس دوره های CCIE Enterprise Infrastructure و CCIE Service Provider شرکت مشاوره و آموزشی Orhan Ergun LLC

نظرات