天天看點

QEMU--使用者模式網絡

https://en.wikibooks.org/wiki/QEMU/Networking

如果未指定網絡選項,QEMU 将預設模拟一個 Intel e1000 PCI 網卡,該網卡具有橋接到主機網絡的使用者模式網絡堆棧。 以下三個指令行是等效的:

qemu -m 256 -hda disk.img &

qemu -m 256 -hda disk.img -net nic -net user & #使用 -net user 必須同 -net nic配合

qemu-system-i386 -m 256 -hda disk.img -netdev user,id=network0 -device e1000,netdev=network0,mac=52:54:00:12:34:56 &

要在 Linux 核心中使用此網絡設定,您必須在編譯時設定配置選項 CONFIG_E1000=y。(?)

-net 選項在較新的 QEMU 版本中被 -netdev 取代。

GuestOS将看到一張E1000 NIC網卡,并且虛拟 DHCP 伺服器在ip 10.0.2.2 上,并将配置設定一個從 10.0.2.15 開始的位址給GuestOS。 虛拟 DNS 伺服器在ip 10.0.2.3 上,虛拟 SAMBA 檔案伺服器在 10.0.2.4 上(如果存在),進而允許您通過 SAMBA 檔案共享通路主機host上的檔案。啟用内置的 TFTP 伺服器時,TFTP 伺服器也在10.0.2.2 。

QEMU--使用者模式網絡

使用者模式網絡非常适合允許通路網絡資源,包括 Internet。 特别是,它允許從guest到主機的 ssh流量。 但是,預設情況下,它充當防火牆,不允許任何傳入流量。 它也不支援 TCP 和 UDP 以外的協定 - 例如,ping 和其他 ICMP 程式将不起作用。

但是host機無法直接通路到guest機,因為host上沒有新增對應10.0.2.2的網卡,隻能通過端口轉發來間接通路到guest機。是以,如果您同時啟動多個虛拟機,則虛拟機将無法在外部網絡上直接看到,虛拟機也将無法互相通信。

In order to check that the user mode network is working, you can ping the address 10.0.2.2 and verify that you got an address in the range 10.0.2.x from the QEMU virtual DHCP server.

為了檢查使用者模式網絡是否正常工作,您可以 ping 10.0.2.2 并驗證您是否從 QEMU 虛拟 DHCP 伺服器獲得了 10.0.2.x 範圍内的位址。

QEMU--使用者模式網絡
QEMU--使用者模式網絡

 You can use a DHCP client to automatically configure the network in the QEMU VM

您可以使用 DHCP 用戶端在 QEMU VM 中自動配置網絡。

如下可以看到,guestOS中能通路到外網,但是,無法進行ping操作,因為ping reply資料包被攔截了。

QEMU--使用者模式網絡

但如果你在 Linux >= 3.0 上使用 QEMU,它可以使用非特權 ICMP ping 套接字來允許 ping 到 Internet。 host管理者必須設定 ping_group_range 才能授予對這些套接字的通路權限。 例如允許 ping GID 100(通常是users組):

echo 100 100 > /proc/sys/net/ipv4/ping_group_range

因為前面是使用sudo指令來啟動qemu的,是以是root使用者在執行qemu程序,由下圖也可知:

QEMU--使用者模式網絡

 root使用者在id為0的組。

QEMU--使用者模式網絡

則執行如下指令

echo 0 0 > /proc/sys/net/ipv4/ping_group_range

QEMU--使用者模式網絡

 則guest機可以ping到外網了。

QEMU--使用者模式網絡

 host ip為192.168.150.158,從guest ssh連接配接到host(但是沒法host主動連接配接guest),如下:

QEMU--使用者模式網絡

 檢視路由表,預設網關是10.0.2.2,即虛拟DHCP伺服器。

QEMU--使用者模式網絡

原理應該是有點類似于VMware NAT模式。(還是有挺多差別,比如虛拟機直接無法直接通信)

在預設情況下,使用者模式的guestOS能夠通過10.0.2.2這個IP通路到host。任何運作于host上的服務端程式都可以通過這個位址被guest通路到,比如說我們可以通過這個IP通路到host上的SSH伺服器或SMB伺服器。是以在這種情況下,guestOS能夠挂載host通過SMB or NFS暴露出來的目錄,也可以通路host上的HTTP伺服器等。 預設情況下host無法通路guestOS上的服務。

如下,host監聽6666端口

QEMU--使用者模式網絡

guestOS通過10.0.2.2來連接配接host的6666端口。

QEMU--使用者模式網絡

host機成功接收到消息。

QEMU--使用者模式網絡