Creating and managing VLANs on Cisco Switches
ตัดสวิตช์ตัวเดียวให้กลายเป็นหลายวง LAN · ส่งหลาย VLAN ข้ามสายเส้นเดียวด้วย 802.1Q Trunk · แล้วให้ VLAN คุยข้ามกันด้วย Router-on-a-Stick — ทุกคำสั่งในหน้านี้แทนค่า x = 3, y = 128 ให้แล้ว คัดลอกไปวางได้ทันที
ทำอะไร — ① ต่อ PC 4 เครื่องเข้าสวิตช์ตัวเดียวแล้ว ping ให้ผ่านหมดก่อน ② สั่ง vlan + switchport access vlan ให้ PC แยกเป็น 2 วง แล้วดูว่าping ข้าม VLAN ไม่ผ่าน ③ ขยายเป็น 2 สวิตช์ต่อกันสองสาย (VLAN ละเส้น) ④ ดึงออกเหลือเส้นเดียวแล้วทำเป็น Trunk 802.1Q พร้อมดักจับ tag ด้วย Wireshark ⑤ ใส่ router ทำ subinterface ให้ VLAN คุยข้ามกันได้
ได้อะไร — ชุดคำสั่งครบทุกบรรทัดที่ข้อสอบข้อ 3 ต้องใช้ และรู้ว่าผลที่ "ping ไม่ผ่าน" คือคำตอบที่ถูก ไม่ใช่ความผิดพลาด
ออกสอบตรงไหน — ข้อ 3 (10 คะแนน) "ตั้ง VLAN ตามรูป ให้ ping กันได้ + ส่ง show vlan ของทุก switch" → สคริปต์พร้อมก็อปอยู่ที่ §4.16 · โทโพโลยีที่ต้องสร้างคือ รูปที่ 9
4.1เป้าหมายและสิ่งที่ต้องส่ง
| # | สิ่งที่ใบแลปสั่ง (หัวข้อ 3 การทดลอง) | อยู่ที่ไหน |
|---|---|---|
| 1 | ต่อเน็ตเวิร์คตามรูปที่ 7 ตั้ง IP ให้ PC ทุกเครื่อง ยังไม่ต้องตั้ง VLAN → ping ระหว่าง PC → บันทึกผล + show vlan | §4.7 |
| 2 | กำหนด VLAN ให้แต่ละพอร์ต — PC1 กับ PC2 อยู่ VLAN เดียวกัน · PC3 กับ PC4 อยู่ VLAN เดียวกัน (รูปที่ 8) → ping ใหม่ + show vlan + อธิบายสาเหตุ | §4.7 |
| 3 | Clear VLAN ทั้งหมดออกเพื่อเริ่มต้นใหม่ | §4.7 |
| 4 | ต่อใหม่ตามรูปที่ 9 (2 สวิตช์ · เชื่อมกัน 2 เส้น) ตั้ง IP ยังไม่ตั้ง VLAN → ping + show vlan | §4.8 |
| 5 | กำหนด VLAN ให้ PC แต่ละเครื่องอยู่ VLAN เดียวกันตามรูปที่ 9 โดยมีสาย LAN 2 เส้น → ping + show vlan + อธิบาย | §4.8 |
| 6 | ดึงสายออกหนึ่งเส้น แล้วทำเส้นที่เหลือเป็น Trunk แบบ VLAN Tag + ใช้ Wireshark ตรวจจับ IEEE 802.1Q | §4.9 |
| 7 | อ้างอิงรูปที่ 10 ต่อ เร้าเตอร์ แล้ว config ให้แต่ละ VLAN สื่อสารกันได้ (มองเป็นคนละเครือข่าย) → ping + Wireshark | §4.10 |
| 8 | คำถามท้ายการทดลอง — ① 1 สวิตช์ > 3 VLAN มีทั้งแบบ tag และ non-tag ② router รองรับ > 3 VLAN | §4.12 |
ใบแลปเขียนว่า "PC ในการทดลองนี้ทุกเครื่องอยู่ในเน็ตเวิร์ควงเดียวกัน 192.x.y.hostid และมี subnet mask เป็น 255.255.255.0 (คลาส C)"
| ตัวแปรในใบแลป | ค่าของเรา | มาจากไหน |
|---|---|---|
x | 3 | เลขหลังขีดของรหัส 673040128-3 |
y | 128 | สามตัวก่อนขีด = 128 → 128 mod 254 = 128 |
| เครือข่ายฐาน | 192.3.128.0/24 | 192.x.y.0 · mask 255.255.255.0 |
| หมายเลข VLAN | 28 (ของ Pisit) | ใบแลป: "ใช้เลข 2 หลักของนักศึกษาก่อนขีดของทั้ง 2 คน" → 673040128-3 |
ใบแลปเขียนต่อว่า "จากนั้นจึงใช้เลขอะไรก็ได้ที่มีมากกว่า 2 วง VLAN" → หน้านี้จึงใช้ VLAN 10 / 20 (และ 30 / 40 ตอนทำ router) เป็นตัวอย่างหลัก เพราะอ่านง่ายและตรงกับรูปที่ 2, 4, 6 ของใบแลป · ถ้า TA บังคับให้ใช้เลขตามรหัส ให้เปลี่ยน 10 → 28 และ 20 → เลข 2 หลักของเพื่อนคู่แลป คำสั่งอื่นเหมือนเดิมทุกบรรทัด
| เครื่อง | IP (ข้อ 1–6 · วงเดียวกันหมด) | VLAN ในรูปที่ 8 | VLAN ในรูปที่ 9 |
|---|---|---|---|
| PC1 | 192.3.128.11 /24 | VLAN 10 | VLAN 10 (PC1_VLAN_X) |
| PC2 | 192.3.128.12 /24 | VLAN 10 | VLAN 20 (PC2_VLAN_Y) |
| PC3 | 192.3.128.13 /24 | VLAN 20 | VLAN 10 (PC3_VLAN_X) |
| PC4 | 192.3.128.14 /24 | VLAN 20 | VLAN 20 (PC4_VLAN_Y) |
| Wireshark (VPCS) | 192.3.128.100 /24 | — | ต่อกับ Switch1 |
4.2VLAN คืออะไร และทำไมต้องมี
ใบแลปเปิดหัวข้อ 1 ไว้ว่า "สวิตช์เป็นอุปกรณ์พื้นฐานของการสื่อสารรูปแบบ LAN ทำให้อุปกรณ์ที่อยู่ภายใต้ LAN สามารถสื่อสารกันได้ โดยสวิตช์หนึ่งตัวยังสามารถที่จะแบ่งออกเป็นหลายวง LAN เหมือนการแยกออกเป็นหลายสวิตช์ ภายใต้การทำงานของสวิตช์ 1 ตัว ในรูปแบบที่เรียกว่า Virtual LAN (VLAN)"
ประโยคสำคัญที่สุดของทั้งแลปอยู่ท้ายย่อหน้านั้น — "ทำให้อุปกรณ์แม้ว่าจะอยู่บนสวิตช์เดียวกัน หากอยู่ต่าง VLAN ก็ไม่สามารถที่จะสื่อสารกันได้"
สวิตช์ธรรมดา (ไม่มี VLAN)
- ทุกพอร์ตอยู่ใน VLAN 1 โดยปริยาย
- ทั้งตัว = 1 broadcast domain — ใครส่ง broadcast (เช่น ARP) ทุกเครื่องได้รับหมด
- แต่ละพอร์ต = 1 collision domain แยกกันอยู่แล้ว (นี่คือสิ่งที่สวิตช์ต่างจาก hub)
สวิตช์ที่ตั้ง VLAN แล้ว
- สวิตช์ 1 ตัว ทำตัวเป็น สวิตช์เสมือนหลายตัว
- แต่ละ VLAN = broadcast domain ของตัวเอง · มี ตาราง MAC ของตัวเอง · มี ต้นไม้ STP ของตัวเอง
- ข้าม VLAN ต้องผ่านอุปกรณ์เลเยอร์ 3 (router) เท่านั้น → §4.10
ใบแลปเขียนต่อว่า "นอกจากการกำหนดให้สวิตช์ให้ในรูปแบบ VLAN แล้ว เรายังสามารถเชื่อมต่อให้เกิดการสื่อสารแบบข้ามสวิตช์ได้ ดังแสดงในรูปที่ 2" — คือ VLAN เดียวกันขยายข้ามสวิตช์ได้ โดยลากสายเชื่อมสวิตช์หนึ่งเส้นต่อหนึ่ง VLAN
พอตั้ง VLAN เสร็จแล้ว ping ข้าม VLAN ไม่ผ่าน หลายคนคิดว่าตัวเองทำผิดแล้วนั่งรื้อ config ใหม่ทั้งชุด — ไม่ผิด นั่นคือผลที่ต้องได้ ใบแลปข้อ 2 สั่งตรง ๆ ว่า "ทำการ ping ใหม่ระหว่างเครื่อง PC บันทึกผล และใช้คำสั่ง show vlan อีกครั้ง อธิบายพร้อมสาเหตุของการ ping ระหว่างเครื่องที่เกิดขึ้น" → สิ่งที่ต้องเขียนคือ "ping ไม่ผ่านเพราะ VLAN ตัด broadcast domain ทำให้ ARP request ไม่ถึงปลายทาง" ไม่ใช่ไปแก้ให้มันผ่าน
4.3VLAN Tag และมาตรฐาน IEEE 802.1Q
ใบแลปอธิบายที่มาไว้ว่า "จะเห็นว่าการเชื่อมต่อที่เกิดขึ้น หากมีการเชื่อมต่อ VLAN จำนวนมาก จะทำให้เกิดความสิ้นเปลืองพอร์ตที่ต้องเชื่อมต่อระหว่างสวิตช์ ทำให้มีการใช้งานเชื่อมต่อที่เรียกว่า VLAN Tag ภายใต้การใช้พอร์ตเดียวกัน ดังแสดงในรูปที่ 3 และ 4"
พูดง่าย ๆ — ถ้ามี 10 VLAN ก็ต้องลากสายระหว่างสวิตช์ 10 เส้น เปลืองพอร์ตทั้งสองฝั่ง · Trunk แก้ปัญหานี้ด้วยการใส่ป้ายบอกหมายเลข VLAN ลงในเฟรม แล้วส่งทุก VLAN ผ่านสายเส้นเดียว
ใบแลปสรุปว่า "โดยการสื่อสารที่เกิดขึ้นของ VLAN Tag จะอยู่บนมาตรฐาน IEEE 802.1Q ด้วยการเพิ่ม Tag ไปยังเฮดเดอร์ของเฟรม Ethernet ดังรูปที่ 5"
| ช่องในรูปที่ 5 | ขนาด | ทำหน้าที่อะไร |
|---|---|---|
| Type (TPID) | 16 บิต (2 ไบต์) | ค่าคงที่ 0x8100 — เป็นธงบอกว่า "สองไบต์ถัดไปคือ tag ไม่ใช่ EtherType จริง" การ์ดที่ไม่รู้จัก 802.1Q จะอ่านตรงนี้แล้วงง |
| Priority (PCP) | 3 บิต | ระดับความสำคัญ 0–7 ใช้ทำ QoS (Class of Service) — ในแลปนี้เป็น 0 ตลอด |
| Flag (CFI / DEI) | 1 บิต | เดิมคือ Canonical Format Indicator สำหรับ Token Ring ปัจจุบันใช้เป็น Drop Eligible Indicator — ในแลปนี้เป็น 0 |
| VLAN ID (VID) | 12 บิต | หมายเลข VLAN — 12 บิต = 212 = 4096 ค่า (0–4095) โดย 0 กับ 4095 สงวนไว้ → ใช้จริงได้ 1–4094 |
เฟรม Ethernet ปกติยาวสุด 1518 ไบต์ · พอแทรก tag 4 ไบต์เข้าไปจึงกลายเป็น 1522 ไบต์ (เรียกว่า baby giant frame) และ FCS ต้องคำนวณใหม่ทุกครั้งที่แปะหรือถอด tag — เพราะเนื้อเฟรมเปลี่ยนไปแล้ว · ใน Wireshark ใช้ display filter vlan เพื่อเอาเฉพาะเฟรมที่มี tag หรือ vlan.id == 10 เพื่อเจาะ VLAN เดียว
4.4ประเภทพอร์ต — Access Port กับ Trunk Port
ใบแลปเขียนไว้ตรง ๆ ว่า "โดยทั่วไปประเภทพอร์ตของ VLAN มี 2 ประเภท"
① Access Port — พอร์ตที่ต่อกับ PC
คำต่อคำจากใบแลป: "สามารถสื่อสารเพียง 1 VLAN เท่านั้น และสามารถรับส่งในรูปแบบที่ไม่มีกำหนด tag เท่านั้น ทำให้เฟรมที่ได้รับภายใต้พอร์ตนี้จะต้องอยู่ภายใต้ VLAN ที่ระบุเท่านั้น หากเป็น VLAN อื่นจะถูกกำจัดทิ้งทั้งหมด (drop) รวมถึงการสื่อสารในรูปแบบ IEEE 802.1Q tag ซึ่งจะสามารถใช้ในกรณีที่เป็นแบบ trunk port เท่านั้น"
- อยู่ได้ VLAN เดียว
- เฟรมที่วิ่งเข้า/ออก ไม่มี tag (untagged) — PC ไม่เคยเห็น tag เลย
- สวิตช์รู้ว่าเฟรมนี้เป็นของ VLAN ไหน จากพอร์ตที่มันเข้ามา ไม่ใช่จากตัวเฟรม
② Trunk Port — พอร์ตที่ต่อระหว่างสวิตช์
คำต่อคำจากใบแลป: "เป็นพอร์ตที่ใช้สื่อสารระหว่างสวิตช์ โดยเฟรมที่ส่งจะต้องได้รับการ tag ก่อน"
- หอบได้ หลาย VLAN พร้อมกัน บนสายเส้นเดียว
- เฟรมมี tag 802.1Q ติดไปด้วย → ปลายทางอ่านแล้วรู้ว่าเป็น VLAN ไหน
- ยกเว้น Native VLAN ซึ่งวิ่งไม่มี tag (ค่าเริ่มต้นคือ VLAN 1)
① เสียบ PC เข้าพอร์ตที่เป็น trunk → PC ได้เฟรมที่มี tag ซึ่งการ์ดปกติอ่านไม่ออก จึงทิ้งทั้งหมด อาการคือ สายไฟเขียวแต่ ping ไม่ออกสักที่ ② ปล่อยสายระหว่างสวิตช์ให้เป็น access → สายเส้นนั้นหอบได้ VLAN เดียว VLAN อื่นข้ามไม่ได้ (ซึ่งเป็นผลที่ตั้งใจในข้อ 5 ของใบแลป แต่ผิดในข้อ 6 ที่สั่งให้ทำ trunk)
4.5คำสั่งที่เกี่ยวข้อง (Listing 1–10)
ใบแลปหัวข้อ 2 ลิสต์คำสั่งไว้ 10 ชุด — ตารางนี้คือทั้ง 10 ชุดพร้อมค่าจริง ใช้เป็นแผ่นโกงในห้องสอบได้เลย
| Listing | ทำอะไร | คำสั่ง (ค่าจริง) |
|---|---|---|
| 1 | สร้าง VLAN + ตั้งชื่อ | vlan 10 → name VLAN10 |
| 2 | ยัดพอร์ตเข้า VLAN | interface range fa1/1 - 2 → switchport mode access → switchport access vlan 10 |
| 3 | ตรวจสอบ VLAN | show vlan · show vlan brief ข้อสอบสั่งส่งอันนี้ |
| 4 | ทำ Trunk + native vlan | interface fa1/10 → switchport mode trunk → switchport trunk native vlan 1 |
| 5 | อนุญาต VLAN บน trunk | switchport mode trunk → switchport trunk allowed vlan 10,20 |
| 6 | ตรวจสอบ Trunk | show interface fa1/10 switchport · (เพิ่ม) show interfaces trunk |
| 7 | ตั้ง VTP | vlan database → vtp domain NETLAB → vtp server / vtp client → §4.11 |
| 8 | ตรวจสอบ VTP | show vtp status · show vtp stat |
| 9 | Port Mirroring | monitor session 1 source interface fa1/10 → monitor session 1 destination interface fa1/3 |
| 10 | VLAN บน Router | interface fa0/0.10 → encapsulation dot1Q 10 → ip address 192.3.128.1 255.255.255.0 → §4.10 |
Switch>enable
Switch#configure terminal
Switch(config)#vlan 10
Switch(config-vlan)#name VLAN10
Switch(config-vlan)#exit
Switch(config)#vlan 20
Switch(config-vlan)#name VLAN20
Switch(config-vlan)#exit
#
# ยัดพอร์ตทีละหลายพอร์ตด้วย interface range (เว้นวรรครอบขีดกลางด้วย)
Switch(config)#interface range fa1/1 - 2
Switch(config-if-range)#switchport mode access
Switch(config-if-range)#switchport access vlan 10
Switch(config-if-range)#no shutdown
Switch(config-if-range)#exit
Switch(config)#interface range fa1/3 - 4
Switch(config-if-range)#switchport mode access
Switch(config-if-range)#switchport access vlan 20
Switch(config-if-range)#no shutdown
Switch(config-if-range)#end
Switch#show vlan brief
Switch#copy running-config startup-configSwitch#configure terminal
Switch(config)#interface fa1/10
Switch(config-if)#switchport trunk encapsulation dot1q # ถ้าขึ้น Invalid input → ข้ามบรรทัดนี้ (อ่านกล่องล่าง)
Switch(config-if)#switchport mode trunk
Switch(config-if)#switchport trunk native vlan 1
Switch(config-if)#switchport trunk allowed vlan 10,20
Switch(config-if)#no shutdown
Switch(config-if)#end
Switch#show interfaces trunk
Switch#show interface fa1/10 switchport # Listing 6 ของใบแลปencapsulation และรุ่นที่ไม่มีคำสั่งนี้
① ต้องสั่ง switchport trunk encapsulation dot1q ก่อน switchport mode trunk เสมอ — ถ้าสลับลำดับ สวิตช์ที่รองรับทั้ง ISL และ dot1Q (เช่น 3550 / 3560) จะตอบว่า Command rejected: An interface whose trunk encapsulation is "Auto" can not be configured to "trunk" mode
② สวิตช์หลายรุ่นรองรับ dot1Q อย่างเดียวอยู่แล้ว จึงไม่มีคำสั่งนี้ (Cisco 2950, 3650, โมดูล NM-16ESW ใน GNS3 และ IOU บางรุ่น) — ถ้าพิมพ์แล้วขึ้น % Invalid input detected ให้ข้ามบรรทัดนี้ไปเลย ไม่ใช่ความผิดพลาด แล้วสั่ง switchport mode trunk ตรง ๆ ได้เลย
switchport trunk allowed vlan — 4 รูปแบบที่ต้องแยกให้ออก ส่วนขยาย
| คำสั่ง | ผลลัพธ์ |
|---|---|
switchport trunk allowed vlan 10,20 | แทนที่ทั้งรายการ — เหลือแค่ 10 กับ 20 · VLAN 1 และอื่น ๆ ถูกตัดออกหมด |
switchport trunk allowed vlan add 30 | เพิ่ม 30 เข้าไปในรายการเดิม |
switchport trunk allowed vlan remove 20 | เอา 20 ออกจากรายการ |
switchport trunk allowed vlan all | กลับไปเป็นค่าเริ่มต้น = อนุญาตทุก VLAN (1–4094) |
อาการคลาสสิก: พิมพ์ allowed vlan 10 แล้วตามด้วย allowed vlan 20 อีกบรรทัด → เหลืออนุญาตแค่ VLAN 20 เพราะบรรทัดหลังทับบรรทัดแรก ต้องใช้ 10,20 หรือ add
4.6เตรียมอุปกรณ์ใน GNS3 บน Mac + ชื่อพอร์ต
แลปนี้ต้องใช้สวิตช์ที่มี CLI จริง เพราะข้อสอบสั่งส่ง show vlan — "Ethernet switch" ที่ติดมากับ GNS3 ใช้ไม่ได้ เพราะ console เข้าไม่ได้และไม่มีคำสั่ง show อะไรเลย
| ใช้อะไรเป็นสวิตช์ | ชื่อพอร์ต | หมายเหตุ |
|---|---|---|
| c3725 / c3745 + NM-16ESW (ที่หน้านี้ใช้เป็นหลัก) | fa1/0 – fa1/15(ถ้าใส่โมดูลที่ slot 1) | ตรงกับคำสั่ง interface range fa1/1 - 2 ในหน้านี้ · ต้องใช้ show vlan-switch ไม่ใช่ show vlan — อ่าน §4.14 |
| L2-ADVENTERPRISE (IOU) | e0/0 – e0/3, e1/0 …4 พอร์ตต่อ 1 slot | show vlan brief ใช้ได้ตรง ๆ · แทน fa1/1 → e0/1, fa1/2 → e0/2, fa1/10 → e0/3 |
| สวิตช์เครื่องจริง 2950 | fa0/1 – fa0/24 | dot1Q อย่างเดียว → ไม่มี switchport trunk encapsulation |
| สวิตช์เครื่องจริง 3650 | gi1/0/1 – gi1/0/24 | ชื่อพอร์ต 3 ท่อน · show vlan brief ใช้ได้ตรง ๆ |
| พอร์ต | Switch1 | Switch2 |
|---|---|---|
fa1/1 | PC1 | PC3 |
fa1/2 | PC2 | PC4 |
fa1/3 | เครื่องที่รัน Wireshark (VPCS ตามรูปที่ 9) | — |
fa1/10 | สายเส้นที่ 1 ไป Switch2 (ต่อมาทำเป็น trunk) | สายเส้นที่ 1 ไป Switch1 |
fa1/11 | สายเส้นที่ 2 ไป Switch2 (ข้อ 6 สั่งให้ดึงเส้นนี้ออก) | สายเส้นที่ 2 ไป Switch1 |
$ ls /dev/tty.*
# /dev/tty.Bluetooth-Incoming-Port /dev/tty.usbmodem1301 ← อันนี้คืออุปกรณ์ที่เพิ่งเสียบ
$ screen /dev/tty.usbmodem1301 9600
# ออกจาก screen: กด Ctrl-A แล้วตามด้วย Ctrl-\ แล้วตอบ y
$ screen -ls # ดูว่ามี session ค้างอยู่ไหม
$ screen -X -S 12345 quit # ฆ่า session ที่ค้างถ้าทำใน GNS3 ไม่ต้องใช้ screen เลย — คลิกขวาที่อุปกรณ์ → Console จะเปิด Terminal ของ macOS มาให้เอง (ต้องกด Start ให้จุดหน้าชื่ออุปกรณ์เป็นสีเขียวก่อน) · การดักจับก็ง่ายกว่า — คลิกขวาที่เส้นลิงก์ → Start capture แล้ว Wireshark จะเด้งขึ้นมาเอง ไม่ต้องทำ port mirroring และไม่ต้องมี VPCS ตัว Wireshark ตามรูปที่ 9 เลย
4.7การทดลองข้อ 1–3 — สวิตช์ตัวเดียว (รูปที่ 7 และ 8)
ข้อ 1 — ยังไม่ตั้ง VLAN ping ต้องผ่านหมด
- ลาก Switch1 กับ VPCS 4 ตัว ลงมาใน GNS3 แล้วต่อสายตามผังพอร์ต: PC1→
fa1/1, PC2→fa1/2, PC3→fa1/3, PC4→fa1/4· กด Start ทุกตัวจนจุดเป็นสีเขียว - ตั้ง IP ให้ VPCS ทั้ง 4 ตัว — วงเดียวกันหมด ไม่ต้องใส่ gateway
[VPCS] — คลิกขวาที่แต่ละตัว → Console แล้วพิมพ์
PC1> ip 192.3.128.11 255.255.255.0 PC2> ip 192.3.128.12 255.255.255.0 PC3> ip 192.3.128.13 255.255.255.0 PC4> ip 192.3.128.14 255.255.255.0 PC1> show ip # ตรวจว่าใส่ถูก PC1> save # กัน IP หายตอนปิด GNS3 - ping ให้ครบทุกคู่ แล้วบันทึกผล — ตอนนี้ต้องผ่านหมด เพราะทุกพอร์ตอยู่ VLAN 1 ด้วยกัน
[VPCS] — 6 คู่ที่ต้องบันทึก
PC1> ping 192.3.128.12 # PC1 → PC2 ผ่าน PC1> ping 192.3.128.13 # PC1 → PC3 ผ่าน PC1> ping 192.3.128.14 # PC1 → PC4 ผ่าน PC2> ping 192.3.128.13 # PC2 → PC3 ผ่าน PC2> ping 192.3.128.14 # PC2 → PC4 ผ่าน PC3> ping 192.3.128.14 # PC3 → PC4 ผ่าน # ผลที่ต้องเห็น: # 84 bytes from 192.3.128.12 icmp_seq=1 ttl=64 time=1.234 ms - เก็บ
show vlanครั้งที่ 1 — ตอนนี้ทุกพอร์ตต้องอยู่ใน VLAN 1 (default)[Switch#] — ผลที่ควรเห็นก่อนตั้ง VLANSwitch#show vlan brief VLAN Name Status Ports ---- -------------------------------- --------- ------------------------------- 1 default active Fa1/0, Fa1/1, Fa1/2, Fa1/3, Fa1/4 Fa1/5, Fa1/6, Fa1/7, Fa1/8, Fa1/9 1002 fddi-default act/unsup 1003 token-ring-default act/unsup 1004 fddinet-default act/unsup 1005 trnet-default act/unsup # └── พอร์ตทุกอันกองอยู่ VLAN 1 → PC ทุกเครื่องคุยกันได้หมด
ข้อ 2 — ตั้ง VLAN ตามรูปที่ 8 แล้ว ping ใหม่
รูปที่ 8 บอกว่า PC1 + PC2 = VLAN X และ PC3 + PC4 = VLAN Y — เราแทน X = 10, Y = 20 (พอร์ตเรียงกันพอดี จึงใช้ interface range ได้ทั้งสองชุด)
Switch>enable
Switch#configure terminal
Switch(config)#hostname SW1
SW1(config)#vlan 10
SW1(config-vlan)#name VLAN10
SW1(config-vlan)#exit
SW1(config)#vlan 20
SW1(config-vlan)#name VLAN20
SW1(config-vlan)#exit
#
SW1(config)#interface range fa1/1 - 2 # PC1, PC2 = VLAN X
SW1(config-if-range)#switchport mode access
SW1(config-if-range)#switchport access vlan 10
SW1(config-if-range)#no shutdown
SW1(config-if-range)#exit
#
SW1(config)#interface range fa1/3 - 4 # PC3, PC4 = VLAN Y
SW1(config-if-range)#switchport mode access
SW1(config-if-range)#switchport access vlan 20
SW1(config-if-range)#no shutdown
SW1(config-if-range)#end
SW1#show vlan brief
SW1#copy running-config startup-configVLAN Name Status Ports
---- -------------------------------- --------- -------------------------------
1 default active Fa1/0, Fa1/5, Fa1/6, Fa1/7
Fa1/8, Fa1/9, Fa1/10, Fa1/11
10 VLAN10 active Fa1/1, Fa1/2
20 VLAN20 active Fa1/3, Fa1/4
1002 fddi-default act/unsupPC1> ping 192.3.128.12 # PC1 → PC2 ✅ ผ่าน (VLAN 10 ทั้งคู่)
PC3> ping 192.3.128.14 # PC3 → PC4 ✅ ผ่าน (VLAN 20 ทั้งคู่)
PC1> ping 192.3.128.13 # PC1 → PC3 ❌ ไม่ผ่าน (VLAN 10 ↔ 20)
PC1> ping 192.3.128.14 # PC1 → PC4 ❌ ไม่ผ่าน
PC2> ping 192.3.128.13 # PC2 → PC3 ❌ ไม่ผ่าน
PC2> ping 192.3.128.14 # PC2 → PC4 ❌ ไม่ผ่าน
# ที่ไม่ผ่านจะขึ้น host (192.3.128.13) not reachable หรือ timeout ทุกบรรทัดPC ทั้ง 4 เครื่องยังอยู่ใน subnet เดียวกัน (192.3.128.0/24) ทุกเครื่องจึงคิดว่าปลายทางอยู่ใน LAN เดียวกัน และส่ง ARP request แบบ broadcast ออกไปถามหา MAC ของปลายทางโดยตรง ไม่ผ่าน gateway · แต่สวิตช์ที่ตั้ง VLAN แล้วจะส่ง broadcast ออกเฉพาะพอร์ตที่อยู่ VLAN เดียวกันเท่านั้น ARP request ของ PC1 (VLAN 10) จึงไปไม่ถึง PC3 (VLAN 20) · เมื่อไม่มี ARP reply กลับมา PC1 ก็ไม่มี MAC ปลายทางให้ใส่ในเฟรม จึงไม่มีแพ็กเก็ต ICMP ออกจากเครื่องเลยแม้แต่ตัวเดียว → ping ไม่ผ่าน · สรุป: VLAN = การตัด broadcast domain ที่ระดับพอร์ต ทำให้สวิตช์ 1 ตัวทำงานเหมือนสวิตช์ 2 ตัวที่ไม่ได้ต่อกัน การจะให้คุยข้าม VLAN ต้องมีอุปกรณ์เลเยอร์ 3 มาช่วย → §4.10
ข้อ 3 — clear VLAN ทั้งหมดออกเพื่อเริ่มใหม่
ใบแลปสั่งสั้น ๆ ว่า "ทำการ clear vlan ทั้งหมดออกเพื่อเริ่มต้นใหม่" — มี 2 วิธี
SW1#configure terminal
# ① คืนพอร์ตกลับ VLAN 1 ก่อน — สำคัญมาก อ่านกล่องเตือนด้านล่าง
SW1(config)#interface range fa1/1 - 4
SW1(config-if-range)#switchport access vlan 1
SW1(config-if-range)#exit
# ② ค่อยลบตัว VLAN ทิ้ง
SW1(config)#no vlan 10
SW1(config)#no vlan 20
SW1(config)#end
SW1#show vlan brief # ต้องเหลือแต่ VLAN 1 และทุกพอร์ตกลับมาอยู่ใน defaultSW1#delete flash:vlan.dat # กด Enter ยืนยันสองครั้ง
SW1#erase startup-config # ถ้าจะล้าง config อื่นด้วย
SW1#reload # ตอบ no ตรงคำถาม save แล้วตอบ yes ตรง reloadถ้าสั่ง no vlan 10 โดยยังไม่ได้คืนพอร์ตกลับ VLAN 1 พอร์ต fa1/1 และ fa1/2 จะยังจำว่าตัวเองอยู่ VLAN 10 ซึ่งไม่มีอยู่แล้ว → พอร์ตเข้าสถานะ inactive ไฟยังเขียวแต่ไม่ส่งอะไรเลย · show vlan brief จะแสดงว่า VLAN 10 หายไป และไม่เห็นพอร์ตทั้งสองอยู่ใต้ VLAN ไหนเลย — อาการนี้หาสาเหตุยากมากถ้าไม่รู้ · ลำดับที่ถูกคือคืนพอร์ตก่อน แล้วค่อยลบ VLAN
4.8การทดลองข้อ 4–5 — สองสวิตช์ สองสาย (รูปที่ 9)
| เส้นในรูป | ปลายซ้าย | ปลายขวา | VLAN |
|---|---|---|---|
PC1_VLAN_X → Switch1 | PC1 e0 | SW1 fa1/1 | VLAN 10 (access) |
PC2_VLAN_Y → Switch1 | PC2 e0 | SW1 fa1/2 | VLAN 20 (access) |
| Wireshark → Switch1 | VPCS e0 | SW1 fa1/3 | ปลายทางของ port mirroring |
| สายเส้นที่ 1 ระหว่างสวิตช์ | SW1 fa1/10 | SW2 fa1/10 | VLAN 10 (access) → ข้อ 6 เปลี่ยนเป็น trunk |
| สายเส้นที่ 2 ระหว่างสวิตช์ | SW1 fa1/11 | SW2 fa1/11 | VLAN 20 (access) → ข้อ 6 ดึงเส้นนี้ออก |
PC3_VLAN_X → Switch2 | PC3 e0 | SW2 fa1/1 | VLAN 10 (access) |
PC4_VLAN_Y → Switch2 | PC4 e0 | SW2 fa1/2 | VLAN 20 (access) |
ข้อ 4 — ต่อตามรูปที่ 9 แต่ยังไม่ตั้ง VLAN
IP ใช้ชุดเดิมทั้งหมด (192.3.128.11 – .14 mask 255.255.255.0) · ตอนนี้ยังไม่มี VLAN → ping ต้องผ่านทุกคู่ และ show vlan brief ของทั้งสองสวิตช์ต้องมีแต่ VLAN 1
พอต่อสาย 2 เส้นระหว่างสวิตช์คู่เดียวกันโดยยังไม่ได้แบ่ง VLAN จะเกิด switching loop — broadcast วิ่งวนไม่รู้จบจนสวิตช์ CPU 100% · โชคดีที่ Cisco เปิด Spanning Tree ไว้ให้อยู่แล้วโดยปริยาย STP จะบล็อกพอร์ตหนึ่งในสองเส้นทิ้ง ping จึงยังผ่านปกติ (แต่วิ่งเส้นเดียว) · ตรวจได้ด้วย show spanning-tree แล้วมองหาคำว่า BLK หรือ Blocking ที่พอร์ตหนึ่ง · ถ้าเห็นไฟกะพริบรัวและ console หน่วงจนพิมพ์ไม่ทัน แปลว่า STP ถูกปิด → ดึงสายออกหนึ่งเส้นทันที · เรื่อง STP เต็ม ๆ อยู่ใน Lab 5
ข้อ 5 — ตั้ง VLAN ให้ครบทั้งสองสวิตช์ (สาย 2 เส้น VLAN ละเส้น)
นี่คือรูปแบบเดียวกับรูปที่ 2 เป๊ะ ๆ — สายเส้นบน "Link is in VLAN 10" สายเส้นล่าง "Link is in VLAN 20" · สายระหว่างสวิตช์ยังเป็น access port อยู่ เพียงแต่ถูกกำหนดให้อยู่คนละ VLAN
Switch>enable
Switch#configure terminal
Switch(config)#hostname SW1
SW1(config)#vlan 10
SW1(config-vlan)#name VLAN10
SW1(config-vlan)#exit
SW1(config)#vlan 20
SW1(config-vlan)#name VLAN20
SW1(config-vlan)#exit
#
# PC1 (VLAN X) + สายเส้นที่ 1 ไป SW2 → ทั้งคู่อยู่ VLAN 10
SW1(config)#interface fa1/1
SW1(config-if)#switchport mode access
SW1(config-if)#switchport access vlan 10
SW1(config-if)#no shutdown
SW1(config-if)#exit
SW1(config)#interface fa1/10
SW1(config-if)#switchport mode access
SW1(config-if)#switchport access vlan 10
SW1(config-if)#no shutdown
SW1(config-if)#exit
#
# PC2 (VLAN Y) + สายเส้นที่ 2 ไป SW2 → ทั้งคู่อยู่ VLAN 20
SW1(config)#interface fa1/2
SW1(config-if)#switchport mode access
SW1(config-if)#switchport access vlan 20
SW1(config-if)#no shutdown
SW1(config-if)#exit
SW1(config)#interface fa1/11
SW1(config-if)#switchport mode access
SW1(config-if)#switchport access vlan 20
SW1(config-if)#no shutdown
SW1(config-if)#end
SW1#show vlan brief
SW1#copy running-config startup-configSwitch>enable
Switch#configure terminal
Switch(config)#hostname SW2
SW2(config)#vlan 10
SW2(config-vlan)#name VLAN10
SW2(config-vlan)#exit
SW2(config)#vlan 20
SW2(config-vlan)#name VLAN20
SW2(config-vlan)#exit
SW2(config)#interface range fa1/1 , fa1/10 # PC3 + สายเส้นที่ 1 → VLAN 10
SW2(config-if-range)#switchport mode access
SW2(config-if-range)#switchport access vlan 10
SW2(config-if-range)#no shutdown
SW2(config-if-range)#exit
SW2(config)#interface range fa1/2 , fa1/11 # PC4 + สายเส้นที่ 2 → VLAN 20
SW2(config-if-range)#switchport mode access
SW2(config-if-range)#switchport access vlan 20
SW2(config-if-range)#no shutdown
SW2(config-if-range)#end
SW2#show vlan brief
SW2#copy running-config startup-configinterface range fa1/1 , fa1/10 — เครื่องหมาย จุลภาค ใช้เลือกพอร์ตที่ไม่ติดกัน ส่วน ขีดกลาง (fa1/1 - 2) ใช้เลือกพอร์ตที่เรียงติดกัน · ต้องเว้นวรรครอบเครื่องหมายทั้งสองแบบ ไม่งั้น IOS ฟ้อง Invalid input
PC1> ping 192.3.128.13 # PC1 → PC3 ✅ ผ่าน VLAN 10 ทั้งคู่ ข้ามสวิตช์ผ่านสายเส้นที่ 1
PC2> ping 192.3.128.14 # PC2 → PC4 ✅ ผ่าน VLAN 20 ทั้งคู่ ข้ามสวิตช์ผ่านสายเส้นที่ 2
PC1> ping 192.3.128.12 # PC1 → PC2 ❌ ไม่ผ่าน อยู่สวิตช์เดียวกันแต่คนละ VLAN
PC1> ping 192.3.128.14 # PC1 → PC4 ❌ ไม่ผ่าน คนละสวิตช์และคนละ VLAN
PC3> ping 192.3.128.14 # PC3 → PC4 ❌ ไม่ผ่าน
PC2> ping 192.3.128.13 # PC2 → PC3 ❌ ไม่ผ่านVLAN ไม่ได้หยุดอยู่แค่ในสวิตช์ตัวเดียว — เมื่อสายระหว่างสวิตช์ถูกกำหนดให้อยู่ VLAN 10 สายเส้นนั้นก็กลายเป็นส่วนหนึ่งของ broadcast domain ของ VLAN 10 ทำให้ PC1 (บน SW1) กับ PC3 (บน SW2) อยู่ในวง broadcast เดียวกันข้ามสวิตช์ ARP ถึงกันได้ → ping ผ่าน · ในทางกลับกัน PC1 กับ PC2 อยู่บนสวิตช์ตัวเดียวกันแท้ ๆ แต่คุยกันไม่ได้ เพราะคนละ VLAN · ข้อสรุป: สิ่งที่กำหนดว่าใครคุยกับใครได้คือหมายเลข VLAN ไม่ใช่ระยะทางหรือการอยู่เครื่องเดียวกัน · ข้อเสียของวิธีนี้คือเปลืองพอร์ต — 2 VLAN ใช้ 2 เส้น ถ้ามี 10 VLAN ต้อง 10 เส้น จึงต้องเปลี่ยนไปใช้ trunk ในข้อถัดไป
4.9การทดลองข้อ 6 — ดึงสายออกเส้นหนึ่ง แล้วทำ Trunk 802.1Q
ใบแลปสั่งว่า "ให้ดึงสายออกหนึ่งเส้นและกำหนดให้เป็นการสื่อสารแบบ Trunk แบบ VLAN Tag โดยเลือกพอร์ตเพื่อใช้เป็น Trunk port พร้อมทั้งใช้ Wireshark ตรวจจับ package VLAN tag IEEE 802.1Q"
- ลบสายเส้นที่ 2 ออก — ใน GNS3 คลิกขวาที่เส้นระหว่าง
fa1/11↔fa1/11แล้วเลือก Delete · เหลือสายเชื่อมสวิตช์เส้นเดียวที่fa1/10 - ตอนนี้ ping จะพังทันที —
PC2 → PC4(VLAN 20) ไม่ผ่านแล้ว เพราะสายของ VLAN 20 ถูกดึงออก · นี่คือหลักฐานว่าสายเส้นเดิมหอบได้ VLAN เดียวจริง ๆ ให้ ping บันทึกไว้ก่อนแก้ - เปลี่ยน
fa1/10ของทั้งสองสวิตช์ให้เป็น Trunk — ต้องทำทั้งสองฝั่ง ไม่งั้นเป็น trunk ข้างเดียวใช้ไม่ได้[SW1#] — และทำซ้ำแบบเดียวกันที่ SW2SW1#configure terminal SW1(config)#interface fa1/10 SW1(config-if)#switchport trunk encapsulation dot1q # ขึ้น Invalid input ก็ข้ามได้ SW1(config-if)#switchport mode trunk SW1(config-if)#switchport trunk native vlan 1 # Listing 4 ของใบแลป SW1(config-if)#switchport trunk allowed vlan 10,20 # Listing 5 ของใบแลป SW1(config-if)#no shutdown SW1(config-if)#end SW1#show interfaces trunk SW1#copy running-config startup-config - ยืนยันว่า trunk ขึ้นแล้ว
[SW1#] show interfaces trunk — ผลที่ต้องเห็น
Port Mode Encapsulation Status Native vlan Fa1/10 on 802.1q trunking 1 Port Vlans allowed on trunk Fa1/10 10,20 Port Vlans allowed and active in management domain Fa1/10 10,20 Port Vlans in spanning tree forwarding state and not pruned Fa1/10 10,20 # └── ต้องขึ้น trunking ไม่ใช่ not-trunking · และต้องเห็นครบทั้ง 10 และ 20 - ping ใหม่ทั้ง 6 คู่ — ผลต้องกลับมาเหมือนข้อ 5 เป๊ะ ๆ ทั้งที่เหลือสายเส้นเดียว
[VPCS]
PC1> ping 192.3.128.13 # PC1 → PC3 ✅ ผ่าน (VLAN 10 · tag 10 วิ่งบน trunk) PC2> ping 192.3.128.14 # PC2 → PC4 ✅ ผ่าน (VLAN 20 · tag 20 วิ่งบนสายเส้นเดียวกัน) PC1> ping 192.3.128.12 # PC1 → PC2 ❌ ไม่ผ่าน (คนละ VLAN — ยังต้องมี router)
สายลดจาก 2 เส้นเหลือ 1 เส้น แต่ผลการ ping เหมือนเดิมทุกคู่ — เพราะ trunk แนบ 802.1Q tag ขนาด 4 ไบต์ เข้าไปในเฟรม ทำให้สวิตช์ปลายทางแยกออกว่าเฟรมไหนเป็นของ VLAN ใด จึงไม่ต้องใช้สายแยกต่อ VLAN อีกต่อไป · ประหยัดพอร์ตจาก N เส้น (N = จำนวน VLAN) เหลือ 1 เส้น
ดักจับ 802.1Q ด้วย Wireshark
วิธีที่ 1 — ใน GNS3 (แนะนำสำหรับ Mac)
- คลิกขวาที่เส้น trunk ระหว่าง
fa1/10↔fa1/10 - เลือก Start capture → Wireshark เด้งขึ้นมาเอง
- กลับไปที่
PC1แล้วping 192.3.128.13 - ใส่ display filter
vlanแล้วกด Enter
วิธีที่ 2 — ตามรูปที่ 9 (port mirroring)
รูปที่ 9 มี VPCS ตัวหนึ่งชื่อ Wireshark ต่ออยู่กับ Switch1 — ถ้าจะทำตามรูปเป๊ะ ต้องสั่ง port mirroring (Listing 9) ให้สวิตช์ทำสำเนาเฟรมจากพอร์ต trunk ไปออกพอร์ตที่เสียบเครื่อง Wireshark ไว้ → ดูคำสั่งที่ §4.11
vlan # เอาเฉพาะเฟรมที่มี tag 802.1Q
vlan.id == 10 # เจาะเฉพาะ VLAN 10
vlan.id == 20 && icmp # เฉพาะ ping ของ VLAN 20
eth.type == 0x8100 # อีกวิธีหนึ่ง — จับที่ค่า TPID ตรง ๆสิ่งที่ต้องเห็นในหน้าต่าง Wireshark — คลิกที่แพ็กเก็ต ICMP หนึ่งอัน แล้วกางแถบ Ethernet ในบานหน้าต่างกลาง จะเจอบรรทัดเพิ่มมาที่ไม่มีในเฟรมธรรมดา
Ethernet II, Src: 00:50:79:66:68:00, Dst: 00:50:79:66:68:02
802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 10
000. .... .... .... = Priority: Best Effort (0) # ← ช่อง Priority ในรูปที่ 5
...0 .... .... .... = DEI: Ineligible # ← ช่อง Flag ในรูปที่ 5
.... 0000 0000 1010 = ID: 10 # ← VLAN ID 12 บิต = 10
Type: IPv4 (0x0800)
Internet Protocol Version 4, Src: 192.3.128.11, Dst: 192.3.128.13
Internet Control Message Protocol① ดักที่ access port จะไม่มีวันเห็น tag เพราะสวิตช์ถอด tag ออกก่อนส่งเฟรมออกพอร์ต access เสมอ — ต้องดักที่ ลิงก์ trunk เท่านั้น ② เฟรมของ native VLAN (ค่าเริ่มต้น VLAN 1) วิ่งบน trunk แบบไม่มี tag ดังนั้นถ้าเผลอเอา PC ไปไว้ VLAN 1 แล้วดักบน trunk ก็ยังไม่เห็น tag อยู่ดี — ต้อง ping ระหว่างเครื่องที่อยู่ VLAN 10 หรือ 20 ③ ถ้าดักบนการ์ดจริงของเครื่อง (ไม่ใช่ใน GNS3) driver ของการ์ดหลายรุ่นตัด tag ทิ้งก่อนส่งให้ระบบปฏิบัติการ — นี่คือเหตุผลที่ใบแลปเขียนหมายเหตุไว้ว่า "Wireshark ควรเป็น Linux" · บน Mac ทางที่ชัวร์ที่สุดคือ ดักที่ลิงก์ใน GNS3 ซึ่งเห็น tag ครบเสมอ
switchport trunk native vlan 1 (Listing 4) บอกว่า VLAN ไหนได้สิทธิ์วิ่งบน trunk โดยไม่ต้องติด tag · มีไว้เพื่อความเข้ากันได้กับอุปกรณ์เก่าที่อ่าน tag ไม่เป็น · ถ้าสองฝั่งตั้ง native vlan ไม่ตรงกัน (เช่นฝั่งหนึ่ง 1 อีกฝั่ง 99) เฟรมที่ไม่มี tag จะถูกโยนเข้าผิด VLAN → เกิด VLAN leaking คือทราฟฟิกรั่วข้าม VLAN โดยไม่ตั้งใจ · Cisco จะเตือนผ่าน CDP ว่า %CDP-4-NATIVE_VLAN_MISMATCH
4.10การทดลองข้อ 7 — ให้ VLAN คุยข้ามกันด้วย Router (รูปที่ 10)
ใบแลปเขียนไว้ว่า "เนื่องจากการจัดทำ VLAN ทำให้การสื่อสารระหว่าง VLAN ไม่สามารถทำได้ ดังนั้นอาจต้องการสื่อสารข้าม VLAN จึงจำเป็นต้องมีเร้าเตอร์เข้ามาเพื่อให้สามารถสื่อสารระหว่าง VLAN ได้ ดังรูปที่ 6"
ข้อ 1–6 PC ทุกเครื่องอยู่วงเดียวกัน (192.3.128.0/24) แต่ข้อ 7 ต่างออกไป — พอมี router มาคั่น แต่ละ VLAN ต้องเป็นคนละ subnet ไม่งั้น PC จะไม่ยอมส่งแพ็กเก็ตไปที่ gateway เลย · ใช้รูปแบบเดียวกับตารางของ Lab 2 คือเปลี่ยนออกเทตแรก ให้เป็นคนละวง
| VLAN | เครื่อง | IP ของ PC | Gateway | Subinterface ของ router |
|---|---|---|---|---|
| 10 | PC1 (SW1) | 192.3.128.11 | 192.3.128.1 | fa0/0.10 |
| 20 | PC2 (SW1) | 193.3.128.12 | 193.3.128.1 | fa0/0.20 |
| 30 | PC3 (SW2) | 194.3.128.13 | 194.3.128.1 | fa0/1.30 |
| 40 | PC4 (SW2) | 195.3.128.14 | 195.3.128.1 | fa0/1.40 |
Subnet mask ทุกวง = 255.255.255.0 · 4 VLAN แบบนี้ตอบคำถามท้ายการทดลองข้อ 2 ไปในตัว (ที่ถามว่า "หากมีมากกว่า 3 VLAN")
ขั้นตอนที่ 1 — ทำพอร์ตที่ต่อกับ router ให้เป็น trunk
พอร์ต fa1/10 ของแต่ละสวิตช์เปลี่ยนจาก "ต่อไปสวิตช์อีกตัว" มาเป็น "ต่อไป router" — ยังต้องเป็น trunk เหมือนเดิม เพราะต้องหอบ 2 VLAN ขึ้นไปให้ router
SW1#configure terminal
SW1(config)#vlan 10
SW1(config-vlan)#name VLAN10
SW1(config-vlan)#exit
SW1(config)#vlan 20
SW1(config-vlan)#name VLAN20
SW1(config-vlan)#exit
SW1(config)#interface fa1/1
SW1(config-if)#switchport mode access
SW1(config-if)#switchport access vlan 10
SW1(config-if)#exit
SW1(config)#interface fa1/2
SW1(config-if)#switchport mode access
SW1(config-if)#switchport access vlan 20
SW1(config-if)#exit
SW1(config)#interface fa1/10 # สายที่ไปหา Router fa0/0
SW1(config-if)#switchport trunk encapsulation dot1q
SW1(config-if)#switchport mode trunk
SW1(config-if)#switchport trunk allowed vlan 10,20
SW1(config-if)#no shutdown
SW1(config-if)#end
SW1#copy running-config startup-configSwitch2 ทำเหมือนกันทุกบรรทัด เปลี่ยนแค่ hostname SW2 · vlan 30 ชื่อ VLAN30 ที่ fa1/1 (PC3) · vlan 40 ชื่อ VLAN40 ที่ fa1/2 (PC4) · และ switchport trunk allowed vlan 30,40 ที่ fa1/10 (สายไป Router fa0/1)
ขั้นตอนที่ 2 — Router-on-a-Stick (Listing 10)
Router>enable
Router#configure terminal
Router(config)#hostname R1
#
# ① เปิดขาจริงก่อน — ตัวมันเองไม่ต้องมี IP แต่ต้อง no shutdown ไม่งั้น subinterface ไม่ขึ้น
R1(config)#interface fa0/0
R1(config-if)#no ip address
R1(config-if)#no shutdown
R1(config-if)#exit
#
# ② สร้าง subinterface หนึ่งอันต่อหนึ่ง VLAN — เลขหลังจุดตั้งให้ตรงกับ VLAN ID จะจำง่ายที่สุด
R1(config)#interface fa0/0.10
R1(config-subif)#encapsulation dot1Q 10
R1(config-subif)#ip address 192.3.128.1 255.255.255.0
R1(config-subif)#exit
R1(config)#interface fa0/0.20
R1(config-subif)#encapsulation dot1Q 20
R1(config-subif)#ip address 193.3.128.1 255.255.255.0
R1(config-subif)#exit
#
# ③ ขาที่สองไป Switch2 — ทำแบบเดียวกันเป๊ะ
R1(config)#interface fa0/1
R1(config-if)#no ip address
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface fa0/1.30
R1(config-subif)#encapsulation dot1Q 30
R1(config-subif)#ip address 194.3.128.1 255.255.255.0
R1(config-subif)#exit
R1(config)#interface fa0/1.40
R1(config-subif)#encapsulation dot1Q 40
R1(config-subif)#ip address 195.3.128.1 255.255.255.0
R1(config-subif)#end
R1#show ip interface brief
R1#show ip route
R1#copy running-config startup-configPC1> ip 192.3.128.11 255.255.255.0 192.3.128.1
PC2> ip 193.3.128.12 255.255.255.0 193.3.128.1
PC3> ip 194.3.128.13 255.255.255.0 194.3.128.1
PC4> ip 195.3.128.14 255.255.255.0 195.3.128.1
PC1> save
# ไล่ ping ทีละขั้นเวลาหาจุดพัง
PC1> ping 192.3.128.1 # ① ถึง gateway ตัวเองไหม (ไม่ผ่าน = trunk ไม่ขึ้น / VLAN ผิด)
PC1> ping 193.3.128.1 # ② ถึง subinterface อีกอันไหม (ไม่ผ่าน = encapsulation ผิด)
PC1> ping 193.3.128.12 # ③ ถึง PC2 ข้าม VLAN ✅ ttl=63
PC1> ping 194.3.128.13 # ④ ถึง PC3 ข้ามสวิตช์+ข้าม VLAN ✅ ttl=63
PC1> ping 195.3.128.14 # ⑤ ถึง PC4 ✅ ttl=63Interface IP-Address OK? Method Status Protocol
FastEthernet0/0 unassigned YES manual up up
FastEthernet0/0.10 192.3.128.1 YES manual up up
FastEthernet0/0.20 193.3.128.1 YES manual up up
FastEthernet0/1 unassigned YES manual up up
FastEthernet0/1.30 194.3.128.1 YES manual up up
FastEthernet0/1.40 195.3.128.1 YES manual up up
# └── ขาจริงไม่มี IP เป็นเรื่องปกติ แต่ต้อง up/up · ถ้าขาจริง down subinterface จะ down ตามทั้งหมด① ลืม no shutdown ที่ขาจริง (fa0/0) → subinterface ทุกอัน down ตาม ทั้งที่ config ถูกหมด ② ใส่ IP ที่ขาจริงแทนที่จะใส่ที่ subinterface → เฟรมที่มี tag เข้ามาแล้วไม่มีใครรับ ③ เลข encapsulation dot1Q 10 ไม่ตรงกับ VLAN จริง — เลขที่สำคัญคือเลขหลัง dot1Q ไม่ใช่เลขหลังจุดของชื่อ subinterface ตั้งชื่อ fa0/0.99 แล้วสั่ง encapsulation dot1Q 10 ก็ยังทำงานได้ปกติ (แต่สับสนมาก — ตั้งให้ตรงกันเสมอ) ④ ฝั่งสวิตช์ยังเป็น access ไม่ใช่ trunk → router ได้รับแต่ VLAN เดียว ⑤ PC ลืมใส่ gateway → ping ข้าม VLAN ขึ้น host unreachable ทันทีโดยไม่มีแพ็กเก็ตออกจากเครื่องเลย
ทราฟฟิกจาก VLAN 10 วิ่งขึ้นไปตามสายเส้นเดียว เข้าที่ router แล้ววิ่งกลับลงมาตามสายเส้นเดิมในนามของ VLAN 20 — เหมือนอมยิ้มที่มีแต่ก้านเดียว จึงเรียกว่า router "on a stick" · ข้อเสียคือทราฟฟิกวิ่งสวนกันบนสายเส้นเดียว แบนด์วิดท์จึงถูกใช้สองเท่า
ทางเลือกที่ 2 (แบบในรูปที่ 6): ให้ router ใช้ขาจริงหนึ่งขาต่อหนึ่ง VLAN — fa0/0 ใส่ 192.3.128.1 ต่อกับพอร์ต access VLAN 10 ของสวิตช์ · fa0/1 ใส่ 193.3.128.1 ต่อกับพอร์ต access VLAN 20 · ไม่ต้องมี subinterface และไม่ต้องมี trunk เลย เรียกว่า legacy inter-VLAN routing · ง่ายกว่ามาก แต่เปลืองขา router — 4 VLAN ต้องใช้ 4 ขา ซึ่ง c3725 มีแค่ 2 ขา จึงทำไม่ได้ · คำถามท้ายการทดลองข้อ 2 ที่ถามถึง "มากกว่า 3 VLAN" จึงบังคับให้ต้องใช้ subinterface
4.11VTP และ Port Mirroring (Listing 7–9)
ใบแลปใส่คำสั่งสองชุดนี้ไว้ในหัวข้อ 2 แต่ไม่ได้สั่งให้ทำในหัวข้อการทดลอง — อย่างไรก็ตามควรอ่านไว้เพราะมีในใบแลปและอาจถูกถาม
VTP — VLAN Trunking Protocol (Listing 7 และ 8)
VTP คือกลไกให้สวิตช์ตัวหนึ่ง (server) ประกาศรายชื่อ VLAN ไปให้สวิตช์ตัวอื่น (client) ในโดเมนเดียวกันโดยอัตโนมัติ — สร้าง VLAN ที่เดียวแล้วโผล่ครบทุกตัว ไม่ต้องไปนั่งพิมพ์ vlan 10 ทีละเครื่อง
SW1#vlan database
SW1(vlan)#vtp domain NETLAB
SW1(vlan)#vtp server # ตัวที่เราจะสร้าง VLAN
SW1(vlan)#exit
SW2#vlan database
SW2(vlan)#vtp domain NETLAB # ชื่อโดเมนต้องสะกดตรงกันเป๊ะ ตัวพิมพ์เล็กใหญ่มีผล
SW2(vlan)#vtp client # ตัวที่จะรับ VLAN มาจาก server
SW2(vlan)#exitSW1#show vtp status
VTP Version : 2
Configuration Revision : 4 # ← เลขนี้อันตราย อ่านกล่องล่าง
Maximum VLANs supported locally : 68
Number of existing VLANs : 7
VTP Operating Mode : Server
VTP Domain Name : NETLAB
VTP Pruning Mode : Disabled
SW1#show vtp stat # ย่อได้ IOS เติมให้เองสวิตช์จะเชื่อข้อมูล VLAN จากตัวที่มี Configuration Revision สูงกว่า เสมอ · ถ้าเอาสวิตช์เก่าที่เคยตั้งชื่อโดเมนเดียวกันและมี revision สูงมาเสียบเข้าเครือข่าย มันจะ "สอน" VLAN ชุดของมันให้สวิตช์ทุกตัว และลบ VLAN ที่มีอยู่ทิ้งหมด · ป้องกันได้ด้วยการตั้งเป็น vtp mode transparent ซึ่งจะไม่รับและไม่ส่ง VLAN ให้ใคร · ในแลปนี้ที่มีสวิตช์แค่ 2 ตัว การพิมพ์ vlan 10 เองทั้งสองตัวปลอดภัยกว่าและตรวจง่ายกว่า — หน้านี้จึงใช้วิธีนั้นตลอด
Port Mirroring (Listing 9)
คือการสั่งให้สวิตช์ ทำสำเนาเฟรมจากพอร์ตหนึ่ง ส่งไปออกอีกพอร์ตหนึ่ง เพื่อให้เครื่องที่รัน Wireshark เห็นทราฟฟิกที่ไม่ได้วิ่งมาหาตัวเอง — จำเป็นเพราะสวิตช์ส่งเฟรมออกเฉพาะพอร์ตปลายทาง ไม่กระจายทุกพอร์ตแบบ hub
SW1#configure terminal
SW1(config)#monitor session 1 source interface fa1/10 # ต้นทาง = พอร์ต trunk
SW1(config)#monitor session 1 destination interface fa1/3 # ปลายทาง = พอร์ตที่เสียบ Wireshark
SW1(config)#end
SW1#show monitor session 1สวิตช์หลายรุ่นถอด tag ออกก่อนส่งเฟรมออกพอร์ต destination ของ mirror → ดักได้แต่ไม่เห็น 802.1Q · แก้ได้ด้วยการเติม encapsulation replicate ต่อท้ายบรรทัด destination (ถ้ารุ่นนั้นรองรับ) · แต่ทางที่ชัวร์ที่สุดใน GNS3 คือคลิกขวาที่เส้น trunk แล้ว Start capture ไปเลย — ดักที่ตัวสายจริง จึงเห็น tag ครบเสมอ และไม่ต้องพึ่ง port mirroring
4.12คำถามท้ายการทดลอง
ข้อ 1 — ทดสอบบน GNS3 ให้ 1 สวิตช์มีมากกว่า 3 VLAN โดยมีการสื่อสารแบบ Tag และ non-tag แสดงรูปการเชื่อมต่อ ระบุการเชื่อมต่อให้ชัดเจน แสดงผลการ ping
ออกแบบให้ครบทั้ง 3 อย่างที่โจทย์ขอในผังเดียว — สวิตช์ 1 ตัว, VLAN 4 วง, และมีทั้งเส้นที่ tag กับเส้นที่ไม่ tag
| พอร์ต SW1 | ต่อกับ | VLAN | แบบไหน |
|---|---|---|---|
fa1/1 | PC1 192.3.128.11 | 10 | non-tag (access) |
fa1/2 | PC2 192.3.128.12 | 20 | non-tag (access) |
fa1/3 | PC3 192.3.128.13 | 30 | non-tag (access) |
fa1/4 | PC4 192.3.128.14 | 40 | non-tag (access) |
fa1/10 | SW2 | 10,20,30,40 | tag (trunk 802.1Q) |
ฝั่ง SW2 ต่อ PC5–PC8 (192.3.128.15–.18) เข้า VLAN 10, 20, 30, 40 ตามลำดับ แล้วทำ fa1/10 เป็น trunk เหมือนกัน
SW1#configure terminal
SW1(config)#vlan 10
SW1(config-vlan)#name VLAN10
SW1(config-vlan)#vlan 20
SW1(config-vlan)#name VLAN20
SW1(config-vlan)#vlan 30
SW1(config-vlan)#name VLAN30
SW1(config-vlan)#vlan 40
SW1(config-vlan)#name VLAN40
SW1(config-vlan)#exit
SW1(config)#interface fa1/1
SW1(config-if)#switchport mode access
SW1(config-if)#switchport access vlan 10
# … ทำซ้ำกับ fa1/2 → vlan 20 · fa1/3 → vlan 30 · fa1/4 → vlan 40 …
SW1(config)#interface fa1/10
SW1(config-if)#switchport trunk encapsulation dot1q
SW1(config-if)#switchport mode trunk
SW1(config-if)#switchport trunk allowed vlan 10,20,30,40
SW1(config-if)#end
SW1#show vlan brief
SW1#show interfaces trunkผลการ ping ที่ต้องแนบ (ทุกเครื่องอยู่ 192.3.128.0/24 เหมือนกันหมด ไม่มี router)
PC1> ping 192.3.128.15 # VLAN 10 → VLAN 10 ข้าม trunk ✅ ผ่าน
PC2> ping 192.3.128.16 # VLAN 20 → VLAN 20 ข้าม trunk ✅ ผ่าน
PC3> ping 192.3.128.17 # VLAN 30 → VLAN 30 ข้าม trunk ✅ ผ่าน
PC4> ping 192.3.128.18 # VLAN 40 → VLAN 40 ข้าม trunk ✅ ผ่าน
PC1> ping 192.3.128.12 # VLAN 10 → VLAN 20 บนสวิตช์เดียวกัน ❌ ไม่ผ่าน
PC1> ping 192.3.128.16 # VLAN 10 → VLAN 20 ข้ามสวิตช์ ❌ ไม่ผ่านสิ่งที่ต้องเขียนอธิบาย — เส้นที่ต่อกับ PC เป็น non-tag (access) เพราะการ์ดของ PC อ่าน 802.1Q ไม่เป็น สวิตช์จึงถอด tag ออกก่อนส่งให้ · ส่วนเส้นระหว่างสวิตช์เป็น tag (trunk) เพราะต้องหอบ 4 VLAN บนสายเส้นเดียว จึงต้องมีป้ายบอกว่าเฟรมไหนเป็นของ VLAN ใด · แนบภาพ Wireshark ที่ดักบนลิงก์ trunk พร้อม filter vlan แสดงบรรทัด 802.1Q Virtual LAN, ... ID: 30 เป็นหลักฐานของการสื่อสารแบบ tag
ข้อ 2 — จากการติดตั้งในเร้าเตอร์ ให้ทดสอบกรณีหากมีมากกว่า 3 VLAN โดยแสดงการ Config ที่เกิดขึ้นและผลการ Config
ตอบด้วยการทำ subinterface 4 อันบนขาเดียว — จุดสำคัญคือให้เห็นว่า ขา router ขาเดียวรองรับได้หลาย VLAN ไม่จำกัดที่จำนวนพอร์ตจริง
| VLAN | Subinterface | IP ของ gateway | PC ในวงนั้น |
|---|---|---|---|
| 10 | fa0/0.10 | 192.3.128.1 /24 | PC1 192.3.128.11 |
| 20 | fa0/0.20 | 193.3.128.1 /24 | PC2 193.3.128.12 |
| 30 | fa0/0.30 | 194.3.128.1 /24 | PC3 194.3.128.13 |
| 40 | fa0/0.40 | 195.3.128.1 /24 | PC4 195.3.128.14 |
R1(config)#interface fa0/0
R1(config-if)#no ip address
R1(config-if)#no shutdown
R1(config-if)#exit
R1(config)#interface fa0/0.10
R1(config-subif)#encapsulation dot1Q 10
R1(config-subif)#ip address 192.3.128.1 255.255.255.0
R1(config-subif)#exit
R1(config)#interface fa0/0.20
R1(config-subif)#encapsulation dot1Q 20
R1(config-subif)#ip address 193.3.128.1 255.255.255.0
R1(config-subif)#exit
R1(config)#interface fa0/0.30
R1(config-subif)#encapsulation dot1Q 30
R1(config-subif)#ip address 194.3.128.1 255.255.255.0
R1(config-subif)#exit
R1(config)#interface fa0/0.40
R1(config-subif)#encapsulation dot1Q 40
R1(config-subif)#ip address 195.3.128.1 255.255.255.0
R1(config-subif)#endฝั่งสวิตช์ต้องอนุญาตครบทั้ง 4 VLAN บน trunk เส้นเดียวที่ต่อไปหา router
SW1(config)#interface fa1/10
SW1(config-if)#switchport mode trunk
SW1(config-if)#switchport trunk allowed vlan 10,20,30,40ผลการ config ที่ต้องแนบ — show ip interface brief ต้องเห็นทั้ง 4 subinterface เป็น up/up · และ show ip route ต้องมีวง C (connected) ครบ 4 วง
C 192.3.128.0/24 is directly connected, FastEthernet0/0.10
C 193.3.128.0/24 is directly connected, FastEthernet0/0.20
C 194.3.128.0/24 is directly connected, FastEthernet0/0.30
C 195.3.128.0/24 is directly connected, FastEthernet0/0.40
# └── router รู้จักทั้ง 4 วงจากขาจริงขาเดียว จึงส่งข้ามกันได้โดยไม่ต้องใช้ routing protocol เลยสรุปที่ควรเขียน — จำนวน VLAN ที่ router รองรับได้ไม่ได้ถูกจำกัดด้วยจำนวนพอร์ตจริง แต่ถูกจำกัดด้วยขนาดของช่อง VLAN ID (12 บิต → 1–4094) และแบนด์วิดท์ของขาจริงที่ทุก VLAN ต้องมาใช้ร่วมกัน · เพิ่ม VLAN ที่ 5 ก็แค่เพิ่ม interface fa0/0.50 อีกอันโดยไม่ต้องแตะสายเลย
4.13จุดที่ Mac ต่างจากที่ใบแลปเขียนไว้
| เรื่อง | ใบแลปเขียนไว้ (Windows) | ของ Mac ต้องทำแบบนี้ |
|---|---|---|
| เข้า console สวิตช์ | ลง PuTTY → เลือก connection type = Serial | ไม่มี PuTTY บน macOS → ls /dev/tty.* แล้ว screen /dev/tty.usbmodemXXXX 9600 · ออกด้วย Ctrl+A แล้ว Ctrl+\ · ดูค้าง screen -ls · ฆ่า screen -X -S <id> quit |
| ใน GNS3 | คลิกขวา → Console เปิด PuTTY | คลิกขวา → Console เปิด Terminal ของ macOS ให้เอง — ไม่ต้องลงอะไรเพิ่ม |
| Wireshark | โหลดจาก wireshark.org แล้วกด Next จนจบ | ต้องเลือกรุ่น Arm (MacBook Air M2 = Apple Silicon) และติดตั้ง ChmodBPF.pkg ด้วย ไม่งั้นเปิดมาแล้วไม่มี interface ให้เลือกเลย · ตรวจด้วย id -Gn | grep access_bpf |
| ดักจับ 802.1Q | ใบแลปหมายเหตุว่า "Wireshark ควรเป็น Linux" เพราะ driver ของ Windows มักตัด tag ทิ้ง | บน Mac ก็เจอปัญหาเดียวกันถ้าดักที่การ์ดจริง → ให้ดักที่ลิงก์ใน GNS3 แทน (คลิกขวาที่เส้น trunk → Start capture) ซึ่งเห็น tag ครบเสมอ ไม่ต้องพึ่ง Linux |
| ตั้ง IP ให้เครื่องตัวเอง | Control Panel → Network and Sharing Center → Change adapter settings → IPv4 → Properties | System Settings → Network → คลิกการ์ด → Details… → TCP/IP → Configure IPv4 = Manually |
| ปิด Firewall | Windows Defender Firewall → Turn off | System Settings → Network → Firewall → ปิดสวิตช์ (เปิดคืนหลังทำแลปเสร็จ) |
| ปิด Wi-Fi | ปิดจากหน้า Network Connections | คลิกไอคอน Wi-Fi บนแถบเมนู → สลับปิด (ใบแลปย้ำว่าต้องปิดก่อนเริ่ม) |
| พอร์ต Ethernet | โน้ตบุ๊ก Windows ส่วนใหญ่มีช่อง RJ-45 ในตัว | MacBook Air M2 ไม่มีช่อง Ethernet → ต้องใช้ USB-C → Ethernet adapter · ชื่อการ์ดจะเป็น en5, en6 แล้วแต่เครื่อง |
| GNS3 | ไฟล์ .exe | ไฟล์ .dmg เวอร์ชัน 2.2.53 จาก GitHub release · local server รัน dynamips บน Apple Silicon ได้ปกติ ไม่ต้องมี VM · ถ้าใช้ server ของ KKU ต้องต่อ VPN KKU ก่อนเปิด GNS3 |
| ตัวแปลง console | เสียบ USB-A ได้ตรง ๆ | MacBook Air M2 มีแต่ USB-C → ต้องมีตัวแปลง USB-A → USB-C หรือ hub เตรียมไปด้วยทุกครั้ง |
4.14เช็คว่าทำถูกไหม
| คำสั่ง | ต้องได้ผลอะไร |
|---|---|
show vlan / show vlan brief ข้อสอบสั่งส่ง | เห็น VLAN 10 และ 20 สถานะ active พร้อมรายชื่อพอร์ตที่ถูกต้องอยู่ใต้แต่ละ VLAN · brief คือแบบย่อ อ่านง่ายกว่า |
show vlan-switch brief เฉพาะ c3725/c3745 + NM-16ESW | บน router ที่ใส่โมดูลสวิตช์ ต้องใช้คำสั่งนี้แทน — show vlan จะแสดงข้อมูลของฝั่ง router ไม่ใช่ของโมดูลสวิตช์ |
show interfaces trunk | Status ต้องเป็น trunking · Encapsulation เป็น 802.1q · และคอลัมน์ Vlans allowed ต้องมีครบทั้ง 10,20 |
show interface fa1/10 switchport (Listing 6) | Operational Mode: trunk · Operational Trunking Encapsulation: dot1q · Trunking VLANs Enabled: 10,20 |
show mac-address-table | เห็นคอลัมน์ VLAN — MAC ของ PC1 อยู่ VLAN 10 · ของ PC2 อยู่ VLAN 20 · ตาราง MAC แยกกันคนละ VLAN |
show ip interface brief (ที่ router) | ทุก subinterface fa0/0.10, fa0/0.20, … ต้อง up / up และขาจริงต้อง up ด้วย |
show ip route (ที่ router) | ต้องมีแถว C ครบทุกวงที่ตั้ง — เช่น C 192.3.128.0/24 is directly connected, FastEthernet0/0.10 |
ping จาก VPCS | ใน VLAN เดียวกัน ผ่าน ttl=64 · ข้าม VLAN ผ่าน router ผ่าน ttl=63 · ข้าม VLAN โดยไม่มี router ต้องไม่ผ่าน |
Wireshark filter vlan | บนลิงก์ trunk ต้องเห็นบรรทัด 802.1Q Virtual LAN, PRI: 0, DEI: 0, ID: 10 · บนลิงก์ access ต้องไม่เห็นเลย |
Mac Address Table
-------------------------------------------
Vlan Mac Address Type Ports
---- ----------- -------- -----
10 0050.7966.6800 DYNAMIC Fa1/1 # PC1
10 0050.7966.6802 DYNAMIC Fa1/10 # PC3 เรียนรู้มาทาง trunk
20 0050.7966.6801 DYNAMIC Fa1/2 # PC2
20 0050.7966.6803 DYNAMIC Fa1/10 # PC4 เรียนรู้มาทาง trunk เส้นเดียวกัน
# └── MAC สองตัวสุดท้ายมาจากพอร์ตเดียวกันแต่คนละ VLAN — เป็นไปได้เพราะ trunk มี tag บอก4.15ถ้าไม่ผ่าน ให้ไล่ตามนี้
| อาการ | สาเหตุ | คำสั่งแก้ |
|---|---|---|
show vlan ขึ้น % Invalid input detected | ใช้ c3725/c3745 + NM-16ESW ซึ่งเป็น router ที่มีโมดูลสวิตช์ | ใช้ show vlan-switch หรือ show vlan-switch brief แทน |
พิมพ์ switchport … แล้วขึ้น Invalid input | พอร์ตนั้นเป็น routed port ของ router ไม่ใช่พอร์ตสวิตช์ (เช่นเผลอไปทำที่ fa0/0) | ใช้พอร์ตของโมดูลสวิตช์ (fa1/x) · ตรวจชื่อพอร์ตจริงด้วย show ip interface brief |
switchport trunk encapsulation dot1q ขึ้น Invalid input | รุ่นนั้นรองรับ dot1Q อย่างเดียว อยู่แล้ว (2950 / 3650 / NM-16ESW) | ข้ามบรรทัดนี้ไปเลย แล้วสั่ง switchport mode trunk ตรง ๆ |
Command rejected: An interface whose trunk encapsulation is "Auto" … | สั่ง switchport mode trunk ก่อน encapsulation | สั่ง switchport trunk encapsulation dot1q ก่อน แล้วค่อย switchport mode trunk |
| ping ข้าม VLAN ไม่ผ่าน | นี่คือผลที่ถูกต้อง — VLAN ตัด broadcast domain | ถ้าโจทย์อยากให้ผ่าน ต้องใส่ router + subinterface → §4.10 |
| ping ใน VLAN เดียวกันแต่คนละสวิตช์ ไม่ผ่าน | trunk ไม่ขึ้น / ตั้ง trunk ข้างเดียว / allowed vlan ไม่ครบ / ยังไม่ได้สร้าง VLAN บนสวิตช์ปลายทาง | show interfaces trunk ทั้งสองตัว · show vlan brief ทั้งสองตัวต้องมี VLAN ครบเหมือนกัน |
show vlan brief ไม่เห็นพอร์ต trunk ใต้ VLAN ไหนเลย | เป็นพฤติกรรมปกติ — พอร์ต trunk ไม่ถูกลิสต์ใต้ VLAN ใด VLAN หนึ่ง เพราะมันอยู่หลาย VLAN พร้อมกัน | ตรวจด้วย show interfaces trunk แทน · อย่าตกใจแล้วไปแก้ config |
| PC ping ไม่ออกเลยหลังย้าย VLAN | ลบ VLAN ทิ้งแต่พอร์ตยังชี้ไป VLAN นั้น → พอร์ต inactive | show vlan brief ดูว่า VLAN ยังอยู่และ active · ถ้าไม่มี ให้สร้างใหม่หรือย้ายพอร์ตกลับ switchport access vlan 1 |
| เสียบสองสายระหว่างสวิตช์แล้ว console หน่วง / ไฟกะพริบรัว | switching loop — STP ถูกปิดอยู่ จึงเกิด broadcast storm | ดึงสายออกหนึ่งเส้นทันที · show spanning-tree ต้องเห็นพอร์ตหนึ่งเป็น BLK · เปิดด้วย spanning-tree vlan 10,20 |
| Wireshark ไม่เห็น tag 802.1Q | ดักที่ access port (tag ถูกถอดแล้ว) · หรือ ping ระหว่างเครื่องที่อยู่ native VLAN · หรือ driver การ์ดจริงตัด tag | ดักที่ ลิงก์ trunk ใน GNS3 (คลิกขวาที่เส้น → Start capture) · filter vlan · ping ระหว่าง VLAN 10 หรือ 20 |
| Wireshark ไม่มี interface ให้เลือกเลย | ยังไม่ได้ลง ChmodBPF.pkg บน macOS | ลง ChmodBPF.pkg → logout/login → id -Gn | grep access_bpf |
Subinterface ของ router ขึ้น down / down | ลืม no shutdown ที่ ขาจริง (fa0/0) | interface fa0/0 → no shutdown · subinterface จะขึ้นตามทันที |
| PC ping gateway ได้ แต่ ping ข้าม VLAN ไม่ได้ | ปลายทางลืมตั้ง gateway จึงตอบกลับไม่ถูก | ตั้ง ip <addr> 255.255.255.0 <gateway> ให้ครบทุก PC แล้ว show ip ตรวจ |
| ทำมาทั้งชั่วโมง อุปกรณ์ restart แล้ว config หาย | ไม่ได้บันทึกลง NVRAM · และ VLAN เก็บอยู่คนละที่ (vlan.dat) | copy running-config startup-config ทุกครั้งที่ทำเสร็จก้อนหนึ่ง |
4.16ถ้าออกสอบ ต้องทำอะไรได้บ้าง
"ตั้ง VLAN ตามรูป ให้ ping กันได้ + ส่ง show vlan ของทุก switch"
"ตามรูป" = รูปที่ 9 — 2 สวิตช์ · PC1 กับ PC3 อยู่ VLAN เดียวกัน · PC2 กับ PC4 อยู่อีก VLAN · "ให้ ping กันได้" หมายถึงคู่ที่อยู่ VLAN เดียวกันต้อง ping ถึงกันข้ามสวิตช์ได้ ไม่ได้แปลว่าทุกคู่ต้องผ่าน
- วาดผังและจดตารางลงกระดาษก่อนแตะคีย์บอร์ด — พอร์ตไหนเป็น access VLAN อะไร พอร์ตไหนเป็น trunk · เสียเวลา 2 นาทีตรงนี้ ประหยัดได้ 20 นาทีทีหลัง
- ต่อสายให้ครบตามรูปที่ 9 แล้วกด Start ทุกตัว จนจุดเป็นสีเขียว
- ตั้ง IP ให้ VPCS ทั้ง 4 ตัว — วงเดียวกันหมด
192.3.128.11ถึง.14mask255.255.255.0แล้วsave - สร้าง VLAN ให้ครบ "ทั้งสองสวิตช์" — คนพลาดกันตรงนี้มากที่สุด สร้างแค่ตัวเดียวแล้วหาสาเหตุไม่เจอ
- ตั้ง access port ให้ PC ทุกเครื่อง —
switchport mode accessแล้วตามด้วยswitchport access vlan - ตั้ง trunk ที่สายระหว่างสวิตช์ ทั้งสองฝั่ง +
switchport trunk allowed vlan 10,20 - ยืนยันด้วย
show interfaces trunkว่าขึ้นtrunkingก่อนไป ping - ping ให้ครบทุกคู่แล้วเก็บภาพ — ทั้งคู่ที่ผ่านและคู่ที่ไม่ผ่าน (คู่ที่ไม่ผ่านก็เป็นคำตอบ)
- เก็บ
show vlan briefของ "ทุก switch" ตามที่โจทย์สั่ง — อย่าส่งแค่ตัวเดียว copy running-config startup-configทุกตัวก่อนลุกจากเครื่อง
enable
configure terminal
hostname SW1
vlan 10
name VLAN10
exit
vlan 20
name VLAN20
exit
interface fa1/1
switchport mode access
switchport access vlan 10
no shutdown
exit
interface fa1/2
switchport mode access
switchport access vlan 20
no shutdown
exit
interface fa1/10
switchport trunk encapsulation dot1q
switchport mode trunk
switchport trunk allowed vlan 10,20
no shutdown
end
show vlan brief
show interfaces trunk
copy running-config startup-configenable
configure terminal
hostname SW2
vlan 10
name VLAN10
exit
vlan 20
name VLAN20
exit
interface fa1/1
switchport mode access
switchport access vlan 10
no shutdown
exit
interface fa1/2
switchport mode access
switchport access vlan 20
no shutdown
exit
interface fa1/10
switchport trunk encapsulation dot1q
switchport mode trunk
switchport trunk allowed vlan 10,20
no shutdown
end
show vlan brief
show interfaces trunk
copy running-config startup-configแปลว่าต้องเพิ่ม router เข้ามาด้วย เพราะ VLAN ต่างกัน ping ข้ามกันเองไม่ได้ — เปลี่ยน fa1/10 ของ SW1 ให้ต่อไป router แทน แล้ววาง IP ใหม่คนละ subnet ต่อ VLAN พร้อมตั้ง gateway ให้ PC ทุกเครื่อง → สคริปต์อยู่ที่ §4.10 ทั้งชุด
4.17เช็คความเข้าใจ
192.3.128.11) อยู่ VLAN 10 และ PC2 (192.3.128.12) อยู่ VLAN 20 — ทั้งคู่เสียบอยู่กับสวิตช์ตัวเดียวกัน และอยู่ subnet เดียวกัน mask 255.255.255.0 · PC1 ping PC2 จะเกิดอะไรขึ้น192.3.128.12 โดยตรง · สวิตช์ที่ตั้ง VLAN แล้วส่ง broadcast ออกเฉพาะพอร์ตใน VLAN เดียวกัน ARP จึงไปไม่ถึง PC2 · ไม่มี ARP reply = ไม่มี MAC ปลายทาง = ไม่มีเฟรม ICMP ถูกสร้างขึ้นเลย เปิด Wireshark ดูก็จะเห็นแต่ ARP request ซ้ำ ๆ ไม่มี ICMP สักตัว · และสวิตช์ไม่มีวันลด TTL เพราะทำงานที่เลเยอร์ 2 ไม่แตะ IP header · การจะให้ผ่านต้องมี router มาทำ inter-VLAN routing และต้องเปลี่ยนให้แต่ละ VLAN เป็นคนละ subnet ด้วยfa1/10 เสร็จแล้ว ping ผ่านทุกคู่ที่ควรผ่าน · แต่พอสั่ง show vlan brief กลับไม่เห็น Fa1/10 อยู่ใต้ VLAN 10 หรือ VLAN 20 เลย แม้แต่ VLAN 1 ก็ไม่มี — ควรทำอย่างไรswitchport access vlan 10 เพิ่มที่ fa1/10 เพื่อให้มันโผล่ในตารางshow interfaces trunk แทนvtp mode server ก่อน ตาราง VLAN ถึงจะแสดงพอร์ต trunkshow vlan brief แสดงเฉพาะ access port ในคอลัมน์ Ports เพราะแต่ละ access port สังกัด VLAN เดียวเท่านั้น จึงลิสต์ได้ · แต่ trunk port สังกัดหลาย VLAN พร้อมกัน IOS จึงไม่เอาไปใส่ใต้ VLAN ไหนเลย — นี่คือพฤติกรรมปกติ ไม่ใช่อาการเสีย · ถ้าเผลอสั่ง switchport access vlan 10 ทับลงไป พอร์ตจะกลายเป็น access ทันที VLAN 20 ก็จะข้ามไปไม่ได้ กลายเป็นพังของจริง · เครื่องมือที่ถูกต้องคือ show interfaces trunk ซึ่งบอกทั้ง Mode, Encapsulation, Status และรายการ VLAN ที่อนุญาตfa1/3 ซึ่งเป็น access VLAN 10 แล้ว ping ระหว่าง PC1 กับ PC3 (VLAN 10 คนละสวิตช์) — เห็นแพ็กเก็ต ICMP วิ่งมา แต่ไม่มีบรรทัด 802.1Q Virtual LAN เลยสักเฟรม เพราะอะไรicmp ก่อน แล้ว tag ถึงจะโผล่vlan · ตัวเลือกข้อ 3 ผิดในสถานการณ์นี้เพราะ native vlan ค่าเริ่มต้นคือ VLAN 1 ไม่ใช่ 10 (แต่ถ้าตั้ง native vlan เป็น 10 จริง ๆ ก็จะไม่เห็น tag เหมือนกัน — เป็นอีกกับดักหนึ่งที่ต้องระวัง)① VLAN = ตัด broadcast domain ที่ระดับพอร์ต — สวิตช์ 1 ตัวกลายเป็นหลายสวิตช์เสมือน · ping ข้าม VLAN ไม่ผ่านคือคำตอบที่ถูก ② Access port = VLAN เดียว ไม่มี tag (ต่อ PC) · Trunk port = หลาย VLAN มี tag (ต่อสวิตช์/router) ③ 802.1Q tag = 4 ไบต์ แทรกระหว่าง Source Address กับ Type · TPID 0x8100 + Priority 3 บิต + Flag 1 บิต + VLAN ID 12 บิต (ใช้จริง 1–4094) ④ คำสั่งหลัก: vlan 10 → name → interface range fa1/1 - 2 → switchport mode access → switchport access vlan 10 · trunk: switchport trunk encapsulation dot1q → switchport mode trunk → switchport trunk allowed vlan 10,20 ⑤ ตรวจด้วย show vlan brief + show interfaces trunk · บน c3725 ต้องใช้ show vlan-switch ⑥ Router-on-a-Stick: interface fa0/0.10 → encapsulation dot1Q 10 → ip address 192.3.128.1 255.255.255.0 · อย่าลืม no shutdown ที่ขาจริง ⑦ ดักจับ tag ได้เฉพาะบนลิงก์ trunk filter vlan ⑧ ข้อสอบสั่งส่ง show vlan ของทุก switch — ไม่ใช่ตัวเดียว