Có cách nào để xác định giao diện ảo nào thuộc về máy ảo trong máy chủ kvm không?


10

Tôi đang sử dụng qemu / kvm với mạng cầu nối. Trong máy chủ có một số giao diện mạng "vnetX" không có IP. Tôi đang tìm cách để biết vnetX nào thuộc về máy ảo.

Tôi đã cố khớp các giá trị Địa chỉ MAC trên các giao diện này với các MAC trên các máy ảo (hoặc XML định nghĩa chúng), nhưng không khớp.

Có chương trình brctl hiển thị các giao diện vnet thuộc về một cây cầu, nhưng đây không phải là thông tin hữu ích.

Có cách nào để biết mối quan hệ đó? Cám ơn!!

Câu trả lời:


14

Làm thế nào về điều này (ví dụ cho vnet13):

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

Ở đây chúng tôi sử dụng virsh dumpxmlđể hiển thị các thuộc tính động về VM, không có sẵn trong định nghĩa XML tĩnh của VM trong /etc/libvirt/qemu/foo.xml. vnetXGiao diện nào được gắn vào mà VM là một thuộc tính động như vậy. Các địa chỉ MAC của VM cũng vậy.


4
Tôi sử dụng sửa đổi nhỏ này để liệt kê vm có giao diện nào:for vm in $(virsh list | grep running | awk '{print $2}'); do echo -n "$vm:"; virsh dumpxml $vm| grep -oP "vnet\d+" ; done
zje

Nếu bạn đang điều tra một nút 'oVirt', bạn có thể sử dụng cùng một lệnh nhưng virsh nên được chạy ở chế độ 'chỉ đọc'. Chỉ cần thêm tham số -r cho mỗi cuộc gọi virsh.
karlacio

6

Hãy thử virsh dumpxml $domain, bạn sẽ thấy một cái gì đó như:

  <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 namelà những gì được sử dụng trong dòng lệnh qemu-kvm, vì vậy nếu bạn chạy ps -ef |grep qemu|grep net1từ ví dụ của tôi, bạn sẽ thấy cú pháp lệnh thực tế được sử dụng cho giao diện này.


2

Mỗi một trong những giải pháp được đưa ra ở trên đều cho rằng các máy ảo đang được quản lý bởi libvirt. Hoàn toàn có thể chạy máy ảo QEMU mà không cần điều đó, trong trường hợp đó bạn không thể sử dụng virsh hoặc nhìn vào XML để tìm câu trả lời.

Trong trường hợp chạy máy ảo QEMU từ dòng lệnh "thô":

  1. tcpdump -i tap0 -f 'icmp' (thay thế bất kỳ giao diện nhấn nào bạn quan tâm)

  2. Ping từng VM ứng cử viên cho đến khi bạn thấy các gói trong dấu vết. Giao diện bạn đang theo dõi khi các gói ICMP xuất hiện là giao diện bạn đang tìm kiếm!

Ngược lại, bạn có thể bắt đầu ping đến một VM cụ thể và sau đó lần lượt bật từng giao diện nhấn cho đến khi một "đèn sáng". Tùy thuộc vào việc bạn muốn tìm VM phù hợp với giao diện nhấn hay giao diện nhấn phù hợp với VM.


0

Địa chỉ MAC của các vnetXgiao diện thuộc về máy chủ, không phải của khách. brctl showmacs br0sẽ hiển thị các MAC được phát hiện bởi cây cầu, nhưng sau đó bạn cần tham chiếu chéo số cổng với danh sách các giao diện từ đó brctl show.


0

Khớp Địa chỉ IP từ Arp cache với 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

Đầu ra mẫu:

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

Dựa trên phản hồi @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

Ví dụ đầu ra:

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

Ví dụ đầu ra:

client1

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

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

Tôi đã gửi một chỉnh sửa cho trích dẫn mã của bạn, nhưng bạn nên bao gồm một lời giải thích cùng với mã của bạn.
Cory Knutson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.