1. Giới thiệu
Trong môi trường virtual hóa như Proxmox, việc cấu hình VLAN đúng cách là rất quan trọng để đảm bảo kết nối mạng ổn định giữa các server và thiết bị trong hệ thống. Tuy nhiên, có hai cách cấu hình VLAN khác nhau có thể gây nhầm lẫn:
- Tag VLAN trực tiếp trên card mạng vật lý (giống access VLAN) và đặt IP trực tiếp → Server có thể kết nối mạng bình thường.
- Không tag VLAN trên card vật lý mà sử dụng VLAN ID trong cấu hình mạng của hệ điều hành (ethX.VLANID) → Server có thể gặp vấn đề về kết nối.
Trong bài viết này, chúng ta sẽ tìm hiểu tại sao hai cách cấu hình này có sự khác biệt và cách khắc phục nếu gặp lỗi kết nối.
2. Sự khác biệt giữa Trunk VLAN và Access VLAN
Trước hết, chúng ta cần hiểu cách VLAN hoạt động trong môi trường mạng:
- Access VLAN: Port switch ở chế độ Access chỉ thuộc về một VLAN duy nhất. Gói tin được gửi đi sẽ không có VLAN tag.
- Trunk VLAN: Port switch ở chế độ Trunk có thể truyền nhiều VLAN. Các gói tin đi qua sẽ được đánh dấu (tag) bằng VLAN ID tương ứng.
Trong môi trường virtual hóa, nếu VLAN không được xử lý đúng cách, các server có thể gặp lỗi kết nối khi sử dụng VLAN tagging trong hệ điều hành.
3. Tại sao có sự khác biệt?
3.1. Khi sử dụng VLAN trên card mạng vật lý (Access VLAN)
- Proxmox nhận gói tin không có VLAN tag.
- Server nhận frame dưới dạng untagged, có thể sử dụng địa chỉ IP trực tiếp mà không cần cấu hình thêm.
- Server có thể giao tiếp với các thiết bị khác vì tất cả xử lý frame theo cách giống nhau.
🟢 Ưu điểm: Dễ triển khai, không cần cấu hình VLAN trong hệ điều hành của server.
🔴 Nhược điểm: Không linh hoạt nếu cần nhiều VLAN trên cùng một card mạng.
3.2. Khi sử dụng VLAN ID trong hệ điều hành (Trunk VLAN)
- Proxmox gửi gói tin có VLAN tag.
- Server nhận gói tin có VLAN ID.
- Nếu switch đang gửi frame untagged (port ở chế độ Access hoặc không có VLAN tag), server sẽ không nhận được gói tin đúng cách.
- Server chỉ có thể giao tiếp với các thiết bị cũng sử dụng VLAN tagging tương tự.
🟢 Ưu điểm: Linh hoạt khi muốn một server kết nối nhiều VLAN.
🔴 Nhược điểm: Nếu switch hoặc thiết bị mạng không xử lý VLAN tag đúng cách, có thể gây lỗi kết nối.
4. Một lỗi ở thực tế.
4.1. Sơ đồ

4.2. Mô Tả Lỗi
Tôi đang gặp một vấn đề với mạng VLAN trong hệ thống của mình.. Tôi nhận thấy rằng cách cấu hình VLAN ảnh hưởng trực tiếp đến khả năng kết nối của các server:
- Nhóm 1 – Server gán VLAN trực tiếp trên card mạng (giống Access VLAN)
- Tôi gán VLAN trực tiếp trên card mạng vật lý, sau đó đặt IP trực tiếp lên card mạng.
- Ví dụ: Một server có IP 10.10.10.1 có thể kết nối được với các địa chỉ 10.10.1.250, 10.10.10.252, 10.10.10.253, 10.10.10.254 và có thể ra internet.
- Nhóm 2 – Server không tag VLAN trực tiếp mà sử dụng sub-interface (
ethX.<VLANID>
)- Tôi không gán VLAN trên card mạng vật lý mà tạo sub-interface (ví dụ:
eth1.1649
) rồi đặt IP trên đó. - Ví dụ: Một server có IP 10.10.10.2 chỉ kết nối được với 10.10.10.251, 10.10.10.100 và không thể ra internet.
- Tôi không gán VLAN trên card mạng vật lý mà tạo sub-interface (ví dụ:
Từ hiện tượng này, tôi nhận thấy rằng:
✅ Nhóm 1 (gán VLAN trực tiếp trên card mạng) có thể giao tiếp với nhau và ra internet.
✅ Nhóm 2 (sử dụng VLAN ID trong cấu hình mạng) chỉ có thể giao tiếp với nhau nhưng không thể ra internet.
💡 Tôi nghi ngờ rằng nhóm 2 không thể kết nối được đến switch, dẫn đến việc không có đường ra internet.
Vậy vấn đề này có thể do đâu? Cách khắc phục như thế nào?
4.3. Xác định nguyên nhân lỗi kết nối
Vấn đề Kết Nối Mạng VLAN Trong Proxmox & Switch Cisco Nexus
Nhận Xét Từ Hiện Tượng Quan Sát
Qua kết quả trên, ta thấy có một điểm chung:
✅ Các server có VLAN được gán trực tiếp trên card mạng vật lý (giống Access VLAN) có thể kết nối đầy đủ trong mạng.
❌ Các server dùng VLAN ID trong cấu hình sub-interface (ethX.<VLANID>
) chỉ có thể giao tiếp với một số thiết bị nhất định và không thể truy cập internet.
Điều này cho thấy hai nhóm máy đang hoạt động trên hai mô hình VLAN khác nhau và không thể giao tiếp chéo một cách bình thường.
Nguyên Nhân Gây Lỗi
Vấn đề có thể xuất phát từ cách xử lý VLAN giữa Proxmox, Switch Cisco Nexus và cấu hình mạng trên server.
🔹 Trường hợp 1: VLAN Được Gán Trực Tiếp (Giống Access VLAN)
- Khi bạn cấu hình VLAN trên card mạng vật lý, server sẽ nhận các gói tin không có tag VLAN (untagged).
- Nếu switch đang cấu hình cổng dạng Access VLAN, nó cũng sẽ gửi gói tin untagged.
- Do đó, server có thể giao tiếp bình thường với các thiết bị khác và ra internet.
🔹 Trường hợp 2: Sử Dụng VLAN ID Trong Cấu Hình Sub-Interface (ethX.VLANID
)
- Khi bạn sử dụng
ethX.1649
, server gửi và nhận các gói tin có tag VLAN 1649. - Nếu cổng trên switch không phải trunk hoặc không cho phép VLAN 1649, gói tin có thể bị chặn.
- Server có thể chỉ giao tiếp được với các thiết bị cũng gửi và nhận có tag VLAN 1649, nhưng không thể giao tiếp với phần còn lại của mạng hoặc ra internet.
❗ Vấn đề chính:
💡 Nhóm máy sử dụng VLAN trên card vật lý (Access VLAN) đang nhận gói tin untagged, trong khi nhóm dùng sub-interface (ethX.VLANID
) đang nhận gói tin tagged, dẫn đến việc hai nhóm này không thể giao tiếp với nhau một cách đúng đắn.
4.4. Cách Kiểm Tra & Khắc Phục Lỗi
✅ Bước 1: Kiểm tra cấu hình VLAN trên switch Cisco Nexus
Nếu cổng kết nối với Proxmox là trunk, đảm bảo VLAN 1649 được phép:
show interface trunk
Nếu cổng là access, kiểm tra VLAN có đúng không:
show vlan brief
✅ Bước 2: Kiểm tra VLAN trên Proxmox
Nếu bạn dùng VLAN trong sub-interface (ethX.VLANID
), Proxmox bridge (vmbr100
) phải là trunk và hỗ trợ VLAN-aware. Kiểm tra trong /etc/network/interfaces
:
auto vmbr100
iface vmbr100 inet manual
bridge-ports bond0
bridge-stp off
bridge-fd 0
bridge-vlan-aware yes
bridge-vids 2-4094
✅ Bước 3: Kiểm tra VLAN trên server (Máy 10.10.10.2)
Dùng lệnh sau để kiểm tra VLAN tagging có hoạt động không:
ip -d link show
Nếu không thấy eth1.1649
, nghĩa là VLAN sub-interface chưa được tạo đúng.
5. Giải Pháp Đề Xuất
📌 Cách 1: Sử dụng VLAN-aware Bridge trên Proxmox
- Nếu bạn muốn dùng VLAN ID (
ethX.VLANID
), hãy đảm bảo Proxmox hỗ trợ VLAN-aware. - Điều này giúp máy ảo gửi gói tin tagged VLAN mà không bị chặn.
📌 Cách 2: Chỉnh sửa VLAN trên switch Cisco Nexus
- Nếu bạn muốn server nhận gói tin untagged, cổng trên switch phải là Access VLAN 1649.
- Nếu cổng là trunk, bạn có thể đặt Native VLAN 1649, giúp các gói tin gửi đến server không bị tag:
interface EthernetX/Y
switchport mode trunk
switchport trunk native vlan 1649
📌 Cách 3: Thống nhất cách gán VLAN
- Quyết định xem bạn muốn gán VLAN trên card mạng vật lý hay dùng sub-interface (
ethX.VLANID
). - Tránh việc một số server dùng Access VLAN, trong khi số khác dùng Trunk VLAN, vì điều này có thể gây gián đoạn kết nối.
6. Ảnh hưởng từ Kernel.
Kernel cũng có thể ảnh hưởng đến vấn đề này, đặc biệt là cách kernel xử lý VLAN tagging và networking. Một số yếu tố quan trọng liên quan đến kernel có thể tác động đến hiện tượng bạn đang gặp phải:
Cách Kernel Xử Lý VLAN Tagging
- Khi bạn sử dụng VLAN tagging (tức là
ethX.<vlanID>
), kernel phải hỗ trợ và xử lý VLAN frames một cách chính xác. - Nếu kernel không hỗ trợ hoặc có vấn đề với VLAN module (
8021q
), interface VLAN (ethX.<vlanID>
) có thể không hoạt động đúng.
Cấu Hình bridge-vlan-aware
Trong Proxmox
- Nếu bạn đang sử dụng Proxmox,
vmbrX
cần phải bật VLAN-aware (bridge-vlan-aware yes
) để có thể xử lý VLAN tags. - Nếu Proxmox bridge không bật tính năng này, các gói tin có thể bị chặn hoặc bị xử lý sai khi đi qua bridge.
Cách Kernel Xử Lý VLAN Khi Dùng Bonding
- Khi VLAN được sử dụng chung với Bonding (
bond0
), cách VLAN xử lý phụ thuộc vào mode của bond:- Nếu dùng mode 802.3ad (LACP), kernel có thể yêu cầu VLAN tag được đặt trên bond (
bond0.<VLANID>
) thay vì đặt trực tiếp trên một trong các slave interface (ethX.<VLANID>
). - Nếu bond không hỗ trợ VLAN tagging đúng cách, có thể gây mất kết nối.
- Nếu dùng mode 802.3ad (LACP), kernel có thể yêu cầu VLAN tag được đặt trên bond (
Phiên Bản Kernel Có Ảnh Hưởng Đến VLAN & Bridge Behavior
- Các phiên bản kernel khác nhau có thể có sự thay đổi về cách xử lý VLAN và bridge:
- Kernel 5.x trở lên có nhiều cải tiến về
bridge-vlan-aware
và cách xử lý VLAN trên interfaces. - Kernel cũ hơn có thể có lỗi hoặc giới hạn về VLAN, đặc biệt khi chạy trên virtualized network interfaces.
- Kernel 5.x trở lên có nhiều cải tiến về
Kiểm Tra Kernel Modules & VLAN Support
Bạn có thể kiểm tra xem kernel của bạn có hỗ trợ VLAN không bằng cách chạy:
lsmod | grep 8021q
Nếu không thấy module 8021q
, bạn có thể thử load nó bằng:
modprobe 8021q
Và kiểm tra lại kết nối.
✅ Cách Kiểm Tra & Khắc Phục
- Kiểm tra bridge VLAN-aware trên Proxmox
cat /etc/network/interfaces
Nếuvmbr100
không cóbridge-vlan-aware yes
, hãy thêm vào và restart networking. - Kiểm tra Kernel Module VLAN
lsmod | grep 8021q
Nếu module8021q
chưa có, load nó bằngmodprobe 8021q
. - Kiểm tra VLAN trên bond interface
Nếu bạn đang dùng bonding, thử gán VLAN trực tiếp trên bond:ip link add link bond0 name bond0.1649 type vlan id 1649
Và kiểm tra lại kết nối. - Thử cập nhật kernel
Nếu bạn đang dùng kernel cũ (4.x hoặc thấp hơn), thử nâng cấp lên kernel mới hơn (5.x hoặc 6.x) để có hỗ trợ tốt hơn cho VLAN và networking. - Thử hạ phiên bản kernel.
Do có thể kernel mới không phải lúc nào cũng hoạt động tốt với hệ thống mạng hiện tại, đặc biệt nếu bạn đang sử dụng switch cũ hoặc driver phần cứng chưa hoàn toàn tương thích. Một số lý do khiến kernel mới có thể gây vấn đề:
Thay đổi cách xử lý VLAN & Bridge
- Các kernel mới có thể có cải tiến hoặc thay đổi cách xử lý VLAN trên bridge (
bridge-vlan-aware
). - Một số bản kernel mới có thể drop các frame VLAN nếu cấu hình không khớp với các thay đổi mới.
Driver card mạng (NIC) bị thay đổi
- Nếu kernel mới cập nhật driver NIC, cách xử lý VLAN tagging cũng có thể bị ảnh hưởng.
- Một số driver có thể không còn hỗ trợ
VLAN hardware offloading
, gây hiệu suất giảm hoặc mất kết nối.
Tương thích với switch cũ
- Một số dòng switch cũ có thể không xử lý VLAN trunking hoặc native VLAN giống như các thiết bị mới hơn.
- Kernel mới có thể thực thi chặt chẽ hơn về VLAN tagging, khiến switch không thể giao tiếp đúng cách.
📌 Hạ kernel xuống phiên bản cũ hơn để kiểm tra
Bạn có thể thử boot vào kernel cũ để xem có ảnh hưởng đến VLAN không:
- Liệt kê các kernel có sẵn:
dpkg --list | grep linux-image
- Nếu cần, cài đặt kernel cũ hơn (ví dụ: 5.4 trên Debian/Ubuntu):
sudo apt install linux-image-5.4.0-xx-generic
- Set kernel cũ làm mặc định trong GRUB:
sudo grub-set-default "1>2" sudo update-grub
- Khởi động lại máy và kiểm tra lại VLAN:
reboot
📌 Kiểm tra tương thích với switch
- Nếu bạn có switch cũ, thử set native VLAN trên port trunk hoặc kiểm tra
switchport mode
. - Kiểm tra xem switch có drop VLAN frames không bằng cách dùng tcpdump trên server:
tcpdump -i eth1 vlan
Như vậy việc hạ kernel xuống phiên bản cũ hơn là một cách kiểm tra hay, đặc biệt khi bạn đang làm việc với switch cũ hoặc gặp lỗi VLAN không thể giải thích được. Nếu kernel mới gây vấn đề, hạ xuống kernel ổn định trước đó có thể giúp xác định nguyên nhân.
7. Kết Luận
🔹 Nguyên nhân lỗi: Sự khác biệt trong cách xử lý VLAN giữa Access VLAN và Trunk VLAN khiến các server không thể giao tiếp đúng cách.
🔹 Cách khắc phục: Đảm bảo tất cả thiết bị sử dụng VLAN theo cùng một cách – hoặc tất cả đều dùng VLAN tagging (ethX.VLANID
), hoặc tất cả đều nhận gói tin untagged (Access VLAN).
🔹 Giải pháp đề xuất: Dùng VLAN-aware bridge trên Proxmox hoặc cấu hình native VLAN trên switch để đồng nhất cách xử lý VLAN. Nâng hoặc hạ cấp kernel tùy thuộc vào hạ tầng của bạn.
Hy vọng bài viết này giúp bạn hiểu rõ hơn về cách VLAN hoạt động trong môi trường Proxmox và switch Cisco Nexus! 🚀