Knowledge BaseCisco VLAN Trunk & Access Port — Best Practice 2026
intermediate

Cisco VLAN Trunk & Access Port — Best Practice 2026

รวมแนวทาง config Access port และ Trunk port บน Cisco switch ให้ปลอดภัย ลดความเสี่ยง VLAN hopping และลด human error เวลา deploy จริงหน้างาน

A
Apinan
C9NETWORK Editor
17 พฤษภาคม 2569
8 นาที
0cisconetworkingswitchtrunkvlan

ทำไม 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#

ciscocisco
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 แม้ฝั่งตรงข้ามจะพยายาม spoof
  • spanning-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#

ciscocisco
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

จุดสำคัญที่คนมักลืม:

  1. Native VLAN ต้องเป็น VLAN ที่ไม่ได้ใช้งานจริง — สร้าง VLAN 999 ขึ้นมาแล้ว shutdown ไว้ ใช้เป็น native VLAN เพื่อกัน double-tagging attack ที่อาศัย native VLAN ซ้อนกับ user VLAN
  2. allowed vlan ต้องระบุให้ชัด — อย่าใช้ค่า default ที่ allow ทุก VLAN เพราะ broadcast/STP จะกระจายโดยไม่จำเป็น และเปิด attack surface กว้างขึ้น
  3. spanning-tree guard root — ป้องกันไม่ให้ Switch ที่ไม่ได้ตั้งใจ (เช่น Switch ราคาถูกที่ user เอามาเสียบ) ขึ้นมาเป็น root bridge ของเครือข่ายทั้งหมด

หากต้องเพิ่ม VLAN ใหม่เข้าไปใน trunk ที่มีอยู่แล้ว ห้ามสั่ง switchport trunk allowed vlan 10,20,30,50,100,200 ตรง ๆ เพราะจะ overwrite ของเดิมทั้งหมด — ต้องใช้:

ciscocisco
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 ทุกตัว:

ciscocisco
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#

Tip

ใช้ 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

ตัวอย่าง:

ciscocisco
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 กลางดึก คุณจะขอบคุณตัวเองที่ตั้งค่าไว้ดีตั้งแต่วันแรก