مقدمه
همانطور که به یاد دارید اساس کار VLAN ها به وجود آوردن Broadcast domain های مختلف بود. اما Private VLAN ها اجازه می دهند که domain را اصطلاحا به broadcast “subdomain” های ایزوله تقسیم کنیم. به این معنی که sub-VLAN هایی در داخل یک VLAN بسازیم که از یکدیگر ایزوله باشند. زمانی که VLAN بندی می کنیم دیگر پورت های داخل VLAN های مختلف نمی توانند مستقیما با یکدیگر ارتباط داشته باشند، و به یک مکانیزم لایه 3 نیاز دارند تا پکت ها را بین broadcast domain های مختلف انتقال دهد. این محدودیت در مورد PVLAN ها نیز صدق می کند، چرا که subdomain ها هم در لایه 2 از یگدیگر جدا هستند و به یک مکانیزم لایه 3 برای برقراری ارتباط نیاز دارند.
در دنیای شبکه VLAN های مختلف دارای IP هایی از رنج های متفاوت خواهند بود. اما زمانی که یک VLAN را با استفاده از PVLAN ها تقسیم می کنیم دستگاه هایی که داخل آن PVLAN ها قرار می گیرند همچنان دارای رنج IP مشابه خواهند بود اما همانطور که گفته شد نمی توانند مستقیما با یکدیگر در ارتباط باشند و نیازمند دستگاه لایه 3 برای برقراری ارتباط با یکدیگر خواهند بود (برای مثال با استفاده از Local Proxy ARP). در اینجا روتر شبکه به عنوان یک دستگاه لایه 3 می تواند اجازه یا عدم اجازه برقراری ارتباط بین sub-VLAN ها را بدهد. معمولا این نوع تنظیمات در محیط های “Shared” مانند ISP co-location بسیار طرفدار دارد چرا که قرار دادن چندین مشتری در یک رنج IP می تواند مقرون به صرفه باشد و در عین حال سطح بسیار خوبی از isolation را بین مشتریان فراهم می کند.
آشنایی با اصطلاحات Private VLAN
در ادامه تصویر سناریویی که برای توضیحات و انجام تنظیمات در این مطلب مورد استفاده قرار گرفته است را مشاهده می کنید.
در این سناریو ما VLAN 1000 را به سه PVLAN تقسیم می کنیم. و شامل sub-VLAN 1012 که روتر های R1 و R2 در آن هستند و sub-VLAN 1034 که روتر های R3 و R4 در آن قرار می گیرند و در نهایت sub-VLAN 1055 که فقط روتر R5 در آن وجود دارد. روتر R6 نیز در این سناریو به عنوان دستگاه لایه 3 برای برقراری ارتباط مورد استفاده قرار می گیرد. در Private-VLAN باید یک VLAN را به عنوان VLAN اصلی در نظر بگیریم که ما VLAN 1000 را به عنوان Primary در نظر گرفتیم یعنی تمام دستگاه ها که در آن قرار می گیرند دارای رنج آی پی 10.0.0.0/24 خواهند بود.
پورت هایی که در این VLAN قرار می گیرند بر اساس نوع آن ها به سه دسته تقسیم می کنیم:
• پورت Promiscuous (“P”): معمولا به یک روتر وصل می شود. این نوع پورت اجازه دارد که فریم های لایه دو VLAN را از هر نوع پورت دریافت یا به آن ارسال کند.
• پورت Isolated (“I”): این نوع از پورت صرفا اجازه دارد که با پورت “P” ارتباط داشته باشد. معمولا دستگاه های مانند سرور ها به این پورت ها وصل می شوند.
• پورت Community (“C”): این پورت ها اجازه دارند که با بقیه دستگاه ها که همگی در یک PVLAN هستند ارتباط برقرار کنند. همچنین قادر خواهند بود تا با پورت های “P” در ارتباط باشند.
به این منظور که رفتار sub-VLAN ها را پیاده سازی کنیم نیاز داریم نحوه انتقال فریم ها بین انواع مختلف پورت ها را تعریف کنیم. VLAN ها را به دو گروه “Primary” و “Secondary” تقسیم می کنیم.
• Primary VLAN (در مثال ما VLAN 1000): این VLAN برای انتقال فریم های که از پورت های “P” می آیند بر روی دیگر انواع پورت ها (پورت های“I” و “C”) استفاده می شود.
• Secondary Isolated VLAN: فریم ها را از پورت های “I” به پورت های “P” منتقل می کند. از آنجایی که پورت های Isolated نمی توانند فریم ها را مستقیما به یکدیگر ارسال کنند می توانیم فقط از یک Isolated VLAN برای اتصال همه ی I-port ها به P-port ها استفاده کنیم.
• Secondary Community VLANs: فریم ها را بین پورت های Community یا C-port های که در یک گروه (private-vlan community) هستند انتقال می دهد. همچنین می توانند فریم ها را به P-port های Primary VLAN بفرستند.
Private VLAN ها چگونه کار می کنند؟
این ها موارد کلیدی از نحوه عملکرد Private VLAN ها هستند که باید به یاد داشته باشید:
• Primary VLAN فریم ها را از promiscuous port به تمام پورت ها در PVLAN ها ارسال می کند.
• Isolated VLAN فریم ها را از دستگاه ها مستقیما به روتر یا همان P-port ها ارسال می کنند.
• Community VLAN ها اجازه ارتباط دو طرفه برای تبادل فریم ها را در یک گروه می دهد علاوه بر این فریم ها را برای P-port ها نیز ارسال می کند.
• فرآیند یادگیری MAC آدرس ها، forward کردن و همچنین روند broadcast/multicast flooding در primary/secondary VLAN ها همچنان مثل گذشته خواهد بود.
Private VLAN ها می توانند از پورت trunk انتقال داده شوند. شماره VLAN های Secondary برای tag زدن فریم ها مورد استفاده قرار می گیرد. مانندVLAN های عادی ترافیک Primary VLAN نیز ترانک می شود. اگر چه نیاز دارید تنظیمات مشخصی برای Private VLAN (bindings، mappings) را بر روی همه ی سوییچ ها انجام دهید. (البته اگر از VTPv3 استفاده کنید نیازی به این کار نیست).
تنظیمات Private VLAN
ما Primary VLAN 1000، Isolated VLAN 1005(R5)، Community VLAN 1012(R1, R2) و Community VLAN 1034(R3, R4) را داریم.
قدم اول
اگر نخواهیم از VTPv3 استفاده کنیم باید VTP را با قرار دادن در حالت Transparent غیر فعال کنیم. بعد از آن باید VLAN های Primary و Secondary را بسازیم و آن ها را به PVLAN domain ها bind کنیم.
SW1:
vtp mode transparent
!
! Creating primary VLAN, which is shared among secondary’s
!
vlan 1000
private-vlan primary
!
! Community VLAN for R1 and R2: allows a “subVLAN” within a Primary VLAN
!
vlan 1012
private-vlan community
!
! Community VLAN for R3 and R4
!
vlan 1034
private-vlan community
!
! Isolated VLAN: Connects all stub hosts to router.
! Remember - only one isolated vlan per primary VLAN.
! In our case, isolates R5 only.
!
vlan 1055
private-vlan isolated
!
! Associating the primary with secondary’s
!
vlan 1000
private-vlan association 1012,1034,1055
این قدم برای گروه کردن PVLAN ها داخل یک shared domain و برقراری یک پیوستگی بین آن ها انجام می شود. از آنجایی که VTP را غیر فعال کردیم همین کار را بر روی سوییچ 2 (SW2) نیز انجام دهید.
قدم دوم
باید تنظیم کردن پورت های host و bind کردن آن ها به PVLAN های مربوطه طبق سناریو انجام شود. همچنین این نکته را در نظر داشته باشید که پورت host همزمان به VLAN های مختلف تعلق دارد به این معنی که downstream آن primary و upstream آن secondary است. همچنین پورت ترانک را بین سوییچ ها فعال می کنیم تا ترافیک PVLAN ها بین سوییچ ها منتقل شود.
SW1:
!
! Community port (links R1 to R2 and “P”-ports)
!
interface FastEthernet0/1
description == R1
switchport private-vlan host-association 1000 1012
switchport mode private-vlan host
spanning-tree portfast
!
! Community port (links R3 to R4 and “P”-ports)
!
interface FastEthernet0/3
description == R3
switchport private-vlan host-association 1000 1034
switchport mode private-vlan host
spanning-tree portfast
!
! Isolated port (uses isolated VLAN to talk to “P”-ports)
!
interface FastEthernet0/5
description == R5
switchport private-vlan host-association 1000 1055
switchport mode private-vlan host
spanning-tree portfast
!
! Trunk port
!
interface FastEthernet 0/13
switchport trunk encapsulation dot1q
switchport mode trunk
SW2:
interface FastEthernet0/2
description == R2
switchport private-vlan host-association 1000 1012
switchport mode private-vlan host
spanning-tree portfast
!
interface FastEthernet0/4
description == R4
switchport private-vlan host-association 1000 1034
switchport mode private-vlan host
spanning-tree portfast
!
! Trunk port
!
interface FastEthernet 0/13
switchport trunk encapsulation dot1q
switchport mode trunk
اکنون باید صحت تنظیمات انجام شده بر روی سوییچ اول (SW1) را بررسی کنیم:
SW1#show vlan id 1012
SW1#show vlan id 1034
SW1#show vlan id 1055
SW1#show interfaces fastEthernet 0/13 trunk
بررسی صحت تنظیمات انجام شده بر روی سوییچ 2 (SW2):
SW2#show vlan id 1000
SW2#show vlan id 1012
SW2#show vlan id 1034
SW2#show vlan id 1055
SW2#show interface fastEthernet 0/13 trunk
قدم سوم
نوبت به ساخت یک promiscuous port و تنظیم کردن downstream mapping های آن رسیده است. در اینجا VLAN های secondary را اضافه می کنیم که ترافیک را توسط این پورت (P-port) دریافت می کنیم. Primary VLAN برای ارسال ترافیک به همه ی پورت های “C” و “I” استفاده می شود.
SW2:
!
! Promiscuous port, mapped to all secondary VLANs
!
interface FastEthernet0/6
description == R6
switchport private-vlan mapping 1000 1012,1034,1055
switchport mode private-vlan promiscuous
spanning-tree portfast
بررسی صحت تنظیمات انجام شده:
SW2#show int fa 0/6 switch | beg private
اگر نیاز دارید یک SVI بسازید و از آن برای ارتباط بین اعضای Private VLAN ها استفاده کنید صرفا باید interface مربوط به Primary VLAN را ساخته و تنظیمات را بر روی آن انجام دهید. پس از اینکه SVI ساخته شد باید Secondary VLAN های مورد نظر را دقیقا مانند Promiscuous port به SVI که ساخته اید map کنید. همچنین ممکن است بخواهید ارتباط را برای تعدادی secondary VLAN را محدود کنید که می توانید با ننوشتن mapping برای آن این کار را انجام دهید.
SW1:
!
! SW1 SVI is mapped to all secondary VLANs
!
interface Vlan 1000
ip address 10.0.0.7 255.255.255.0
private-vlan mapping 1012,1034,1055
SW2:
!
! SW2 SVI is mapped to 1012/1034 only, so it’s cant communicate with R5
!
interface Vlan1000
ip address 10.0.0.8 255.255.255.0
private-vlan mapping 1012,1034
اکنون برای تکمیل شدن سناریو همه ی روتر های R1-R6 را در رنج (10.0.0.0/24) IP می دهیم و آدرس broadcast را پینگ می کنیم.
R1#ping 10.0.0.255 repeat 1
R3#ping 10.0.0.255 repeat 1
R5#ping 10.0.0.255 repeat 1
R6#ping 10.0.0.255 repeat 1
یک ویژگی دیگر وجود دارد که ذکر آن خالی از لطف نیست به نام پورت Protected یا “Private VLAN edge” که بسیار ابتدایی بوده و حتی بر روی سوییچ شبکه نیز وجود دارد. این ویژگی امکان ایزوله کردن پورت ها را در داخل یک VLAN می دهد. به این معنی که تمام پورت های Protected داخل یک VLAN از برقراری ارتباط با یکدیگر منع شده اند (اما اجازه دارند به دیگر پورت های non-protected در همان VLAN فریم ارسال کنند). معمولا پورت های protected تنظیم می شوند که unicast های ناشناخته (مانند فریم با MAC آدرس که سوییچ آن را بلد نیست) را دریافت نکنند.
مثال:
interface range FastEthernet 0/1 - 2
switchport mode access
switchport protected
switchport block unicast
switchport block multicast