QEMU는 호스트 네트워크를 어떻게 ping합니까?

QEMU는 호스트 네트워크를 어떻게 ping합니까?

게스트 네트워크에서 호스트 네트워크로 ping을 시도했지만 성공하지 못했습니다.

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

임의의 컴퓨터에 ping을 시도합니다.

$ ping 10.0.2.21
Destination Host Unreachable

게스트에서는 호스트 10.0.2.2(DHCP 서버)에만 ping을 보낼 수 있습니다.

답변1

QEMU는 SLIRP 백엔드에서 ICMP를 지원합니다. 커널의 사용자를 위해 소위 ping 소켓(PF_INET, SOCK_DGRAM, PROT_ICMP)을 허용해야 합니다.

매우 간단하다

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

당신은 또한 볼 수 있습니다http://lwn.net/Articles/422330/

답변2

QEMU 위키에 따르면 QEMU는 SLIRP 백엔드에서 ICMP를 지원하지 않습니다.

사용자 네트워크(SLIRP)

이는 기본 웹 백엔드이며 일반적으로 사용하기 가장 쉽습니다. 루트/관리자 권한이 필요하지 않습니다. 다음과 같은 제한사항이 있습니다.

  • 오버헤드가 높아서 성능이 좋지 않음
  • ICMP 트래픽이 작동하지 않습니다(따라서 게스트 내부에서 ping을 사용할 수 없습니다).
  • 호스트 또는 외부 네트워크에서 게스트에 직접 액세스할 수 없음

ICMP가 작동하려면 TAP, VDE 또는 소켓을 사용해야 합니다.

추가 정보: QEMU 위키 - 네트워크게다가Wikibooks QEMU 네트워크 섹션

또한 권장되는 사항:VLAN 작업에 대한 고급 가이드

답변3

내가 찾은 가장 간단하고 효과적인 방법은 다음과 같습니다.이것.

요약하면 호스트 시스템에서 다음을 수행합니다.

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

저자(그리고 나 자신)는 이를 사용하여 wlan0Linux 커널에서 지원하지 않는 장치에 대한 브리징 문제를 처리합니다. 하지만 유선 연결로도 잘 작동합니다. arp구성 에서 wlan0로 변경하면 됩니다 eth0.

DHCP게스트 IP 주소는 작동하지 않으므로 직접 설정해야 합니다 .

이제 호스트에 ping을 보낼 수 있습니다.

답변4

아래 두 가지 답변을 직접 결합하여 이를 달성했습니다.

이를 결합하여 "호스트 IP"를 찾은 ip route후 다음을 수행했습니다.

ping 10.0.2.2

효과가 있었습니다.

시험용이 QEMU + Buildroot 설정Ubuntu 19.04 호스트에서.

관련 정보