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.
lsmod
Linux kutusuna çıktı gönderebilir misiniz ?
ifconfig eth0.37
ve / veya ifconfig -a
neye benziyor?
/proc/net/vlan/config
?
sho mac address-table vlan 37
?