Cisco dan Linux dan Vans

9

Saya tampaknya memiliki beberapa kesalahpahaman mendasar tentang cara kerja VLAN di Linux, dan saya berharap orang-orang baik di sini dapat mendidik saya.

Cast: Satu Cisco 3560, satu VLAN, dan satu kotak Linux [1].

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

Cisco memiliki antarmuka Vlan 37, dengan alamat IP 10.40.37.252/24. Saya ingin menempatkan 10.40.37.1/24 di kotak Linux.

Ketika Cisco melakukan enkapsulasi vlan 37, semuanya berjalan dengan baik [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

Namun, ketika saya mengatur port ke trunking dan menetapkan vlan 37 di sisi Linux, ia berhenti bekerja:

# 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

Apa yang kulewatkan di sini?

Edit: Solusi:

Pertanyaan Shane tentang tabel alamat mac membawa saya ke sebuah solusi: Gunakan "ip addr" untuk mengatur alamat L2 (MAC) unik yang berbeda pada masing-masing sub-antarmuka VLAN, dan tiba-tiba berfungsi.

Solusi lain yang mungkin saya tidak coba (karena perangkat keras saya terlalu tua) menggunakan "ethtool" untuk menonaktifkan pembongkaran VLAN oleh NIC sendiri, dan memaksa kernel untuk berurusan dengan tag.

Shane terima kasih!

Edit: Info selengkapnya sesuai komentar:

Tujuan keseluruhannya adalah memiliki tiga vlan (publik, pribadi, oam & p) yang berakhir pada tiga alamat IP individu pada kotak linux, dengan aplikasi yang berbeda yang mengikat ke alamat lokal. Saya dapat memperluas lebih lanjut jika perlu, tetapi saya mencoba untuk menjaga deskripsi masalah dan diskusi tetap sederhana, karena sebelum saya dapat membuat tiga vlan berfungsi, saya agak membutuhkannya agar bisa berfungsi. :)

Antoine -> ifup versus ifconfig tidak membuat perbedaan.

Pepoluan -> Saya berasumsi ini adalah apa yang Anda cari. Perhatikan kurangnya referensi oleh driver phy tampaknya normal. [5]

$ lsmod | grep 802
    8021q   25545 1 cxgb3

Tukang ->

$ 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 dan / atau tcpdump tidak menampilkan tag, tetapi ini tampaknya merupakan batasan normal pada Linux, karena urutan pemrosesan penanganan vlan dan pcap di kernel [6]. Juga, VLAN tanpa tanda diatur ke 1 [7].

[1] Saya sudah mencoba ini dengan CentOS 5.5 dan Ubuntu 11.04, dan keduanya memiliki masalah yang sama.

[2] Perhatikan bahwa konfigurasi bukan cut & paste, jadi salah ketik apa pun di sini hanyalah ingatan buruk saya.

[3] "non-negosiasi" hidup atau mati tidak berpengaruh pada masalah.

[4] Vlan 37 ditampilkan aktif & tidak dipangkas di tautan, jadi "diizinkan" bukan masalahnya.

[5] serverfault: Mengaktifkan 8021q pada nic

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

[7] VLAN asli (tidak bertanda) adalah 1. Pengaturan secara manual dengan "switchport trunk native vlan 1" tidak berpengaruh.

Darren H
sumber
Sudahkah Anda mencoba ifup eth0 alih-alih ifconfig eth0 0.0.0.0 up?
Antoine Benkemoun
Bisakah Anda memposting output lsmoddi kotak Linux?
pepoluan
2
Seperti apa ifconfig eth0.37dan / atau ifconfig -aterlihat?
Handyman5
Juga tolong kirim /proc/net/vlan/config?
Handyman5
1
sho mac address-table vlan 37?
Shane Madden

Jawaban:

2

Apakah Anda ingin host memiliki akses ke hanya vlan 37 atau Anda ingin host memiliki akses ke beberapa vlan?

Konfigurasi iOS ini berarti mengatur vlan asli (yang tidak ditandai) ke 37.

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

Di sisi linux, perintah vconfig membuat antarmuka alias untuk lalu lintas yang ditandai sebagai vlan 37.

vconfig add eth0 37

Apakah kamu melihat masalahnya? Switch mengirim host Anda traffic yang tidak ditandai dan host mencari / menghasilkan traffic yang ditandai.

Anda hanya perlu menggunakan eth0 di vlan asli 37 atau mengubah saklar conf sehingga melewati lalu lintas yang ditandai, misalnya.

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

Pada perangkat iOS yang cukup lama Anda harus mengatur enkapsulasi truk ke 8021q karena mereka akan default ke ISL.

Joshua Hoblitt
sumber
Akses berfungsi dengan baik, trunking tidak. Tujuannya adalah untuk memiliki tiga atau lebih VLAN, masing-masing dengan subnet mereka sendiri, berakhir di kotak Linux. Solusi / solusi untuk memastikan setiap VLAN di sisi Linux memiliki alamat MAC yang berbeda.
Darren H
Yah itu tergantung pada apa yang Anda maksud dengan "bekerja". Ketika perangkat iOS memiliki port dalam mode akses, itu berarti "semua paket input ke port ini akan ditandai [internal to the switch] sebagai vlan X". Itu artinya 802.1q header apa pun yang telah Anda tambahkan dari host Linux dilucuti. Anda dapat dengan mudah membuktikan ini dengan menjalankan tcpdump pada port yang berbeda juga diatur ke mode akses pada vlan 37; Anda harus dapat melihat lalu lintas siaran dari ketiga antarmuka "vlan" Anda di kotak linux.
Joshua Hoblitt
Saya seharusnya menyebutkan dua hal. 1) Bahwa saya menggunakan tag vlan pada centos 5 dengan switch Cisco & Blade Networks di lingkungan virtualisasi produksi saya. 2) switch port mode accessjuga akan menghapus semua tag 802.1q pada lalu lintas keluar. Itu sebabnya Anda harus menggunakan mengutak-atik alamat mac untuk membuat komunikasi berfungsi sama sekali. Tanpa tujuan memiliki alamat mac yang berbeda, mereka semua berakhir pada antarmuka vlan asli karena paket datang ke host Linux tanpa tag vlan .
Joshua Hoblitt
Hanya untuk kejelasan, pada iOS "trunk" berarti menggunakan tag vlan 802.1q.
Joshua Hoblitt
0

Sekarang saya bukan ahli dengan sisi Linux ini, dengan pergi dengan pengetahuan Switching saya, apakah Anda memiliki antarmuka eth0 pada mesin Linux yang dikonfigurasi untuk trunking dot1q? Saya tidak tahu apakah ada ketentuan untuk beberapa vlan untuk beroperasi dalam mesin Linux, tapi saya berasumsi bahwa Anda memiliki antarmuka tunggal yang dikonfigurasi untuk berfungsi sebagai bagian dari Vlan37, sehingga pada dasarnya membuat NIC mesin Linux Anda menjadi port akses. Port akses tidak dapat berkomunikasi secara langsung dengan port trunk, port tidak akan dapat membuat atau memahami enkapsulasi trunking.

Dari apa yang saya mengerti Anda ingin mesin Linux bekerja di dalam Vlan 37. Cukup kembalikan port ge0 / 1 menjadi port akses di bawah Vlan37 dan secara rutin berikan mesin linux IP apa pun di bawah subnet Vlan37. Anda benar-benar tidak perlu trunking yang hanya digunakan untuk menyampaikan banyak informasi Vlan melalui satu tautan.

gokul varma nk
sumber
1
Bagian vconfig mengkonfigurasi trunking dot1q :)
Antoine Benkemoun
Tujuan akhirnya adalah untuk menghentikan beberapa VLAN pada sistem Linux; Saya pertama-tama harus membuat satu bekerja;)
Darren H
Maksud Anda, Anda ingin mesin Linux Anda menjadi bagian dari banyak orang Vans atau tetap menggunakan Vlan37 yang harus dapat diakses dari banyak orang lain?
gokul varma nk
Yang pertama - Mesin linux harus memiliki beberapa alamat IP yang tidak tumpang tindih, masing-masing dalam VLAN mereka sendiri. Badan utama diedit untuk menjelaskan hal ini.
Darren H
0

Saya pikir masalahnya adalah dengan konfigurasi sakelar Anda. Setelah mengatur port ke mode trunk dengan tag 802.1q Anda perlu mengkonfigurasi switch untuk mengirim vlan 37 sebagai lalu lintas yang ditandai dan Anda juga mungkin perlu mengatur port untuk menggunakan vlan lain untuk lalu lintas yang tidak ditandai. Ketika saya mengatur ini, saya juga harus mengatur vlan mana yang diizinkan / ditolak pada port itu. IOS saya agak berkarat tapi saya pikir ini yang Anda cari.

Anda juga harus dapat mengonfirmasi konfigurasi sakelar menggunakan wireshark pada eth0 karena akan menampilkan tag VLAN pada paket. Paket-paket Cisco LLDP juga dapat memberi Anda petunjuk tentang apa yang dilakukan port ge0 / 1.

membuang
sumber
Saya tidak melihat poin-poin 3 dan 4 ketika memposting. Saya masih akan mencoba wireshark karena itu akan memungkinkan Anda untuk memverifikasi bahwa lalu lintas yang dimaksudkan untuk sakelar sedang dikirim pada vlan 37.
chuck
Wireshark di linux seringkali tidak dapat menampilkan tag VLAN, dan sayangnya, seperti itulah yang terjadi di sini. Lihat catatan kaki baru [6] dalam pertanyaan yang diedit di atas.
Darren H
Standarnya sesuai pengaturan penanya akan memiliki vlan 1 sebagai vlan asli dan semua lainnya sebagai vlan yang ditandai.
MikeyB