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.
lsmod
di kotak Linux?ifconfig eth0.37
dan / atauifconfig -a
terlihat?/proc/net/vlan/config
?sho mac address-table vlan 37
?Jawaban:
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.
Di sisi linux, perintah vconfig membuat antarmuka alias untuk lalu lintas yang ditandai sebagai vlan 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.
Pada perangkat iOS yang cukup lama Anda harus mengatur enkapsulasi truk ke 8021q karena mereka akan default ke ISL.
sumber
switch port mode access
juga 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 .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.
sumber
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.
sumber