Cisco ve Linux ve Vlans


9

Linux'ta VLAN'ların nasıl çalıştığı hakkında bazı temel yanlış anlaşılmalar var gibi görünüyor ve buradaki iyi insanların beni eğitebileceğini umuyorum.

Oyuncular: Bir Cisco 3560, bir VLAN ve bir Linux kutusu [1].

Cisco  ---------------  Linux
    ge0/1           eth0

Cisco, IP adresi 10.40.37.252/24 olan bir Vlan 37 arayüzüne sahiptir. Linux kutusuna 10.40.37.1/24 yerleştirmek istiyorum.

Cisco vlan 37'yi kapsül içine aldığında, her şey yolunda gider [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

Ancak, bağlantı noktasını kanallara ayarlayıp Linux tarafında vlan 37 atadığımda, çalışmayı durdurur:

# 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

Burada ne eksik?

Düzenleme: Çözümler:

Shan'ın mac adres tablosu hakkındaki sorusu beni bir çözüme götürdü: VLAN alt arabirimlerinin her birinde farklı benzersiz L2 (MAC) adresleri ayarlamak için "ip addr" kullanın ve aniden çalışır.

Denemediğim bir başka olası çözüm (donanımım çok eski olduğu için) VIC boşaltma işlemini NIC tarafından devre dışı bırakmak için "ethtool" kullanmak ve çekirdeği etiketlerle uğraşmaya zorlamak.

Teşekkürler Shane!

Düzenle: Yorumlara göre daha fazla bilgi:

Genel amaç, farklı uygulamaların yerel adreslere bağlanmasıyla, linux kutusundaki üç ayrı IP adresi üzerinde üç vlansın (genel, özel, oam & p) sonlandırılmasıdır. Gerekirse daha fazla genişletebilirim, ancak problem tanımını ve tartışmasını basit tutmaya çalışıyorum, çünkü üç vlans çalışmadan önce çalışmak için birine ihtiyacım var. :)

Antoine -> ifup ile ifconfig arasında fark yok.

Pepoluan -> Sanırım aradığın şey bu. Görünüşe göre phy sürücüleri tarafından referans eksikliği normaldir. [5]

$ lsmod | grep 802
    8021q   25545 1 cxgb3

Tamirci ->

$ 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 ve / veya tcpdump etiketleri göstermez, ancak görünüşte çekirdekteki vlan kullanımı ve pcap işlem sırası nedeniyle Linux'ta normal bir sınırlamadır [6]. Ayrıca, etiketsiz VLAN 1 [7] olarak ayarlanmıştır.

[1] Bunu hem CentOS 5.5 hem de Ubuntu 11.04 ile denedim ve her ikisinin de aynı sorunu var.

[2] Konfigürasyonların bir kes & yapıştır olmadığını unutmayın, bu yüzden buradaki herhangi bir yazım hatası sadece benim kötü hafızam.

[3] "anlaşmazlığın" açılması veya kapatılmasının sorun üzerinde bir etkisi yoktur.

[4] Vlan 37 bağlantıda aktif ve budama yapmadan olarak gösterilir, bu nedenle "izin verilir" problemi yoktur.

[5] serverfault: Bir nic üzerinde 8021q'yi etkinleştirme

[6] http://wiki.wireshark.org/CaptureSetup/VLAN#Linux

[7] Yerel (etiketsiz) VLAN 1'dir. "Switchport trunk native vlan 1" ile manuel olarak ayarlamanın bir etkisi yoktur.


0.0.0.0 kadar ifconfig eth0 yerine ifup eth0'ı denediniz mi?
Antoine Benkemoun

lsmodLinux kutusuna çıktı gönderebilir misiniz ?
pepoluan

2
Ne ifconfig eth0.37ve / veya ifconfig -aneye benziyor?
Handyman5

Lütfen gönderin /proc/net/vlan/config?
Handyman5

1
sho mac address-table vlan 37?
Shane Madden

Yanıtlar:


2

Ana bilgisayarın yalnızca vlan 37'ye erişmesini mi yoksa ana bilgisayarın birden fazla vlaya erişimini mi istiyorsunuz?

Bu IOS yapılandırması, yerel (etiketsiz) vlanın 37 olarak ayarlanması anlamına gelir .

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

Linux tarafında, vconfig komutu vlan 37 olarak etiketlenen trafik için bir arabirim takma adı oluşturur .

vconfig add eth0 37

Sorunu görüyor musunuz? Anahtar, ana makinenize etiketlenmemiş trafik gönderiyor ve ana makine etiketli trafik arıyor / oluşturuyor.

Ya yerel vlan 37'de eth0 kullanmanız veya anahtar konfektörünü etiketli trafiği geçecek şekilde değiştirmeniz gerekir, örn.

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

Oldukça eski IOS cihazlarında, kamyon kapsüllemesini varsayılan olarak ISL'ye ayarlayacağı için 8021q'ye ayarlamanız gerekir.


Erişim iyi çalıştı, kanal işe yaramadı. Amaç, her biri kendi alt ağına sahip, Linux kutusunda sona eren üç veya daha fazla VLAN'a sahip olmaktı. Çözüm / geçici çözüm, Linux tarafındaki her bir VLAN'ın ayrı bir MAC adresine sahip olmasını sağlamaktı.
Darren H

Bu "iş" ile ne demek istediğinize bağlı. Bir IOS cihaz anlamına gelir erişim modunda bir bağlantı noktası sahip olduğunda "tüm paketler giriş bu bağlantı noktasına VLAN X olarak [anahtara iç] etiketlenecektir". Bu, Linux ana bilgisayarından eklediğiniz 802.1q başlıklarının sıyrıldığı anlamına gelir. Vlan 37'de erişim moduna ayarlanmış farklı bağlantı noktasında tcpdump çalıştırarak bunu kolayca kanıtlayabilirsiniz; linux kutusundaki "vlan" arayüzlerinizin üçünden de yayın trafiğini görebilmelisiniz.
Joshua Hoblitt

İki şeyden bahsetmeliydim. 1) Üretim sanallaştırma ortamımda Cisco & Blade Networks anahtarlarıyla centos 5 üzerinde vlan etiketleri kullandığımı. 2) switch port mode accesstüm 802.1q etiketlerini çıkış trafiğinde de şeritleyecektir. Bu yüzden iletişimin çalışmasını sağlamak için mac adresleriyle uğraşmak zorunda kaldınız. Farklı mac adreslerine sahip hedefler olmadan, paketler Linux ana bilgisayarına vlan etiketi olmadan geldikçe, hepsi yerel vlan arayüzüne ulaşıyordu .
Joshua Hoblitt

Sadece netlik için, IOS "trunk" üzerinde 802.1q vlan etiketleri kullanmak anlamına gelir.
Joshua Hoblitt

0

Şimdi bunun Linux tarafında uzman değilim, Anahtarlama bilgime bakarak, Linux makinesinde dot1q trunking için yapılandırılmış eth0 arayüzüne sahip misiniz? Bir Linux makinesinde çalışmak için birden fazla vlans için bir hüküm olup olmadığını bilmiyorum, ancak Vlan37'nın bir parçası olarak çalışacak şekilde yapılandırılmış tek bir arayüze sahip olduğunuzu ve dolayısıyla Linux makinenizin NIC'ini bir erişim portu haline getirdiğini varsayıyorum. Bir erişim portu bir ana port ile doğrudan iletişim kuramaz, kanal kapsülleme oluşturamaz veya anlayamaz.

Anladığım kadarıyla Linux makinesinin Vlan 37 içinde çalışmasını istiyorsunuz. Sadece ge0 / 1 portunu Vlan37 altında bir erişim portu haline getirin ve linux makineye Vlan37 alt ağı altında rutin olarak herhangi bir IP atayın. Tek bir bağlantı üzerinden yalnızca birden fazla Vlan bilgisini iletmek için kullanılan kanallara ihtiyacınız yoktur.


1
Vconfig bölümü dot1q kanalını yapılandırır :)
Antoine Benkemoun

Nihai hedef, Linux sisteminde birden fazla VLAN'ın sonlandırılmasıdır; İlk önce bir çalışma yapmak zorundayım;)
Darren H

Linux makinenizin birden fazla Vlans'ın parçası olmasını mı yoksa Vlan37'de kalmanın diğer birden çok Vlanstan erişilebilir olması mı demek istediniz?
gokul varma nk

Birincisi - Linux makinesi, her biri kendi VLAN'ında çakışan birden fazla IP adresine sahip olmalıdır. Ana organ bunu açıklığa kavuşturmak için düzenlendi.
Darren H

0

Sanırım sorun switch yapılandırmanızda. 802.1q etiketleriyle bağlantı noktasını bagaj moduna ayarladıktan sonra, vlan 37'yi etiketli trafik olarak göndermek için anahtarı yapılandırmanız gerekir ve bağlantı noktasını etiketlenmemiş trafik için başka bir vlan kullanacak şekilde ayarlamanız da gerekebilir. Bunu ayarladığımda, o bağlantı noktasında hangi vlanın izin verildiğini / reddedildiğini de ayarlamam gerekiyordu. IOS'um biraz paslı ama bence bu aradığınız şey.

Ayrıca paketlerdeki VLAN etiketlerini göstereceğinden, anahtar yapılandırmanızı eth0 üzerinde wireshark kullanarak onaylayabilmeniz gerekir. Cisco LLDP paketleri ayrıca ge0 / 1 bağlantı noktasının ne yaptığına dair bir ipucu verebilir.


Gönderi yaparken madde işaretleri 3 ve 4'ü fark etmedim. Anahtar için gerekli olan trafiğin vlan 37'de gönderildiğini doğrulamanıza izin vereceğinden hala wireshark'ı deneyeceğim.
chuck

Linux'ta Wireshark genellikle VLAN etiketlerini gösteremez ve maalesef burada durum böyle. Yukarıdaki düzenlenmiş sorudaki yeni dipnota [6] bakınız.
Darren H

Sorucunun kurulumuna göre varsayılanlar, yerel vlan olarak vlan 1'e ve etiketli vlans olarak diğerlerine sahip olacaktır.
MikeyB
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.