Это зависит от того, что делает DHCP?
Большинство домашних маршрутизаторов использует dnsmasq, и можно использовать это в качестве локального сервера DNS. Просто необходимо установить dnsmasq для возврата себя как сервер DNS. Затем, необходимо удостовериться, что ПК широковещательно передают имя хоста во время запроса DHCP.
Затем вуаля, необходимо смочь разрешить все локальные машины через сервер DNS/DHCP.
Можно работать arp -n
видеть что IP Ваша погрузка виртуальной машины. Таким образом Вы не должны входить в гостя vm и тип ifconfig
.
Блог ниже имеет больше деталей и включает сценарий жемчуга, который автоматизирует нахождение адреса виртуальной машины.
(В то время как Вы кажетесь слишком усовершенствованными для такого простого ответа),
Будет
$ ifconfig
работа?
Если у Вас есть консольный доступ к VM, затем просто выполненному ifconfig -a
на госте. В то время как Вы там, проверьте, чтобы удостовериться, что у гостя действительно есть сетевое соединение и что sshd
работает.
Если у Вас нет консольного доступа, то возможности являются IP-адресом, был присвоен DHCP. Ищите другую машину, которая также получает присвоение DHCP, возможно, хост-сервер, и затем добавьте 1 к адресу и попробуйте его. На самом деле попробуйте следующие 5 или 6 адресов. Если это не работает, то Вы или имеете большую активную сеть и должны будете попробовать каждый IP-адрес в подсети, или существует проблема сети нижнего уровня как никакой маршрут для хостинга или два хоста с тем же MAC-адресом. Или возможно Вы просто не добрались sshd
выполнение.
Используя консоль самый легкий способ решить эту проблему.
Возможно соединиться через встроенный VNC с virt-manager
, и Вы делаете вход в систему tty, находите IP-адрес с ifconfig eth0
. Обычно eth0, если Вы не указали иначе.
Попробуйте следующее:
virsh net-list
virsh net-dhcp-leases <net-name> <--- net-name from above command
Вы также можете использовать следующую форму, если знаете MAC-адрес:
virsh net-dhcp-leases <net-name> --mac <mac-address>
MAC-адрес можно найти из команды dumpxml. См. Есть ли способ определить, какой виртуальный интерфейс принадлежит виртуальной машине на узле KVM?
Если у вас есть QEMU (эмулятор виртуальной машины), нажмите кнопку «i» и проверьте сетевую карту, связанную с сетью «Br0». Запишите MAC-адрес сетевой карты. Теперь войдите в свою виртуальную машину -> Открыть терминал -> введите в терминале команду "ifconfig" -> запишите IP-адрес, связанный с MAC-адресом, который вы указали ранее.
Вы можете войти в свою виртуальную машину с помощью Putty или любого ssh-клиента, используя IP-адрес, который вы указали на последнем шаге.
список для vms:
virsh list
получить MAC vm из имени
virsh domiflist debian8
выполнить сканирование подсети vm с помощью grep (MAC должен быть заглавным)
nmap -sP 10.0.0.0/24 | grep 52:54:00:FD:1F:92 -B 3
результат
Nmap scan report for 10.0.0.173
Host is up (0.0012s latency).
MAC Address: 52:54:00:FD:1F:92 (QEMU Virtual NIC)
Чтобы увидеть IP-адрес виртуальной машины, просто выполните:
$ arp -n
Если arp не установлен в вашей системе, просто установите пакет net-tools
.
Tengo mis invitados KVM en la interfaz br0, así que creo que es un poco diferente, pero aquí están mis dos scripts que hice.
Nota para usar ARP, primero debe tener el MAC en su tabla Arp. Por lo tanto, es mejor usar fping para hacer un ping rápido de toda la red (, toma como 2 segundos ). Esto asegura que su caché Arp esté actualizada.
apt-get install fping
yum install fping
Encuentre una sola IP de invitado a través de:
cat << 'EOF' > ~/findip.sh
#!/bin/bash
#FreeSoftwareServers.com
echo "Finding All Active IP's in Network via single Ping"
sleep 2s
fping -a -g 192.168.1.0/24
#nmap -sn 192.168.1.0/24
echo "Please Enter the Exact Name of the VM Guest:"
read guestname
arp -na | awk -v mac=$(virsh domiflist $guestname | awk '$2=="bridge"{print $NF}') '$0 ~ " at " mac {gsub("[()]", "", $2); print $2}'
EOF
chmod +x ~/findip.sh
sudo sh -c 'echo "alias findguestip=~/findip.sh" >> ~/.bashrc'
source ~/.bashrc
findguestip
Encuentre todas las IP de invitados a través de:
cat << 'EOF' > ~/findallips.sh
#!/bin/bash
#FreeSoftwareServers.com
echo "Finding All Active IP's in Network via single Ping"
sleep 2s
fping -a -g 192.168.1.0/24
#nmap -sn 192.168.1.0/24
domainlog=/tmp/domain.log
virsh list --all | grep running | cut -c 8- >> "$domainlog"
sed -i 's/running*//g' "$domainlog"
readarray domain < "$domainlog"
for i in "${domain[@]}"
do
ip="$(arp -na | awk -v mac=$(virsh domiflist $i | awk '$2=="bridge"{print $NF}') '$0 ~ " at " mac {gsub("[()]", "", $2); print $2}')"
echo "Hostname : $i IP : $ip"
done
rm "$domainlog"
EOF
chmod +x ~/findallips.sh
sudo sh -c 'echo "alias findallips=~/findallips.sh" >> ~/.bashrc'
source ~/.bashrc
findallips
sudo nmap -sn 192.168.5.0/24 | awk '/Nmap scan report/{printf $5;printf " ";getline;getline;print $3;}' | fgrep -if <(virsh list --name | grep. | while read n; do virsh domiflist $n; done | grep --only-matching..:..:..:..:..:..)
Сканировать подсеть. Проанализируйте вывод с помощью awk, чтобы получить такие строки, как <IP> <MAC>
. Затем выполните поиск в них, используя список MAC-адресов виртуальных машин.
Список MAC-адресов получается путем перечисления всех виртуальных машин (, а также удаления пустых строк ), затем выполнения virsh domiflist
для каждой из них, а затем поиска шаблона, похожего на MAC-адрес.
Источники:
Я написал get-vm-ip
скрипт (, доступный по адресу https://github.com/earlruby/create-vm/blob/master/get-vm-ip), который использует его для получения IP:
HOSTNAME=[your vm name]
MAC=$(virsh domiflist $HOSTNAME | awk '{ print $5 }' | tail -2 | head -1)
arp -a | grep $MAC | awk '{ print $2 }' | sed 's/[()]//g'
Хорошее решение, использующее гостевой агент qemu -.
a )Настройте виртуальную машину для использования гостевого агента qemu -На хосте :добавьте с помощью менеджера virt -канал "qemu -guest -agent" Это действительно просто. В моем случае машина называется «Debian», и xml после модификации будет похож на этот.
<channel type='unix'>
<source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-3-debian/org.qemu.guest_agent.0'/>
<target type='virtio' name='org.qemu.guest_agent.0' state='connected'/>
<alias name='channel1'/>
<address type='virtio-serial' controller='0' bus='0' port='2'/>
</channel>
b )В гостевой системе установите qemu -гостевой -агент и убедитесь, что он запущен
apt -y install qemu-guest-agent
systemctl status qemu-guest-agent.service
● qemu-guest-agent.service - LSB: QEMU Guest Agent startup script
Loaded: loaded (/etc/init.d/qemu-guest-agent; generated; vendor preset: enabled)
Active: active (running) since Sat 2019-01-26 09:35:57 CET; 3s ago
Docs: man:systemd-sysv-generator(8)
Process: 1624 ExecStop=/etc/init.d/qemu-guest-agent stop (code=exited, status=0/SUCCESS)
Process: 1630 ExecStart=/etc/init.d/qemu-guest-agent start (code=exited, status=0/SUCCESS)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/qemu-guest-agent.service
└─1638 /usr/sbin/qemu-ga --daemonize -m virtio-serial -p /dev/virtio-ports/org.qemu.guest_agent.0
c )Наконец, этот славный пайп вернет ip, вместо NAMEOFVMNIC поставьте eth0,enp1s0 и т.д..
virsh domifaddr --domain yourvmname --source agent|grep -w NAMEOFVMNIC|egrep -o '([[:digit:]]{1,3}\.){3}[[:digit:]]{1,3}'
Получите список доменов поvirsh list --all
virsh # list --all
2 webserver_01 running
Получите список интерфейсов вашего домена по идентификатору или имени домена, используя virsh domiflist yourDomainId
, и вы увидите MAC-АДРЕС интерфейса домена.
virsh # domiflist 2
bridge br0 virtio 52:54:00:42:be:96
С помощью nmap
просканируйте вашу локальную сеть по nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B 2
, вы получите IP-АДРЕС.
[root@kvm-master ~]# nmap -sn 192.168.1.0/24|grep -i '52:54:00:42:be:96' -B2
Nmap scan report for bogon (192.168.1.210)
Host is up (0.00013s latency).
MAC Address: 52:54:00:42:BE:96 (QEMU Virtual NIC)
Я думаю, это старый вопрос, но текущие версии virsh
значительно упрощают этот вопрос, если вы используете частную сеть с естественным доступом или мостом. У меня есть виртуальная машина с именем steak
в (маршрутизируемой )частной сети (AKA "NAT" ). Всего две команды, чтобы узнать, какой IP был назначен встроенным -механизмом :
$ sudo virsh list
Id Name State
----------------------------------------------------
21 steak running
$ sudo virsh domifaddr steak
Name MAC address Protocol Address
-------------------------------------------------------------------------------
vnet0 76:0c:28:ab:0e:ee ipv4 10.14.1.1/24
У меня также есть другая виртуальная машина (eggs
), которая соединена мостом с обычной сетью (, подключенной к мостовому устройству на хосте гипервизора ). Libvirt не присваивает ему адрес; он получает адрес от DHCP-сервера моей сети, который в моем случае также обновляет динамический DNS. Это одна из вероятных возможностей, когда нет выходных данных domifadd
для этой виртуальной машины. Таким образом, вам в основном нужно найти адрес, как и любой другой машине -, найти его в таблице arp, вероятно, проще всего --, что означает ip neighbour
сейчас, поскольку arp
устарел и больше не присутствует в некоторых дистрибутивах.. К счастью для тех из нас, кто не пишет вещи с дополнительными гласными, вы также можете использовать более короткие варианты, такие как ip neigh
иip n
(илиip neighbor
). ; )Ниже я использую domiflist
, чтобы найти MAC-адрес (, обратите внимание, что он подключен к br0
в столбце «источник» ), а затем нахожу его в таблице arp.
$ sudo virsh domifaddr eggs
Name MAC address Protocol Address
-------------------------------------------------------------------------------
$ sudo virsh domiflist eggs
Interface Type Source Model MAC
-------------------------------------------------------
vnet0 bridge br0 virtio 52:54:00:2c:ac:ee
$ ip neigh | grep -i 52:54:00:2c:ac:ee
192.168.0.226 dev br0 lladdr 52:54:00:2c:ac:ee REACHABLE
$ host eggs
eggs.home.domain.com has address 192.168.0.226