क्या यह निर्धारित करने का एक तरीका है कि kvm होस्ट में वर्चुअल मशीन किस वर्चुअल इंटरफ़ेस से संबंधित है?


10

मैं qemu / kvm whith ब्रिजिंग नेटवर्किंग का उपयोग कर रहा हूं। मेजबान मशीन में आईपी के बिना कई "vnetX" नेटवर्क इंटरफेस हैं। मुझे पता है कि कौन सा vnetX एक आभासी मशीन के हैं के लिए एक रास्ता खोज रहा हूँ।

मैंने वर्चुअल मशीन (या एक्सएमएल जो उन्हें परिभाषित करता है) पर एमएसीएस के साथ इन इंटरफेस पर मैक एड्रेस वैल्यू से मिलान करने की कोशिश की, लेकिन यह मेल नहीं खाता।

वहाँ 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 dumpxmlVM के बारे में गतिशील गुण दिखाने के लिए उपयोग करते हैं, जो /etc/libvirt/qemu/foo.xml में VM की स्थिर XML परिभाषा में उपलब्ध नहीं हैं। कौन सा vnetXइंटरफ़ेस से जुड़ा हुआ है जो करने के लिए वीएम इस तरह के एक गतिशील संपत्ति है। वही VM के मैक पते के लिए जाता है।


4
मैं इस मामूली संशोधन का उपयोग यह for vm in $(virsh list | grep running | awk '{print $2}'); do echo -n "$vm:"; virsh dumpxml $vm| grep -oP "vnet\d+" ; done
बताने के लिए करता हूं

यदि आप एक oVirt 'नोड' की जांच कर रहे हैं, तो आप उसी कमांड का उपयोग कर सकते हैं, लेकिन वायर को 'केवल पढ़ने के लिए' मोड में चलाया जाना चाहिए। बस प्रत्येक वायरल कॉल में -r पैरामीटर जोड़ें।
करलासियो

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-kvm कमांड लाइन में क्या उपयोग किया जाता है, इसलिए यदि आप ps -ef |grep qemu|grep net1मेरे उदाहरण से चलते हैं, तो आप इस इंटरफ़ेस के लिए उपयोग किए जाने वाले वास्तविक कमांड सिंटैक्स देखेंगे।


2

ऊपर दिए गए समाधानों में से हर एक मानता है कि VMs का प्रबंधन libvirt द्वारा किया जा रहा है। इसके बिना QEMU VM को चलाना काफी संभव है, जिस स्थिति में आप वायर का उपयोग नहीं कर सकते हैं या उत्तर खोजने के लिए XML को देख सकते हैं।

"कच्चे" कमांड लाइन से QEMU VM को चलाने के मामले में:

  1. tcpdump -i tap0 -f 'icmp' (विकल्प जो भी नल इंटरफ़ेस आप में रुचि रखते हैं)

  2. प्रत्येक उम्मीदवार VM को तब तक पिंग करें जब तक आपको ट्रेस में पैकेट दिखाई न दें। ICMP पैकेट दिखाई देने पर आप जिस इंटरफ़ेस को ट्रेस कर रहे हैं, वह वही है जिसे आप खोज रहे हैं!

इसके विपरीत आप एक विशेष वीएम के लिए पिंग शुरू कर सकते हैं और फिर प्रत्येक टैप इंटरफ़ेस को तब तक चालू कर सकते हैं जब तक कि एक "लाइट अप" न हो। निर्भर करता है कि क्या आप वीएम को खोजने में रुचि रखते हैं जो टैप इंटरफ़ेस, या वीएम से मेल खाने वाले टैप इंटरफ़ेस से मेल खाता है।


0

vnetXइंटरफेस का मैक पता मेजबान का है, मेहमान का नहीं। brctl showmacs br0पुल द्वारा पता लगाए गए एमएसीएस को दिखाएगा, लेकिन फिर आपको इंटरफेस की सूची के साथ पोर्ट संख्या को पार करना होगा brctl show


0

मैच आईपी पते Arp कैश से 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

@ प्रतिक्रिया के आधार पर:

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

मैंने आपके कोड कोट्स के लिए एक संपादन प्रस्तुत किया है, लेकिन आपको अपने कोड के साथ एक स्पष्टीकरण भी शामिल करना चाहिए।
कोरी नॉटसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.