我将使用 qemu-system 作为虚拟机管理程序运行以下设置:
主机设置:
Hypervisor machine (Ubuntu 16.04) Second Machine
qemuVm--tap0--br123--eth0--|Hardware hub|--eth42--SecondPC
因此,这是一个包含由 qemu-system 托管的虚拟机的网络,并通过 tap 接口连接到虚拟网桥。虚拟网桥由主机创建。虚拟网桥不是 libvirt/virt-manager 或其他系统的默认网桥。虚拟网桥有一个真正的 eth0 网卡。此网卡通过有线方式与真正的集线器连接。连接到集线器的是另一台真正的 PC。所有客户端都使用静态 IP 地址。我想在所有连接的机器之间使用所有服务,如 ICMP、UDP、TCP、FTP 等
IP 列表:
win7qemuVm: 10.0.0.10
br123: 10.0.0.100
(我不想使用 qemu 的默认桥)tap0: ?
是否可以/有必要分配 IP 地址?eth0: ?
需要分配ip地址吗?eth42 10.0.0.201
(第二台电脑的界面)
我 想 和 老人 一起工作-netdev
/-device
不想 和 老人 一起工作-net nic
.
我的 win7qemuVm 需要哪些命令行参数才能将其连接到 tap 设备?
有 IP 路由、ipforwarding 和 iptables。我是否需要更改默认的 ubuntu 设置才能实现这样的网络?
我的主机网络已经配置如下:
iface tap11 inet manual
pre-up tunctl -t tap0
up ifconfig tap0 up
down ifconfig tap0 down
auto br123
iface br123 inet static
address 10.0.0.100
netmask 255.255.255.0
bridge_ports eth0
bridge_ports tap0
bridge_stp off
bridge_fd 0.0
pre-up ifdown eth0
pre-up ifdown tap0
pre-up ifup eth0
pre-up ifup tap0
post-down ifdown eth0
post-down ifdown tap0
网络管理器已被禁用。
答案1
上面的配置是正确的,可以解决问题。第一次成功是,当你的 bride/tap 等保持 UP 时。所以这说明它被使用了,系统正在运行。应该看起来像这样:
$ ip link show
# Output modified and formatted:
3: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
master br123 state UP
mode DEFAULT group default qlen 1000
link/ether 68:05:ca:51:8e:ff brd ff:ff:ff:ff:ff:ff
5: tap0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
master br123 state UP
mode DEFAULT group default qlen 1000
link/ether ce:c4:55:91:86:6f brd ff:ff:ff:ff:ff:ff
6: br123: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue
state UP mode DEFAULT group default qlen 1000
link/ether 68:05:ca:51:8e:ff brd ff:ff:ff:ff:ff:ff
您可以看到提到 master 和 state 的那一行,那些是重要的。
下一个挑战是找到一个支持这个 tap 的网络设备。我已经为我的 XP 使用了virtio network device
并下载了virtio driver
。我还没有测试其他操作系统,只测试了一些虚拟网卡,所以其他的也有可能工作。但重要的是,并非所有虚拟设备驱动程序都适用于 tap 设备。例如,Windows 中的网卡可能已启动并正在运行,但您无法进出任何 ping。如果您的防火墙已关闭,而其他所有配置都正确,则您可能添加了一个适配器,但不支持 tap 设备。
网络连接是 1:1 对,因此您需要使用两个步骤来完成此操作。主机端配置从 开始-netdev
,您可以在其中定义连接到(此处)主机的网络适配器。tap0
是其中的一部分。重要的是定义ID
。
这ID
用于定义客户机接口的客户端配置。.-device
是virtio-net-pci
本例中使用的网络适配器。
exec qemu-system-x86_64 \
-enable-kvm \
-hda W_XP.img \
-m 1G \
-monitor stdio \
-cdrom /media/img/SharedImages/driver/W_XP/virtio-win-0.1.126.iso \
-netdev tap,id=mynet0,ifname=tap0,script=no,downscript=no \
-device virtio-net-pci,netdev=mynet0,id=mynet0,mac=52:54:00:c9:18:27 \
$@
机器运行期间或运行后控制桥梁的状态
$ dmesg
[time in sec ]
[13649.332345] br123: port 2(tap0) entered blocking state
[13649.332346] br123: port 2(tap0) entered forwarding state
machine running
[13674.309067] br132: port 2(tap0) entered disabled state
machine stopped
我已经使用 winXP SP3 检查了以下适配器的设置,所有适配器均可与 tap-device 配合使用:
只有某些情况您需要安装外部驱动程序。
rtl8139 Realtak RTL8139-Familie-PCI-Fast Ethernet-NIC
5.398.613.2003 RTL8139.sys 100
ne2k_pci Realtek RTL8029(AS)-basierender Ethernetadapter (Standard)
5.508.803.2000 RTL8029.sys 10
e1000-82545em Intel(R) PRO/1000 MT Network Connectiion
Intel 8.10.3.0 e1000325.sys uvm. 1000
e1000 Intel(R) PRO/1000 MT Network Connectiion
Intel 8.10.3.0 e1000325.sys uvm. 1000
virtio-net-pci Red Hat VirtIO Ethnernet Adapter
51.73.104.12600 netkvm.sys 1000