ฉันดูเหมือนจะมีความเข้าใจผิด ๆ เกี่ยวกับการทำงานของ VLAN บน Linux และฉันหวังว่าคนดี ๆ ที่นี่สามารถสอนฉันได้
นักแสดง: หนึ่ง Cisco 3560, หนึ่ง VLAN, และหนึ่งกล่อง Linux [1]
Cisco --------------- Linux
ge0/1 eth0
Cisco มีอินเทอร์เฟซ Vlan 37 พร้อมที่อยู่ IP 10.40.37.252/24 ฉันต้องการวาง 10.40.37.1/24 ในกล่อง Linux
เมื่อ Cisco ยกเลิกการห่อหุ้ม vlan 37 ทุกอย่างทำงานได้ดี [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
อย่างไรก็ตามเมื่อฉันตั้งค่าพอร์ตเป็น trunking และกำหนด vlan 37 ทางด้าน Linux มันหยุดทำงาน:
# 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
ฉันหายไปนี่อะไร
แก้ไข: โซลูชั่น:
คำถามของ Shane เกี่ยวกับตารางที่อยู่ mac ทำให้ฉันไปหาโซลูชัน: ใช้ "ip addr" เพื่อตั้งค่าที่อยู่ L2 (MAC) ที่แตกต่างกันในแต่ละอินเตอร์เฟสย่อยของ VLAN และมันก็ใช้งานได้ทันที
อีกวิธีที่เป็นไปได้ที่ฉันไม่ได้ลอง (เพราะฮาร์ดแวร์ของฉันเก่าเกินไป) กำลังใช้ "ethtool" เพื่อปิดการใช้งาน VLAN โดยการถ่ายของ NIC เองและบังคับให้เคอร์เนลจัดการแท็ก
ขอบคุณเชน!
แก้ไข: ข้อมูลเพิ่มเติมตามความคิดเห็น:
เป้าหมายโดยรวมคือการให้ vlans สามรายการ (สาธารณะส่วนตัว oam & p) ยกเลิกที่อยู่ IP สามรายการในกล่อง linux โดยมีแอปพลิเคชันต่าง ๆ เชื่อมโยงกับที่อยู่ในเครื่อง ฉันสามารถขยายเพิ่มเติมได้ถ้าจำเป็น แต่ฉันพยายามทำให้คำอธิบายปัญหาและการอภิปรายง่าย ๆ ก่อนที่ฉันจะมี vlans สามอันที่ทำงานฉันต้องใช้มันในการทำงาน :)
Antoine -> ifup กับ ifconfig ไม่สร้างความแตกต่าง
Pepoluan -> ฉันถือว่านี่คือสิ่งที่คุณกำลังมองหา โปรดสังเกตว่าการขาดการอ้างอิงโดยไดรเวอร์ phy นั้นเป็นเรื่องปกติ [5]
$ lsmod | grep 802
8021q 25545 1 cxgb3
Handyman ->
$ 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 และ / หรือ tcpdump ไม่แสดงแท็ก แต่นี่เป็นข้อ จำกัด ปกติบน Linux เนื่องจากลำดับการประมวลผลของการจัดการ vlan และ pcap ในเคอร์เนล [6] นอกจากนี้ VLAN ที่ไม่ติดแท็กจะถูกตั้งค่าเป็น 1 [7]
[1] ฉันได้ลองกับทั้ง CentOS 5.5 และ Ubuntu 11.04 แล้วและทั้งคู่ก็มีปัญหาเดียวกัน
[2] โปรดทราบว่าการกำหนดค่าไม่ใช่การตัด & วางดังนั้นการพิมพ์ที่นี่เป็นเพียงความทรงจำที่ไม่ดีของฉัน
[3] เปิดหรือปิด "nonegotiate" ไม่มีผลกระทบต่อปัญหา
[4] Vlan 37 แสดงเป็นแอ็คทีฟ & ไม่ถูกตัดบนลิงก์ดังนั้น "อนุญาต" จึงไม่ใช่ปัญหา
[5] serverfault: เปิดใช้งาน 8021q บนเครื่อง
[6] http://wiki.wireshark.org/CaptureSetup/VLAN#Linux
[7] VLAN ดั้งเดิม (ไม่ได้ติดแท็ก) คือ 1. ตั้งค่าด้วยตนเองด้วย "switchport trunk native vlan 1" ไม่มีผล
lsmod
บนกล่อง Linux?
ifconfig eth0.37
และ / หรือifconfig -a
มีลักษณะอย่างไร
/proc/net/vlan/config
?
sho mac address-table vlan 37
?