Tôi dường như có một số hiểu lầm cơ bản về cách Vlan hoạt động trên Linux và tôi hy vọng những người tốt ở đây có thể giáo dục tôi.
Truyền: Một Cisco 3560, một Vlan và một hộp Linux [1].
Cisco --------------- Linux
ge0/1 eth0
Cisco có giao diện Vlan 37, với địa chỉ IP 10.40.37.252/24. Tôi muốn đặt 10.40.37.1/24 trên hộp Linux.
Khi Cisco đóng gói lại vlan 37, mọi thứ đều hoạt động tốt [2]:
# Cisco
interface Vlan37
ip address 10.40.37.252/24
interface GigabitEthernet 0/1
switchport mode access
switchport access vlan 37
# Linux
ip link set eth0 up
ip addr add 10.40.37.1/24 dev eth0
$ ping 10.40.37.252 && echo It works
Tuy nhiên, khi tôi đặt cổng thành trung kế và gán vlan 37 ở phía Linux, nó sẽ ngừng hoạt động:
# Cisco
interface GigabitEthernet 0/1
switchport trunk encapsulation dot1q
switchport mode trunk
! [3] [4] [7]
# Linux
vconfig add eth0 37
ip link set eth0.37 up
ifconfig eth0 0.0.0.0 up # ensure no address
ip addr add 10.40.37.1/24 dev eth0.37
$ ping 10.40.37.252 || echo Why does this not work
Tôi đang thiếu gì ở đây?
Chỉnh sửa: Giải pháp:
Câu hỏi của Shane về bảng địa chỉ mac đã đưa tôi đến một giải pháp: Sử dụng "ip addr" để đặt các địa chỉ L2 (MAC) duy nhất khác nhau trên mỗi giao diện phụ Vlan và nó đột nhiên hoạt động.
Một giải pháp khả thi khác mà tôi chưa thử (vì phần cứng của tôi đã quá cũ) là sử dụng "ethtool" để vô hiệu hóa việc giảm tải Vlan bởi chính NIC và buộc kernel phải xử lý các thẻ.
Cảm ơn bạn Shane!
Chỉnh sửa: Thêm thông tin theo nhận xét:
Mục tiêu tổng thể là có ba vlans (công khai, riêng tư, oam & p) chấm dứt trên ba địa chỉ IP riêng lẻ trên hộp linux, với các ứng dụng khác nhau liên kết với các địa chỉ cục bộ. Tôi có thể mở rộng hơn nữa nếu cần thiết, nhưng tôi đang cố gắng giữ cho phần mô tả và thảo luận vấn đề đơn giản, vì trước khi tôi có thể có ba vlans hoạt động, tôi cần một người để làm việc. :)
Antoine -> ifup so với ifconfig không có sự khác biệt.
Pepoluan -> Tôi cho rằng đây là những gì bạn đang tìm kiếm. Lưu ý việc thiếu tài liệu tham khảo bởi trình điều khiển phy rõ ràng là bình thường. [5]
$ lsmod | grep 802
8021q 25545 1 cxgb3
Người siêng năng ->
$ ifconfig eth0
eth0 Link encap: Ethernet HWaddr 00:17:08:92:87:22
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 [...]
TX packets:31932 errors:0 dropped:0 overruns:0 carrier:0
$ ifconfig eth0.37
eth0.37 Link encap: Ethernet HWaddr 00:17:08:92:87:22
UP BROADCAST RUNNING MULTICAST MUT:1500 Metric:1
RX packets: 0 [...]
TX packets:32024 errors:90 dropped:0 overruns:0 carrier:0
$ cat /proc/net/vlan/config
VLAN Dev Name | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.37 | 37 | eth0
Chuck -> wireshark và / hoặc tcpdump không hiển thị các thẻ, nhưng đây rõ ràng là một giới hạn bình thường trên Linux, do thứ tự xử lý xử lý vlan và pcap trong kernel [6]. Ngoài ra, Vlan không được gắn thẻ được đặt thành 1 [7].
[1] Tôi đã thử điều này với cả CentOS 5.5 và Ubuntu 11.04 và cả hai đều có cùng một vấn đề.
[2] Lưu ý rằng các cấu hình không phải là cắt và dán, vì vậy mọi lỗi chính tả ở đây chỉ đơn giản là bộ nhớ xấu của tôi.
[3] bật hoặc tắt "không quan tâm" không ảnh hưởng đến vấn đề.
[4] Vlan 37 được hiển thị là hoạt động & không được cắt tỉa trên liên kết, vì vậy "được phép" không phải là vấn đề.
[5] serverfault: Kích hoạt 8021q trên nic
[6] http://wiki.wireshark.org/Captureetup/VLAN#Linux
[7] Vlan gốc (không được gắn thẻ) là 1. Cài đặt thủ công với "switchport trunk vlan 1" không có hiệu lực.
lsmod
hộp Linux không?
ifconfig eth0.37
và / hoặc ifconfig -a
trông như thế nào?
/proc/net/vlan/config
?
sho mac address-table vlan 37
?