มีวิธีการกำหนดอินเทอร์เฟซเสมือนที่เป็นของเครื่องเสมือนในโฮสต์ kvm หรือไม่


10

ฉันใช้ qemu / kvm เมื่อเชื่อมต่อเครือข่าย ในเครื่องโฮสต์มี "vnetX" หลายอินเตอร์เฟสเครือข่ายที่ไม่มี IP ฉันกำลังมองหาวิธีที่จะรู้ว่า vnetX เป็นของเครื่องเสมือน

ฉันพยายามจับคู่ค่าที่อยู่ MAC ในอินเทอร์เฟซเหล่านี้กับ MAC บนเครื่องเสมือน (หรือ XML ที่กำหนดไว้) แต่ไม่ตรงกัน

มีการแสดง brctl ซึ่งแสดงอินเตอร์เฟส vnet ที่เป็นของบริดจ์ แต่นี่ไม่ใช่ข้อมูลที่เป็นประโยชน์

มีวิธีที่จะรู้ว่าความสัมพันธ์นั้นหรือไม่? ขอบคุณ!!

คำตอบ:


14

วิธีการเกี่ยวกับเรื่องนี้ (ตัวอย่างสำหรับvnet13):

$ VNET=vnet13; for vm in $(virsh list | grep running | awk '{print $2}'); do virsh dumpxml $vm|grep -q "$VNET" && echo $vm; done

ที่นี่เราใช้virsh dumpxmlเพื่อแสดงคุณสมบัติแบบไดนามิกเกี่ยวกับ VM ซึ่งไม่สามารถใช้ได้ในนิยาม XML แบบคงที่ของ VM ใน /etc/libvirt/qemu/foo.xml vnetXอินเทอร์เฟซใดที่แนบมากับ VM ซึ่งเป็นคุณสมบัติแบบไดนามิก กันไปสำหรับที่อยู่ MAC ของ VM


4
ฉันใช้การปรับเปลี่ยนเล็กน้อยนี้เพื่อแสดงว่า vm มีอินเตอร์เฟสใด:for vm in $(virsh list | grep running | awk '{print $2}'); do echo -n "$vm:"; virsh dumpxml $vm| grep -oP "vnet\d+" ; done
zje

หากคุณกำลังตรวจสอบโหนด 'oVirt' คุณสามารถใช้คำสั่งเดียวกันได้ แต่ควรรัน virsh ในโหมด 'อ่านอย่างเดียว' เพียงเพิ่มพารามิเตอร์ -r ไปยังการเรียก virsh แต่ละครั้ง
karlacio

6

ลองvirsh dumpxml $domainคุณจะเห็นสิ่งที่ชอบ:

  <interface type='network'>
  <mac address='52:54:00:9d:9d:10'/>
  <source network='default'/>
  <target dev='vnet1'/>
  <model type='e1000'/>
  <alias name='net1'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x0c' function='0x0'/>

alias nameคือสิ่งที่จะนำมาใช้ในบรรทัดคำสั่ง qemu-ตรมดังนั้นถ้าคุณเรียกใช้ps -ef |grep qemu|grep net1จากตัวอย่างของฉันคุณจะเห็นไวยากรณ์คำสั่งที่เกิดขึ้นจริงที่ใช้สำหรับอินเตอร์เฟซนี้


2

โซลูชันทุกตัวที่ให้ไว้ข้างต้นจะถือว่า VMs นั้นได้รับการจัดการโดย libvirt มีความเป็นไปได้ที่จะรัน QEMU VMs โดยที่คุณไม่สามารถใช้ virsh หรือดู XML เพื่อค้นหาคำตอบได้

ในกรณีที่รัน QEMU VMs จากบรรทัดคำสั่ง "raw":

  1. tcpdump -i tap0 -f 'icmp' (แทนที่ส่วนใดก็ได้ที่คุณสนใจ)

  2. Ping VM ตัวเลือกแต่ละตัวจนกว่าคุณจะเห็นแพ็คเก็ตในการติดตาม อินเทอร์เฟซที่คุณกำลังติดตามเมื่อแพ็กเก็ต ICMP ปรากฏเป็นสิ่งที่คุณกำลังมองหา!

ในทางกลับกันคุณสามารถเริ่ม ping ไปยัง VM ที่เฉพาะเจาะจงแล้ว tcpdump แต่ละการเชื่อมต่อการแตะในทางกลับกันจนกว่าจะมี "ไฟ" หนึ่ง ขึ้นอยู่กับว่าคุณสนใจที่จะค้นหา VM ที่ตรงกับอินเตอร์เฟสการแตะหรืออินเทอร์เฟซการแตะที่ตรงกับ VM


0

ที่อยู่ MAC ของvnetXอินเทอร์เฟซเป็นของโฮสต์ไม่ใช่แขก brctl showmacs br0จะแสดงให้แม็คที่ตรวจพบโดยสะพาน brctl showแต่คุณจะต้องแล้วที่จะอ้างอิงข้ามหมายเลขพอร์ตที่มีรายชื่อของการเชื่อมต่อจาก


0

จับคู่ที่อยู่ IP จาก Arp cache ไปยัง VM

# vm mac address list
for vm in $(virsh list | grep running | awk '{print $2}'); do \
  echo -n "$vm "; \
  virsh dumpxml $vm| grep -oP "52:54:[\da-f:]+" ; 
done > vm_mac.list

# vm ip list
arp -i virbr0 | grep '52:' | while read addr ; do \
  ip=$(echo $addr | awk '{print $1}'); \
  mac=$(echo $addr | awk '{print $3}'); \
  vm=$(grep "$mac" vm_mac.list | awk '{print $1}'); \
  echo "$vm $ip $mac"; \
done | sort

ตัวอย่างผลลัพธ์:

vm66 192.168.191.112 52:54:00:ab:e8:cb
vm67 192.168.191.207 52:54:00:88:66:e7
vm67 192.168.191.241 52:54:00:88:66:e7
vm68 192.168.191.197 52:54:00:c5:e1:30
vm69 192.168.191.254 52:54:00:b6:f6:0f
vm70 192.168.191.232 52:54:00:08:7f:49
vm71 192.168.191.113 52:54:00:e7:6f:2b

0

ตามการตอบสนอง @daff:

for vm in $(virsh list | grep running | awk '{print $2}'); do echo "$vm: " && virsh dumpxml $vm | grep  "vnet" | sed 's/[^'']*''\([^'']*\)''[^'']*/\t\1/g'; done

ตัวอย่างผลลัพธ์:

vm1:
    vnet0
vm2:
    vnet1
vm3:
    vnet2
vm4:
    vnet3
    vnet4
vm5:
    vnet5

0
for vm in $(virsh list  --state-running --name); do \
echo $vm; \
virsh domifaddr $vm; \
done

ตัวอย่างผลลัพธ์:

client1

Nombre     dirección MAC       Protocol     Address
------------------------------------------------------------------------------

vnet2      52:54:00:2c:7a:f0    ipv4         192.168.122.63/24

ฉันส่งการแก้ไขสำหรับใบเสนอราคาโค้ดของคุณแล้ว แต่คุณควรมีคำอธิบายพร้อมกับรหัสของคุณ
Cory Knutson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.