Cisco VLAN Trunk & Access Port — Best Practice 2026
รวมแนวทาง config Access port และ Trunk port บน Cisco switch ให้ปลอดภัย ลดความเสี่ยง VLAN hopping และลด human error เวลา deploy จริงหน้างาน
ทำไม config Switch ถึงพลาดบ่อย แม้ทีมจะมีประสบการณ์#
หลายปีที่ผมเดินสาย deploy Switch ตามไซต์ลูกค้า สิ่งที่เจอซ้ำ ๆ ไม่ใช่ปัญหา hardware แต่เป็น config ผิดเล็กน้อย ที่บานปลายเป็นเรื่องใหญ่ — เช่น user เอา hub มาต่อเองแล้ว loop ทั้ง VLAN, native VLAN สองฝั่ง trunk ไม่ตรงกัน, หรือ port ที่ควรเป็น access แต่กลับ auto-negotiate เป็น trunk เพราะลืมสั่ง switchport nonegotiate
ปัญหาเหล่านี้ส่วนใหญ่ไม่ได้เกิดเพราะคน config ไม่เก่ง แต่เกิดเพราะ Cisco IOS มี default behavior หลายตัวที่ สะดวกแต่ไม่ปลอดภัย (เช่น DTP เปิดอยู่เป็น default, VLAN 1 เป็น native VLAN ของทุก trunk) ถ้าไม่ override ค่าเหล่านี้ตั้งแต่ต้น ก็เปิดช่องให้ทั้ง human error และ VLAN hopping attack
บทความนี้สรุปแนวทาง config ปี 2026 ที่ทีมเรา (และ vendor หลายเจ้า) ใช้เป็น baseline สำหรับองค์กร SMB ที่ใช้ Cisco Catalyst / IOS-XE — เน้นเรื่อง access port กับ trunk port เป็นหลัก
หลักการพื้นฐาน: Access Port vs Trunk Port#
ก่อนเข้า config ขอย้ำหลักการให้ชัดก่อน เพราะหลายคน config ตามตัวอย่างโดยไม่เข้าใจเหตุผลเบื้องหลัง
Access Port คือ port ที่ต่อกับ end device — PC, printer, IP phone, AP, server — รับส่ง frame ของ VLAN เดียวเท่านั้น และ frame ที่ออกจาก port จะไม่มี tag (untagged)
Trunk Port คือ port ที่ต่อระหว่าง Switch ด้วยกัน หรือต่อกับอุปกรณ์ที่เข้าใจ 802.1Q (เช่น firewall, hypervisor, AP ระดับ enterprise) — รับส่ง frame ได้หลาย VLAN พร้อมกัน โดยติด tag VLAN ID ไปกับ frame ยกเว้น native VLAN ที่ไม่ tag
กฎเหล็กที่ต้องจำคือ อย่าให้ port เดาบทบาทตัวเอง — ทุก port ต้องประกาศชัดเจนว่าเป็น access หรือ trunk ห้ามปล่อยให้ DTP (Dynamic Trunking Protocol) negotiate กันเอง เพราะนั่นคือช่องโหว่หลักของ VLAN hopping (switch spoofing attack)
ตัวอย่าง config ที่แนะนำ#
Access port สำหรับ end-user#
interface GigabitEthernet1/0/10
description == User Desktop ==
switchport mode access
switchport access vlan 20
switchport nonegotiate
spanning-tree portfast
spanning-tree bpduguard enable
storm-control broadcast level 1.00
no cdp enable
อธิบายทีละบรรทัด:
switchport mode access+switchport nonegotiate— ปิด DTP เด็ดขาด port จะไม่มีทางกลายเป็น trunk แม้ฝั่งตรงข้ามจะพยายาม spoofspanning-tree portfast— ข้าม listening/learning state ให้ port up เร็ว เหมาะกับ end device แต่ห้ามใช้กับ port ที่ต่อ Switch ตัวอื่นspanning-tree bpduguard enable— ถ้ามี BPDU เข้ามาที่ port นี้ (แปลว่า user เอา Switch หรือ hub มาต่อ) port จะ err-disable ทันที ช่วยกัน loop ก่อนเกิดเหตุstorm-control— จำกัด broadcast ไม่ให้กิน bandwidth เกินขีด เผื่อกรณี NIC ของ user เสียno cdp enable— ไม่จำเป็นต้องเปิดเผยข้อมูล Switch ให้ end device รับรู้
Trunk port ระหว่าง switch#
vlan 999
name BLACKHOLE_NATIVE
!
interface GigabitEthernet1/0/48
description == Uplink to CORE-SW01 ==
switchport mode trunk
switchport trunk encapsulation dot1q
switchport trunk native vlan 999
switchport trunk allowed vlan 10,20,30,50,100
switchport nonegotiate
spanning-tree guard root
จุดสำคัญที่คนมักลืม:
- Native VLAN ต้องเป็น VLAN ที่ไม่ได้ใช้งานจริง — สร้าง VLAN 999 ขึ้นมาแล้ว shutdown ไว้ ใช้เป็น native VLAN เพื่อกัน double-tagging attack ที่อาศัย native VLAN ซ้อนกับ user VLAN
allowed vlanต้องระบุให้ชัด — อย่าใช้ค่า default ที่ allow ทุก VLAN เพราะ broadcast/STP จะกระจายโดยไม่จำเป็น และเปิด attack surface กว้างขึ้นspanning-tree guard root— ป้องกันไม่ให้ Switch ที่ไม่ได้ตั้งใจ (เช่น Switch ราคาถูกที่ user เอามาเสียบ) ขึ้นมาเป็น root bridge ของเครือข่ายทั้งหมด
หากต้องเพิ่ม VLAN ใหม่เข้าไปใน trunk ที่มีอยู่แล้ว ห้ามสั่ง switchport trunk allowed vlan 10,20,30,50,100,200 ตรง ๆ เพราะจะ overwrite ของเดิมทั้งหมด — ต้องใช้:
switchport trunk allowed vlan add 200
มี engineer หลายคนเคยทำ link หลุดทั้งไซต์เพราะลืมคำว่า add คำเดียวนี่แหละ
Native VLAN mismatch = ปัญหาเงียบ trunk ทั้งสองฝั่งต้องตั้ง native VLAN เป็น ID เดียวกัน ถ้าไม่ตรง CDP จะ log warning ออกมา แต่ link ยัง up อยู่ — traffic ของ native VLAN จะรั่วข้าม VLAN โดยที่ monitoring ไม่จับ ควรตรวจด้วย show interface trunk ทุกครั้งหลัง config และเทียบทั้งสองฝั่งให้ตรงกัน
ข้อควรระวังเพิ่มเติม#
นอกจากเรื่อง access/trunk แล้ว ยังมี global config ที่ควรใส่ใน Switch ทุกตัว:
service password-encryption
enable algorithm-type sha256 secret <password>
no ip http server
no ip http secure-server
no service pad
no vstack
login block-for 100 attempts 5 within 100
line vty 0 15
transport input ssh
exec-timeout 5 0
- ปิด HTTP/HTTPS management ทั้งหมด ใช้ SSH อย่างเดียว (HTTPS server ของ IOS เวอร์ชันเก่ามี CVE หลายตัว)
no vstack— ปิด Smart Install ซึ่งเป็นช่องโหว่คลาสสิกที่ยังโดน exploit อยู่จนถึงปี 2026- ตั้ง
exec-timeoutไม่เกิน 5 นาที เพื่อกัน session ค้าง - ใช้ SHA256 สำหรับ enable secret อย่าใช้ type 5 (MD5) ที่ crack ได้ง่าย
อีกเรื่องที่ผมเจอบ่อย: อย่า manage Switch ผ่าน VLAN 1 — ย้าย management interface ไปอยู่ VLAN เฉพาะ (เช่น VLAN 99) และห้าม trunk VLAN 1 ออกจาก distribution layer
Tip ในการ deploy#
ใช้ template + interface range เวลา deploy Switch ตัวใหม่ ให้สร้าง config template สำหรับ access port profile และ trunk port profile แล้วใช้ interface range Gi1/0/1-46 apply พร้อมกันทีเดียว ลดเวลา config จาก 1 ชั่วโมงเหลือ 5 นาที และที่สำคัญคือ ลด human error จากการ config ทีละ port
ตัวอย่าง:
interface range GigabitEthernet1/0/1-46
description == Access Port ==
switchport mode access
switchport access vlan 20
switchport nonegotiate
spanning-tree portfast
spanning-tree bpduguard enable
หลัง apply แล้วค่อยไป customize เฉพาะ port ที่ต้องใช้ VLAN อื่น เช่น port ของ printer หรือ IP phone
อีกเทคนิคหนึ่งคือ ใช้ show interface status err-disabled เป็นประจำ หลัง deploy ไปแล้ว 1-2 สัปดาห์ เพื่อดูว่ามี port ไหนโดน BPDU guard kick บ้าง จะได้รู้ว่า user เอา Switch ไปต่อตรงไหน (เคสจริงเคยเจอ user เอา TP-Link 5 port มาต่อใต้โต๊ะเพื่อแชร์ port กับเพื่อน — Switch เกิด loop ทันที โชคดีที่ BPDU guard กันไว้ทัน)
สรุป + Checklist สำหรับ deploy Switch ตัวใหม่#
ก่อน hand-over Switch ให้ลูกค้า ใช้ checklist นี้ตรวจทุกครั้ง:
- ทุก access port มี
switchport mode access+nonegotiate - ทุก access port มี
portfast+bpduguard enable - ทุก trunk port ระบุ
allowed vlanชัด ไม่ใช้ default - Native VLAN ของ trunk เป็น VLAN ที่ไม่ได้ใช้งาน (เช่น 999) และ shutdown ไว้
- Native VLAN ตรงกันทั้งสองฝั่งของ trunk (ตรวจด้วย
show interface trunk) - Unused port ถูก
shutdownและอยู่ใน VLAN parking lot - Management VLAN แยกจาก VLAN 1 และ VLAN user
- SSH only, ปิด HTTP/HTTPS server, ปิด vstack
- Enable secret เป็น SHA256
- Backup running-config ขึ้น TFTP/Git ก่อน hand-over
ทำตามนี้แล้วเครือข่ายจะมีปัญหาน้อยลงมาก และที่สำคัญคือ — เวลาต้อง troubleshoot กลางดึก คุณจะขอบคุณตัวเองที่ตั้งค่าไว้ดีตั้งแต่วันแรก