联网
QEMU 提供了一个非常灵活的网络基础结构,允许您配置各种模式(例如e.,g. ,)和访客和主机之间的网络选项。1 通常,您将创建自己的虚拟局域网 (VLAN)。2Shared
Bridged
其它相关教程
linux程序设计与安全开发
恶意软件开发
二进制漏洞
windows网络安全防火墙与虚拟网卡(更新完成)
windows文件过滤(更新完成)
USB过滤(更新完成)
游戏安全(更新中)
ios逆向
windbg
还有很多免费教程(限学员)
更多详细内容添加作者微信
QEMU中的网络可能看起来很可怕,但别担心,当您学习基础知识时,这样做相当容易。大多数“复杂”的东西都会从你身上抽象出来。
在深入研究操作方法之前,让我们回顾一下 QEMU 中的一些网络基础知识。
QEMU 中的网络可以分为两部分 和 ,并且有四种不同的网络连接模式可用。3front end
back end
前端
这部分表示使用选项(例如 、 )提供给来宾的虚拟网络设备。有关更多信息,请参阅网络设备。-device
Emulated NIC
virtio-net
用法(提醒):
$ qemu-system-x86_64 ... -device rtl8139,mac=52:54:00:12:34:56,netdev=mynetdev ...
请注意上面的选项。它指定前端设备要连接的后端网络标识符。netdev=mynetdev
后端
另一方面,后端表示与[前端]模拟网卡交互的网络后端(例如,将数据包放到主机的网络上)。您还可以考虑这部分是否作为侦听前端的那部分处理网络数据包(例如)并与主机通信。它就像模拟器的“代理服务器”!4TCP/IP
有关此主题的更多信息,请参阅有关网络基础知识的官方 QEMU 文档。
为了配置后端,我们使用后跟网络后端的 TYPE 及其参数的选项。-netdev
定义后端:
$ qemu-system-x86_64 ... -netdev type=[TYPE],id=[NAME],...
正如您可能已经猜到的那样,这些选项是后端网络标识符。前端设备将使用它连接到后端。定义要使用的网络的 TYPE。现在,市面上有许多后端 TYPE,但是我只介绍一些最常用的类型:和 .5id=[NAME]
id
type=[TYPE]
user
tap
user
用户模式网络是默认的网络后端,也是最容易使用的后端。它是使用“SLIRP”实现的,SLIRP在QEMU中提供完整的TCP/IP堆栈,并使用该堆栈来实现虚拟NAT'd网络。6
无耻插件:有关 NAT 的更多 [ELI5] 信息
大多数时候,只需使用.默认情况下,它处于启用状态,您无需进行大量配置即可使用它。7 但是,根据 QEMU 官方文件,它有以下限制:user
-
开销很大,所以性能很差
-
通常,ICMP 流量不起作用(因此您不能在客户机中使用 ping)
-
无法从主机或外部网络直接访问客户机
上述一些限制是可以克服的(例如通过端口转发),但其他因素,如相对“差”的性能是不可避免的。唯一可用的网络模式是共享网络。user
tap
分流器后端使用 TUN/TAP。它提供了非常好的性能,可以配置为创建几乎任何类型的网络模式(例如桥接)。不幸的是,它需要在主机中配置该网络模式,这往往因您使用的操作系统而异。一般来说,它还要求您具有root权限。8
上面的句子几乎取自QEMU官方文档页面。
TAP网络克服了用户模式网络的所有限制,但需要根据网络模式进行一些配置。9.
模式
以下是一些可以在 QEMU 中配置的最常用的网络模式。10
共享网络(默认)
在共享网络模式下,后端充当来宾计算机和外部网络之间的网络地址转换 (NAT) 网关。11 后端网络将专用 IP 地址分配给访客计算机,并在访客和外部网络(例如 Internet)之间执行网络流量的转换。12
要使用以下命令创建共享网络:-netdev
$ -netdev type=user,id=my-shrd-net
然后,您可以将其连接到您的前端:-device
$ qemu-system-aarch64 -netdev type=user,id=my-shrd-net -device virtio-net-device,netdev=my-shrd-net ...
这是 QEMU 中的默认网络模式。它是最容易使用的,它基本上只是工作™。
桥
在桥接网络模式下,后端直接连接到主机的物理网络接口(例如)。这允许访客计算机在网络(例如您的家庭网络)上显示为一个单独的节点,其自己的 IP 地址由路由器的 DHCP 服务器分配。客户机可以与网络上的其他节点通信,也可以由其他设备访问。13eth0
警告(来自 ArchLinux Wiki):如果将来宾 [网络] 设备和某些主机接口(例如 )桥接在一起,您的机器将直接出现在外部网络上,这将使它们受到可能的攻击。更好的解决方案可能是使用仅主机网络模式并设置 NAT。
eth0
如果需要,此模式可能很有用:
-
完全网络访问:来宾计算机将在外部网络上拥有自己的 IP 地址,使它们能够与其他设备进行通信。
-
快速开发/测试驱动程序:访客计算机的网络将像真正的 NIC 一样运行。这使得测试驱动程序或操作系统变得快速而简单。
-device
要在 QEMU 中设置桥接网络,该过程可能略有不同,具体取决于您的主机操作系统。 遗憾的是,我不会在这里解释这一点(由于复杂性)。我只会提供我在互联网上找到的其他有用指南的链接,供您遵循。也许将来我可以对它们进行更多扩展。
提醒,您可以随时为我/他人❤做出贡献和帮助
GNU/Linux
-
extremecoders-re 的 GitHub 要点:使用 tap 界面设置 Qemu
-
Linux KVM 的文档:公共桥接
视窗 10/11
-
OpenVPN 的 TAP 驱动程序:管理 Windows TAP 驱动程序
似乎没有关于这一点的 ACTUL 指南。我找不到任何有用的东西。不好意思。
macOS 11+(大苏尔)
-
SoBytes 的文章:在 macOS 上创建 qemu 桥接网络
-
Carl Montari 的文章:MacOS 上具有桥接接口的 Qemu
-
andriytk 的 GitHub Gist:在 macOS Mojave 上为 QEMU 配置 NAT-network
仅限主机
在仅主机模式下,后端仅提供来宾计算机和主机之间的网络连接。来宾计算机可以相互通信以及与主机通信,但它们与外部网络隔离。
此模式带来的隔离非常有利于安全性,因为来宾无法访问外部网络。就配置和使用方式而言,它实际上类似于 Bridged。来自 ArchLinux 的 Wiki:
如果为网桥指定了 IP 地址,并且允许发往它的流量,但没有实际接口(例如)连接到网桥,则虚拟机将能够相互通信并与主机系统通信。但是,只要您不在物理主机上设置伪装的 IP,它们将无法与外部网络上的任何内容通信。此配置称为“仅主机网络”...
eth0
如果需要,此模式可能很有用:
-
隔离网络环境:访客计算机无法访问外部网络(例如 Internet)。
设置与 Bridged 非常相似。只需按照那里的说明进行操作,但不要为您的网桥分配接口。之后,您将拥有仅限主机的网络!
原文始发于微信公众号(安全狗的自我修养):QEMU ELI5 — 第 7 部分,网络
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论