QEMU วิธีการ ping เครือข่ายโฮสต์


10

ฉันพยายาม 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

ในแขกฉันสามารถ ping โฮสต์ 10.0.2.2 (เซิร์ฟเวอร์ DHCP) เท่านั้น


แนบไปกับอุปกรณ์ประปาและแนบอุปกรณ์ประปาและอุปกรณ์เครือข่ายของคุณไปที่สะพาน
Ulrich Dangel

คำตอบ:


11

QEMU รองรับ ICMP ใน SLIRP backend จำเป็นต้องอนุญาตให้เรียกใช้ซ็อกเก็ต 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)

นี่เป็นแบ็กเอนด์เครือข่ายเริ่มต้นและโดยทั่วไปจะใช้งานง่ายที่สุด ไม่ต้องการสิทธิ์ผู้ดูแลระบบ / ผู้ดูแลระบบ มันมีข้อ จำกัด ดังต่อไปนี้:

  • มีค่าใช้จ่ายจำนวนมากดังนั้นประสิทธิภาพจึงไม่ดี
  • การรับส่งข้อมูล ICMP ไม่ทำงาน (ดังนั้นคุณไม่สามารถใช้ ping ภายในแขกได้)
  • แขกไม่สามารถเข้าถึงได้โดยตรงจากโฮสต์หรือเครือข่ายภายนอก

สำหรับการทำงานของ ICMP คุณจะต้องใช้ TAP, VDE หรือ Socket

ข้อมูลเพิ่มเติม: QEMU Wiki - ระบบเครือข่ายและส่วนอื่น ๆ ของWikibooks QEMU networking

แนะนำด้วย: คู่มือขั้นสูงสำหรับการจัดการกับ VLANs


1
มีภาพรวมที่ดีเกี่ยวกับตัวเลือกเครือข่ายที่นี่เช่นกัน: en.wikibooks.org/wiki/QEMU/Networkingและยังเป็นคำแนะนำขั้นสูงสำหรับการจัดการกับ VLANs
slm

@slm Ty เพิ่มลิงก์ของคุณในคำตอบ;)
Victor Aurélio

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การกำหนดค่าเพียงแค่เปลี่ยนไปwlan0eth0

คุณจะต้องตั้งค่าที่อยู่ IP ของผู้เยี่ยมชมเนื่องจากDHCPไม่ทำงาน

และคุณสามารถ ping โฮสต์ของคุณได้แล้ว


0

ฉันเพิ่งจะได้รับสิ่งนี้โดยการรวมสองคำตอบต่อไปนี้ของฉันโดยตรง:

เมื่อรวมเข้าด้วยกันฉันพบ "โฮสต์ IP" ด้วยip routeแล้ว:

ping 10.0.2.2

และมันก็ใช้งานได้

ทดสอบกับการตั้งค่า QEMU + Buildroot นี้บนโฮสต์ Ubuntu 19.04

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.