libvirt / kvm - как получить IP-адрес виртуальных машин в мостовой сети?

Если вы уже используете sed, вы можете использовать 1 для сопоставления первой строки и $ для сопоставления с последней строкой (см. ответ Скотта ). Если вы уже используете awk, вы можете использовать блок BEGIN для запуска кода перед первой строкой и блок END для запуска кода после последней строки (см. Michael Ответ Дарранта ).

Если все, что вам нужно сделать, это добавить верхний и нижний колонтитулы, просто используйте echo и cat .

echo START
cat
echo END

В конвейере для выполнения нескольких команд используйте {…} , чтобы сообщить синтаксическому анализатору, что это одна составная команда.

content-generator |
{ echo START; cat; echo END; } |
postprocessor

2
19.02.2018, 00:01
3 ответа

Esto puede funcionar para un invitado de VM llamado "pollyanna" si el host se ha comunicado con la VM recientemente, de modo que su dirección IP esté en el caché ARP:

arp -na | awk -v mac=$(virsh domiflist pollyanna | awk '$2=="bridge"{print $NF}') '$0 ~ " at " mac {gsub("[()]", "", $2); print $2}'

Vamos a dividir esto:

# Get the MAC for a VM guest called pollyanna
vmac=$(virsh domiflist pollyanna | awk '$2=="bridge"{print $NF}')

# List the ARP cache
arp -na |

# Match the MAC on a line like "? (192.168.1.12) at 12:34:56:78:9a:bc [ether] on ethX"
# and return the IP address. The gsub() function strips the "()" characters
awk -v mac="$vmac" '$0 ~ " at " mac {gsub("[()]", "", $2); print $2}'

De lo contrario, es posible que deba escanear todo el rango plausible de direcciones IP para forzar la dirección IP en el caché ARP y luego volver a intentar la búsqueda:

nmap -sn '192.168.1.*'    # Ugh. Every address on the 192.168.1.0/24 network
5
27.01.2020, 21:53

En términos generales, cuando se utiliza un puente, la máquina virtual no está efectivamente bajo el control integrado de libvirt -en dnsmasq, sino que obtiene su IP del DHCP en el puente -a la red o desde la configuración interna. Esto significa que libvirt no tiene forma de establecer esa IP o de obtenerla.

Puede hacer lo que @roaima describió anteriormente como una solución alternativa, monitorear su DHCP para las asignaciones de IP a la MAC de la VM o instalar un agente dentro de la VM que le informará los detalles de la configuración interna de la VM (como lo hace ovirt -guest -agent ). La regla general aquí es que, con una red puenteada, la VM se comporta y generalmente se administra como cualquier otra máquina física en esa red

1
27.01.2020, 21:53
arp -na | grep $(virsh domiflist VM01 | tail -n +3 | awk '{print$5}' | sed '/^$/d') | cut -c 4-17

Это работает хорошо для меня.

Чтобы сделать кеш в arp,

IP=`nmap -sn '192.168.200.*' | grep 'Nmap scan' | awk '{print$5}'` ; for i in $IP ; do ping $i -c 1 ; done
1
27.01.2020, 21:53

Теги

Похожие вопросы