Score:1

วิธีกำหนดค่าไฮเปอร์ไวเซอร์เพื่อให้เครื่องเสมือน KVM / QEMU สามารถเข้าถึงโฮสต์ที่เชื่อมต่อกับบริดจ์หลักเดียวกัน

ธง au

1 ปัญหา

เป้าหมายของฉันคือการรับส่งข้อมูล LAN ทั้งหมดถูกกำหนดเส้นทางผ่านเครื่องเสมือน (VM) ซึ่งทำหน้าที่เป็นเราเตอร์และไฟร์วอลล์ ควรกำหนดเส้นทาง VM อื่นๆ บนไฮเปอร์ไวเซอร์เดียวกันผ่านไฟร์วอลล์ VM ดูต่อไปนี้ ภาพร่างเครือข่าย. โฮสต์ทางกายภาพที่เชื่อมต่อกับสะพานหลักสามารถ ping ซึ่งกันและกันได้สำเร็จ แต่ VMs ยังไม่สามารถเข้าถึงได้

2 รายละเอียด

การกำหนดค่าเครือข่ายบนไฮเปอร์ไวเซอร์:

# =======
#สะพาน
# =======
# ---------------------
# สะพาน VLAN br-vlan-3
# ---------------------
ip link เพิ่มชื่อ br-vlan-3 ประเภทบริดจ์
ip addr เพิ่ม 10.66.3.11/24 dev br-vlan-3
ip link ตั้ง dev br-vlan-3 ขึ้นมา

# ---------------------
#สะพานท้ายเขื่อน
# ---------------------
ip link เพิ่มชื่อ br-trunk-up type bridge vlan_filtering 1 vlan_default_pvid 0
ip link ตั้งค่า br-trunk-up up

# ---------------
#สะพานลำ VM
# ---------------
ip link เพิ่มชื่อ br-trunk-vm ประเภทบริดจ์ vlan_filtering 1 vlan_default_pvid 0
ลิงค์ ip ตั้งค่า br-trunk-vm ขึ้น

# =====
#เจ้าภาพ
# =====

# ตั้งค่าอุปกรณ์ทางกายภาพขึ้น
ลิงค์ ip ตั้งค่า enp5s0 ขึ้น
ลิงค์ ip ตั้งค่า enp9s0f0 ขึ้น
ลิงค์ ip ตั้งค่า enp9s0f1 ขึ้น
ลิงค์ ip ตั้งค่า enp9s0f2 ขึ้น
ลิงค์ ip ตั้งค่า enp9s0f3 ขึ้น


# ----------------------
# desktop.3 br-vlan-3
# ----------------------
ip link เพิ่มลิงค์ enp9s0f1 ชื่อ enp9s0f1.3 พิมพ์ vlan id 3
ip ลิงค์ตั้งค่า dev enp9s0f1.3 ต้นแบบ br-vlan-3
ลิงค์ ip ตั้งค่า enp9s0f1.3 ขึ้น

# --------------------------
# desktop.100 br-trunk-vm
# --------------------------
ลิงค์ ip เพิ่มลิงค์ enp9s0f1 ชื่อ enp9s0f1.100 ประเภท vlan id 100
ชุดลิงค์ ip enp9s0f1.100 หลัก br-trunk-vm
ลิงค์ ip ตั้งค่า enp9s0f1.100 ขึ้น
บริดจ์ vlan เพิ่ม vid 100 dev enp9s0f1.100 master
บริดจ์ vlan เพิ่ม vid 100 dev br-trunk-vm ด้วยตนเอง

บริดจ์ vlan เพิ่ม vid 100 dev fw.100 pvid 100

แผนที่เครือข่าย

=======
เดสก์ทอป
=======
localhost:user ~ $ip ก
2: enp34s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ 00:d8:61:c4:b1:af brd ff:ff:ff:ff:ff:ff
4: br-vlan-100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ 1a:b1:36:43:f0:e4 brd ff:ff:ff:ff:ff:ff
    inet 10.66.100.44/24 ขอบเขต global br-vlan-100
       valid_lft ตลอดไป reserved_lft ตลอดไป
7: enp.100@enp34s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-vlan-100 state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ 00:d8:61:c4:b1:af brd ff:ff:ff:ff:ff:ff
    
localhost:~ # cat /proc/net/vlan/enp.100 
enp.100 VID: 100 REORDER_HDR: 1 dev->priv_flags: 1221
         เฟรมทั้งหมดที่ได้รับ 0
          ไบต์ทั้งหมดที่ได้รับ 0
      ออกอากาศ/มัลติคาสต์ Rcvd 0

      เฟรมทั้งหมดที่ส่ง 287
       ไบต์ทั้งหมดที่ส่ง 53964
อุปกรณ์: enp34s0
การแมปลำดับความสำคัญของ INGRESS: 0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0
 การแมปลำดับความสำคัญของ EGRESS: 


==========
ไฮเปอร์ไวเซอร์
==========
ชื่อบริดจ์ รหัสบริดจ์ อินเทอร์เฟซที่เปิดใช้งาน STP
br-vlan-100 8000.1ab13643f0e4 ไม่มี enp.100

[ระบบ root@fedora]# ip  
4: enp9s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ a0:36:9f:5d:09:19 brd ff:ff:ff:ff:ff:ff
13: br-trunk-vm: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ 56:7e:22:6a:23:2d brd ff:ff:ff:ff:ff:ff
16: enp9s0f1.100@enp9s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-trunk-vm สถานะกลุ่ม UP เริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ a0:36:9f:5d:09:19 brd ff:ff:ff:ff:ff:ff
21: fw.100: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br-trunk-vm state UNKNOWN กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ fe:54:00:3e:97:72 brd ff:ff:ff:ff:ff:ff
    
    
[ระบบ root@fedora]# brctl แสดง dev br-trunk-vm
ชื่อบริดจ์ รหัสบริดจ์ อินเทอร์เฟซที่เปิดใช้งาน STP
br-trunk-vm 8000.567e226a232d ไม่มี enp9s0f1.100
                                                        fw.100
                                                        fw.103
                                                        fw.3


===============
เครื่องจักรเสมือนจริง 
===============                                                                    
[root@fedora system] # แสดงบริดจ์ vlan
พอร์ต vlan-id  
br-ลำ-vm 100
เอ็นพี9s0f1.100 100
virbr0 1 PVID ขาออกไม่ได้ติดแท็ก
fw.100 100 PVID ขาออกที่ไม่ได้ติดแท็ก


2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP กลุ่มเริ่มต้น qlen 1000
    ลิงค์/อีเธอร์ 52:54:00:3e:97:72 brd ff:ff:ff:ff:ff:ff
    inet 10.66.100.10/24 ขอบเขตทั่วโลก enp1s0
       valid_lft ตลอดไป reserved_lft ตลอดไป

การกำหนดค่าเครือข่าย Libvirt XML ของไฟร์วอลล์ VM:

<interface type='bridge'>
  <mac address='52:54:00:3e:97:72'/>
  <source bridge='br-trunk-vm'/>
  <target dev='fw.100'/>
  <model type='virtio'/>
  <address type='pci' domain='0x0000' bus='0x01' slot='0x00' function='0x0'/>
</interface>

3 ความพยายาม

ฉันลองกำหนดค่าทั้ง NIC ที่ติดแท็กและไม่ติดแท็กบนไฟร์วอลล์ VM สำหรับ NIC ที่ติดแท็ก ฉันได้สร้างสะพาน VLAN บนไฟร์วอลล์ VM และสร้างอุปกรณ์แตะเสมือนจากการแตะเสมือน fw.100 ด้วย VLAN 100: [email protected]. จากนั้นฉันตั้งค่าพอร์ตลำตัวของ [email protected] ที่จะเชี่ยวชาญ: บริดจ์ vlan เพิ่ม vid 100 dev [email protected] master. สำหรับแนวทาง NIC ที่ไม่ติดแท็ก ฉันได้กำหนดค่าไม่มี VLAN บนไฟร์วอลล์ VM และตั้งค่าพอร์ตหลักเป็น PVID 100 ที่ไม่ติดแท็ก บริดจ์ vlan เพิ่ม vid 100 dev fw.100 pvid 100 ไม่ติดแท็ก. ในทั้งสองกรณี ฉันไม่สามารถ ping ระหว่างโฮสต์เดสก์ท็อปและ VM ไฟร์วอลล์ได้

ปัญหานี้เกิดขึ้นกับเครื่องเสมือน libvirt KVM/QEMU เท่านั้น โฮสต์ที่ติดแท็ก VLAN ทางกายภาพสองรายการเชื่อมต่อกับบริดจ์ลำตัวของไฮเปอร์ไวเซอร์เนื่องจากมาสเตอร์สามารถ ping ซึ่งกันและกันได้

4 อัปเดต

ดูเหมือนว่า libvirt จะไม่รองรับบริดจ์ของ Linux กับ VLAN ตามบทความต่อไปนี้ VMs VLAN หยุดทำงานหากมีอุปกรณ์เสมือนตัวที่สองบนไฮเปอร์ไวเซอร์ที่มี VLAN เดียวกัน: https://alesnosek.com/blog/2015/09/07/bridging-vlan-trunk-to-the-guest/

สามารถใช้ openvswitch อีกทางหนึ่งได้ แต่การใช้บริดจ์สำหรับแต่ละ VM และโฮสต์จริงเป็นวิธีที่ดีกว่า จากนั้นไฮเปอร์ไวเซอร์อนุญาตให้ส่งต่อบริดจ์ของ VM และโฮสต์ไปยังบริดจ์ของไฟร์วอลล์ VM และการกำหนดเส้นทางที่เหลือจะทำภายใน VM ของไฟร์วอลล์

Nikita Kipriyanov avatar
za flag
ใช่ libvirt ไม่รองรับการตั้งค่า vlans สำหรับ VM ด้วย vlan-aware Linux bridge น่าละอายกับพวกเขา วิธีที่ดีที่สุดที่คุณสามารถทำได้คือตั้งค่า VLAN บนพอร์ตบริดจ์เสมือนที่เป็นของ VM ด้วยมือด้วยยูทิลิตี้ 'บริดจ์' หลังจากที่ VM เริ่มทำงาน

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา