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 / atau ifconfig -a
terlihat?
/proc/net/vlan/config
?
sho mac address-table vlan 37
?