Cisco và Linux và Vlans


9

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.


Bạn đã thử ifup eth0 thay vì ifconfig eth0 0.0.0.0 chưa?
Antoine Benkemoun

Bạn có thể đăng đầu ra của lsmodhộp Linux không?
pepoluan

2
Làm gì ifconfig eth0.37và / hoặc ifconfig -atrông như thế nào?
Handyman5

Ngoài ra xin vui lòng gửi /proc/net/vlan/config?
Handyman5

1
sho mac address-table vlan 37?
Shane Madden

Câu trả lời:


2

Bạn có muốn máy chủ chỉ có quyền truy cập vào vlan 37 hay bạn muốn máy chủ có quyền truy cập vào nhiều vlans?

Cấu hình IOS này có nghĩa là đặt vlan gốc (không được đánh dấu) thành 37.

interface GigabitEthernet 0/1
    switchport mode access
    switchport access vlan 37

Về phía linux, lệnh vconfig tạo bí danh giao diện cho lưu lượng được gắn thẻ là vlan 37.

vconfig add eth0 37

Bạn có thấy vấn đề? Công tắc đang gửi lưu lượng truy cập không lưu trữ của bạn và máy chủ đang tìm kiếm / tạo lưu lượng được gắn thẻ.

Bạn chỉ cần sử dụng eth0 trong vlan 37 gốc hoặc thay đổi conf conf để nó chuyển lưu lượng được gắn thẻ, ví dụ.

interface GigabitEthernet 0/1
    switchport trunk allowed vlan 37
    switchport mode trunk

Trên các thiết bị iOS khá cũ, bạn cần đặt đóng gói xe tải thành 8021q vì chúng sẽ mặc định là ISL.


Truy cập hoạt động tốt, trunking không. Mục tiêu là có ba hoặc nhiều Vlan, mỗi Vnet có mạng con riêng, chấm dứt trên hộp Linux. Giải pháp / cách giải quyết là đảm bảo mỗi Vlan bên phía Linux có một địa chỉ MAC riêng biệt.
Darren H

Vâng, điều đó phụ thuộc vào những gì bạn có nghĩa là "công việc". Khi một thiết bị IOS có một cổng ở chế độ truy cập, điều đó có nghĩa là "tất cả các gói đầu vào vào cổng này sẽ được gắn thẻ [bên trong công tắc] là vlan X". Điều đó có nghĩa là những gì mà các tiêu đề 802.1q bạn đã thêm từ máy chủ Linux đang bị tước bỏ. Bạn có thể dễ dàng chứng minh điều này bằng cách chạy tcpdump trên các cổng khác nhau cũng được đặt thành chế độ truy cập trên vlan 37; bạn sẽ có thể thấy lưu lượng phát sóng từ cả ba giao diện "vlan" của mình trên hộp linux.
Joshua Hoblitt

Tôi nên đã đề cập đến hai điều. 1) Tôi sử dụng thẻ vlan trên centos 5 với các thiết bị chuyển mạch Cisco & Blade Networks trong môi trường ảo hóa sản xuất của tôi. 2) switch port mode accesscũng sẽ loại bỏ tất cả các thẻ 802.1q trên lưu lượng truy cập. Đó là lý do tại sao bạn phải dùng đến các địa chỉ mac để liên lạc với nhau. Không có đích đến có địa chỉ mac khác nhau, tất cả đều kết thúc trên giao diện vlan gốc vì các gói đang đến máy chủ Linux không có thẻ vlan .
Joshua Hoblitt

Nói rõ hơn, trên "thân cây" trên iOS có nghĩa là sử dụng thẻ vlan 802.1q.
Joshua Hoblitt

0

Bây giờ tôi không phải là chuyên gia về phía Linux, bằng kiến ​​thức Chuyển đổi của tôi, bạn có giao diện eth0 trên máy Linux được cấu hình cho trunking dot1q không? Tôi không biết có quy định nào cho nhiều vlans hoạt động trong máy Linux không, nhưng tôi giả sử rằng bạn có một giao diện duy nhất được cấu hình để hoạt động như một phần của Vlan37, do đó về cơ bản làm cho máy ảo của máy Linux của bạn trở thành cổng truy cập. Một cổng truy cập không thể giao tiếp trực tiếp với một cổng trung kế, nó sẽ không thể tạo hoặc hiểu được đóng gói trung kế.

Theo những gì tôi hiểu, bạn muốn máy Linux hoạt động trong Vlan 37. Chỉ cần hoàn nguyên cổng ge0 / 1 thành cổng truy cập trong Vlan37 và thường xuyên gán cho máy linux bất kỳ IP nào dưới mạng con của Vlan37. Bạn thực sự không cần trung kế chỉ được sử dụng để truyền tải nhiều thông tin Vlan qua một liên kết.


1
Phần vconfig cấu hình trung kế dot1q :)
Antoine Benkemoun

Mục tiêu cuối cùng là có nhiều Vlan chấm dứt trên hệ thống Linux; Trước tiên tôi phải làm cho một người làm việc;)
Darren H

Bạn có nghĩa là bạn muốn máy Linux của bạn là một phần của nhiều Vlans hoặc ở lại Vlan37, nó cần có thể truy cập được từ nhiều Vlans khác?
gokul varma nk

Cái trước - Máy linux nên có nhiều địa chỉ IP không chồng chéo, mỗi địa chỉ trong Vlan của riêng chúng. Cơ thể chính chỉnh sửa để làm rõ điều này.
Darren H

0

Tôi nghĩ vấn đề là với cấu hình chuyển đổi của bạn. Sau khi đặt cổng thành chế độ trung kế với các thẻ 802.1q, bạn cần định cấu hình công tắc để gửi vlan 37 dưới dạng lưu lượng được gắn thẻ và bạn cũng có thể cần đặt cổng để sử dụng một vlan khác cho lưu lượng không được gắn thẻ. Khi tôi thiết lập điều này, tôi cũng phải thiết lập vlan nào được phép / từ chối trên cổng đó. IOS của tôi hơi bị rỉ sét nhưng tôi nghĩ đây là thứ bạn đang tìm kiếm.

Bạn cũng có thể xác nhận cấu hình chuyển đổi của mình bằng cách sử dụng wireshark trên eth0 vì nó sẽ hiển thị cho bạn các thẻ Vlan trên các gói. Các gói LLDP của Cisco cũng có thể cung cấp cho bạn manh mối về việc cổng ge0 / 1 đang làm gì.


Tôi đã không thông báo điểm 3 và 4 khi đăng. Tôi vẫn sẽ thử wireshark vì nó sẽ cho phép bạn xác minh rằng lưu lượng có nghĩa là chuyển đổi đang được gửi trên vlan 37.
chuck

Wireshark trên linux thường không thể hiển thị các thẻ Vlan, và thật không may, đó là trường hợp ở đây. Xem chú thích mới [6] trong câu hỏi được chỉnh sửa ở trên.
Darren H

Mặc định theo thiết lập của người hỏi sẽ có vlan 1 là vlan gốc và tất cả các cài đặt khác là vlans được gắn thẻ.
MikeyB
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.