QEMU как пинговать хост-сеть?

10

Я пытаюсь пропинговать от гостя до моей хост-сети без успеха.

qemu-system-x86_64 -hda debian_squeeze_amd64_standard.qcow2 -netdev user,id=user.0 -device e1000,netdev=user.0

Я пытаюсь пинговать случайную машину:

$ ping 10.0.2.21
Destination Host Unreachable

В гостевой я могу только пинговать хост 10.0.2.2 (DHCP-сервер).

MaikoID
источник
Подключите его к устройству с ответвлениями и подключите устройство с ответвлениями и ваше сетевое устройство к мосту
Ульрих Дангел

Ответы:

11

QEMU поддерживает ICMP на сервере SLIRP. Необходимо разрешить так называемый сокет ping (PF_INET, SOCK_DGRAM, PROT_ICMP) для пользователей в ядре.

Это просто

sysctl -w net.ipv4.ping_group_range='0 2147483647'

Смотрите также http://lwn.net/Articles/422330/

Роман
источник
6

Из вики QEMU QEMU не поддерживает ICMP на бэкэнде SLIRP.

Сеть пользователя (SLIRP)

Это сетевой бэкэнд по умолчанию и, как правило, самый простой в использовании. Он не требует прав root / администратора. Он имеет следующие ограничения:

  • накладных расходов много, поэтому производительность оставляет желать лучшего
  • ICMP-трафик не работает (поэтому вы не можете использовать ping в гостевой системе)
  • гость не доступен напрямую с хоста или внешней сети

Для работы ICMP вам понадобится TAP, VDE или Socket.

Дополнительная информация: QEMU Wiki - Сеть и АОТ в сетевом разделе Wikibooks QEMU

Также рекомендуется: расширенное руководство по работе с VLAN

Виктор Аурелио
источник
1
Здесь также есть хороший обзор сетевых возможностей: en.wikibooks.org/wiki/QEMU/Networking , а также подробное руководство по работе с VLAN
slm
@Slm Ty. добавил свои ссылки в ответ;)
Виктор Аурелио
4

Самый простой и более эффективный способ, который я узнал для меня, заключался в следующем .

В итоге на хосте:

tunctl -u <username>

echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/conf/wlan0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/tap0/proxy_arp

ip link set tap0 up
route add -host 192.168.0.20 dev tap0   <-- to be changed by you.

и для гостя, просто запустите его с:

kvm -hda ~/fedora.qcow2 -net nic -net tap,ifname=tap0,script=no -usb

или

qemu -hda ~/fedora.qcow2 -net nic -net tap,ifname=tap0,script=no -usb 

Вам просто нужно настроить tapустройство, принадлежащее вашему пользователю, включить arp proxyingи настроить routeмежду вашим хостом и гостем.

Автор (и я) использовали это для решения проблемы подключения к wlan0устройству, которое не поддерживается ядром Linux. Но это работает также и с проводным соединением. В arpконфигурации просто измените wlan0на eth0.

Гостевой IP-адрес должен быть установлен вами, так как DHCPне работает.

И вы уже можете пинговать свой хост.

Луис
источник
0

Я только что достиг этого, напрямую объединив два следующих ответа:

Объединив их, я нашел «IP-адрес хоста» ip routeи затем сделал:

ping 10.0.2.2

и это сработало.

Протестировано с этой установкой QEMU + Buildroot на хосте Ubuntu 19.04.

Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功
источник