Cisco และ Linux และ Vlans


9

ฉันดูเหมือนจะมีความเข้าใจผิด ๆ เกี่ยวกับการทำงานของ 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" ไม่มีผล


คุณลองใช้ ifup eth0 แทน ifconfig eth0 0.0.0.0 แล้วหรือยัง
Antoine Benkemoun

คุณสามารถโพสต์ผลลัพธ์ของlsmodบนกล่อง Linux?
pepoluan

2
สิ่งที่ifconfig eth0.37และ / หรือifconfig -aมีลักษณะอย่างไร
Handyman5

นอกจากนี้โปรดโพสต์/proc/net/vlan/config?
Handyman5

1
sho mac address-table vlan 37?
เชนหัวเสีย

คำตอบ:


2

คุณต้องการให้โฮสต์เข้าถึง vlan 37 หรือคุณต้องการให้โฮสต์มีสิทธิ์เข้าถึง vlans หลายรายการหรือไม่

การกำหนดค่า IOS นี้หมายถึงการตั้งค่าดั้งเดิม (ที่ไม่ได้ติดแท็ก) vlan เป็น 37

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

ที่ด้าน linux คำสั่ง vconfig สร้างนามแฝงของอินเตอร์เฟสสำหรับปริมาณข้อมูลที่ติดแท็กเป็น vlan 37

vconfig add eth0 37

คุณเห็นปัญหาหรือไม่ สวิตช์กำลังส่งทราฟฟิกที่ไม่ติดแท็กโฮสต์ของคุณและโฮสต์กำลังค้นหา / สร้างทราฟฟิกที่ติดแท็ก

คุณต้องการเพียงแค่ใช้ eth0 ใน vlan 37 ดั้งเดิมหรือเปลี่ยน conf conf เพื่อให้มันผ่านทราฟฟิกที่มีแท็กเช่น

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

สำหรับอุปกรณ์ iOS ที่ค่อนข้างเก่าคุณจำเป็นต้องตั้งค่าการห่อหุ้มรถบรรทุกเป็น 8021q เนื่องจากจะใช้ค่าเริ่มต้นเป็น ISL


การเข้าถึงทำงานได้ดีการเดินสายไฟไม่ได้ เป้าหมายคือมี VLAN สามตัวขึ้นไปแต่ละตัวมีซับเน็ตของตัวเองสิ้นสุดบนกล่อง Linux วิธีการแก้ปัญหา / การแก้ปัญหาคือเพื่อให้แน่ใจว่าแต่ละ VLAN ในด้าน Linux มีที่อยู่ MAC ที่แตกต่างกัน
Darren H

ขึ้นอยู่กับว่าคุณหมายถึงอะไรโดย "งาน" เมื่ออุปกรณ์ IOS มีพอร์ตในโหมดการเข้าถึงหมายความว่า " อินพุตแพ็กเก็ตทั้งหมดในพอร์ตนี้จะถูกแท็ก [ภายในสวิตช์] เป็น vlan X" นั่นหมายความว่าส่วนหัว 802.1q ที่คุณเพิ่มจากโฮสต์ Linux นั้นถูกปล้น คุณสามารถพิสูจน์ได้อย่างง่ายดายด้วยการรัน tcpdump บนพอร์ตที่ต่างกันและตั้งค่าเป็นโหมดการเข้าถึงใน vlan 37; คุณควรเห็นการรับส่งข้อมูลออกอากาศจากอินเทอร์เฟซ "vlan" ทั้งสามของคุณบนกล่อง linux
Joshua Hoblitt

ฉันควรพูดถึงสองสิ่ง 1) ฉันจะใช้แท็ก vlan บน CentOS 5 ด้วยสวิตช์ของ Cisco และ Blade Networks ในสภาพแวดล้อมการผลิตเสมือนจริงของฉัน 2) switch port mode accessจะดึงแท็ก 802.1q ทั้งหมดออกจากการรับส่งข้อมูล นั่นเป็นสาเหตุที่คุณต้องหันไปเล่นกับที่อยู่แม็คเพื่อให้การสื่อสารทำงานได้อย่างเต็มที่ โดยไม่ต้องมีจุดหมายปลายทางที่อยู่ MAC ที่แตกต่างกันทุกคนตายขึ้นมาบนอินเตอร์เฟซธรรมชาติ VLAN เป็นแพ็คเก็ตกำลังจะมาถึงโฮสต์ Linux กับไม่มีแท็ก VLAN
Joshua Hoblitt

เพื่อความชัดเจนบน IOS "trunk" หมายถึงใช้แท็ก 802.1q vlan
Joshua Hoblitt

0

ตอนนี้ฉันไม่ได้เป็นผู้เชี่ยวชาญด้านลินุกซ์ของเรื่องนี้โดยไปที่ความรู้เรื่องการสับเปลี่ยนของฉันคุณมีอินเตอร์เฟส eth0 บนเครื่องลีนุกซ์ที่ตั้งค่าไว้สำหรับการติดตั้งดอทคิวหรือไม่? ฉันไม่รู้ว่ามีข้อกำหนดสำหรับ vlans หลายตัวที่ใช้งานในเครื่อง Linux หรือไม่ แต่ฉันคิดว่าคุณมีอินเตอร์เฟสเดียวซึ่งถูกกำหนดค่าให้ทำงานเป็นส่วนหนึ่งของ Vlan37 ดังนั้นทำให้ NIC ของเครื่อง Linux ของคุณเป็นพอร์ตการเข้าถึง การเข้าถึงพอร์ตไม่สามารถสื่อสารโดยตรงกับพอร์ต trunk มันจะไม่สามารถสร้างหรือทำความเข้าใจการห่อหุ้มลำต้น

จากสิ่งที่ฉันเข้าใจว่าคุณต้องการให้เครื่อง Linux ทำงานภายใน Vlan 37 เพียงเปลี่ยนพอร์ต ge0 / 1 ให้เป็นพอร์ตการเข้าถึงภายใต้ Vlan37 และกำหนด IP เครื่องใด ๆ ภายใต้เครือข่ายย่อยของ Vlan37 คุณไม่จำเป็นต้องทำการเชื่อมต่อซึ่งใช้เพื่อส่งข้อมูล Vlan หลาย ๆ ตัวผ่านลิงค์เดียว


1
ส่วน vconfig จะกำหนดค่าการโหลดจุด dot1q :)
Antoine Benkemoun

เป้าหมายสุดท้ายคือการมีหลาย VLANs ยกเลิกบนระบบ Linux; ครั้งแรกที่ผมจะต้องได้รับการทำงานอย่างใดอย่างหนึ่ง;)
คาร์เรน H

คุณหมายถึงคุณต้องการให้เครื่องลีนุกซ์ของคุณเป็นส่วนหนึ่งของ Vlans หลายอันหรือว่าการอยู่ใน Vlan37 นั้นจำเป็นต้องเข้าถึงได้จาก Vlans อื่น ๆ
gokul varma nk

อดีต - เครื่องลินุกซ์ควรมีที่อยู่ IP หลายที่ไม่ทับซ้อนกันแต่ละอันใน VLAN ของตัวเอง ตัวหลักแก้ไขเพื่อชี้แจงนี้
Darren H

0

ฉันคิดว่าปัญหาเกิดขึ้นกับการกำหนดค่าสวิตช์ของคุณ หลังจากตั้งค่าพอร์ตเป็นโหมด trunk ด้วยแท็ก 802.1q คุณต้องกำหนดค่าสวิตช์เพื่อส่ง vlan 37 เป็นทราฟิกที่ถูกแท็กและคุณอาจต้องตั้งค่าพอร์ตให้ใช้ vlan อื่นสำหรับทราฟฟิกที่ไม่มีแท็ก เมื่อฉันตั้งค่านี้ฉันต้องตั้งค่า vlan ที่อนุญาต / ปฏิเสธบนพอร์ตนั้น IOS ของฉันเป็นสนิมเล็กน้อย แต่ฉันคิดว่านี่คือสิ่งที่คุณกำลังมองหา

คุณควรจะสามารถยืนยันการตั้งค่าสวิตช์ของคุณโดยใช้ wireshark บน eth0 เพราะมันจะแสดงแท็ก VLAN บนแพ็กเก็ต แพ็คเก็ต Cisco LLDP อาจช่วยให้คุณรู้ว่าพอร์ต ge0 / 1 กำลังทำอะไรอยู่


ฉันไม่ได้สังเกตเห็นสัญลักษณ์แสดงหัวข้อ 3 และ 4 เมื่อโพสต์ ฉันยังคงลองใช้ wireshark เพราะมันจะช่วยให้คุณสามารถตรวจสอบได้ว่าปริมาณการใช้งานสำหรับสวิตช์ถูกส่งไปที่ vlan 37 แล้ว
เชย

Wireshark บน linux มักจะไม่สามารถแสดงแท็ก VLAN และน่าเสียดายที่เป็นเช่นนี้ ดูเชิงอรรถใหม่ [6] ในคำถามที่แก้ไขแล้วข้างต้น
Darren H

ค่าเริ่มต้นตามการตั้งค่าของผู้ถามจะมี vlan 1 เป็น Native vlan และอื่น ๆ ทั้งหมดเป็นแท็ก vlans
MikeyB
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.