我正在尝试在大端系统上测试一些软件以确保兼容性。我的计划是在 Ubuntu 12.04 上使用 qemu 来模拟 MIPS 系统。到目前为止,我已经能够成功创建任务系统,但我还无法将其与主机系统联网。我可以从访客系统访问外部世界(例如 wget 或 apt-get),但我尝试设置 samba 失败了。
根据这,在 QEmu 1.1 及更高版本中,网桥助手可以为您设置 tun/tap,而无需额外的脚本。我正在尝试使用它,因为我见过不同版本的脚本。现将情况qemu-system-mips -version
通报如下:
QEMU emulator version 1.0.50 (Debian 1.0.50-2012.03-0ubuntu2.1), Copyright (c) 2003-2008 Fabrice Bellard
我从 1.4.1 源代码编译并使用apt-get
.两者都报道了同样的事情。我假设我有 1.1 或更高版本,尽管-version
有什么告诉我的。不管怎样,下一个指令是打开默认网络助手的 setuid 属性:
sudo chmod u+s /usr/local/libexec/qemu-bridge-helper
接下来,我在和中创建了一个bridge.conf
文件以获取权限。该文件的内容是:/etc/qemu/
/usr/local/etc/qemu
-rw-r--r--
allow br0
如果我使用以下命令启动 QEmu:
qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -net nic -net bridge,br=br0 -smb /home/uli/samba
或与
qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -netdev bridge,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1
或与
qemu-system-mips -M malta -kernel vmlinux-2.6.32-5-4kc-malta -hda disk.img -append "root=/dev/sda1 console=ttyS0" -nographic -netdev tap,helper=/usr/local/libexec/qemu-bridge-helper,id=hn0 -device virtio-net-pci,netdev=hn0,id=nic1
我收到以下错误:
failed to get mtu of bridge `br0': No such device
failed to launch bridge helper
qemu-system-mips: -net bridge,br=br0: Device 'bridge' could not be initialized
公平地说,我没有创建 br0 桥。我尝试使用我不理解的脚本创建一个,但随后我的任务 MIPS QEmu 系统不再连接到任何东西。它看到 br0,但没有获得 IP 地址。显然我在这里做错了什么:
ifconfig br0 down
brctl delbr br0
ifconfig eth2 0.0.0.0 promisc up
brctl addbr br0
brctl setfd br0 0
brctl addif br0 eth2
echo 1 > /proc/sys/net/ipv4/conf/br0/proxy_arp
echo 1 > /proc/sys/net/ipv4/conf/eth2/proxy_arp
echo 1 > /proc/sys/net/ipv4/ip_forward
dhclient br0
ifconfig br0 up
有没有更简单的方法来做到这一点?就我个人而言,我只需使用所描述的 \10.0.2.4\qemu 上的 SMB 服务器就可以了这里,但这对我来说也不起作用(当我尝试安装共享时出现 115 错误,大概是因为网络问题)。
更新
创建桥接后,我会在主机上看到 ifconfig 的以下输出:
br0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:10.2.32.101 Bcast:10.2.32.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:85 errors:0 dropped:0 overruns:0 frame:0
TX packets:51 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:8235 (8.2 KB) TX bytes:9227 (9.2 KB)
eth2 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:196581 errors:0 dropped:0 overruns:0 frame:0
TX packets:44205 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:139517339 (139.5 MB) TX bytes:3365206 (3.3 MB)
检查brctl show
输出,我看到以下内容:
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXXX no eth2
现在我启动QEmu中的任务系统。如果我运行 ifconfig,我会看到以下内容:
eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:536 errors:1 dropped:51 overruns:0 frame:0
TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:55083 (53.7 KiB) TX bytes:2862 (2.7 KiB)
Interrupt:10 Base address:0x1020
这座桥看起来像这样:
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXXX no eth2
tap0
不幸的是,通过这种设置,任务系统失去了它曾经拥有的有限的“用户模式”网络(即 wget 和 apt-get 不再工作)。我看到的唯一 IP 地址是网桥的 IP 地址,所以我不确定任务将如何出现在网络上。该主机仍然显示,其 IP 地址与 br0 相同。
更新
这是 iptables -L 的输出
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
答案1
当您运行网桥时,网桥 (eth2) 中的成员不应再分配 IP 地址。 br0 现在应该获取 IP。
例子
这是使用 KVM 的系统的输出。它在底层使用 qemu-kvm,因此它的设置应该与您想要执行的操作类似。
$ ifconfig -a
br0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
inet addr:192.168.1.1 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:2929289877 errors:0 dropped:0 overruns:0 frame:0
TX packets:842023980 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1992305504701 (1.8 TiB) TX bytes:3609403664141 (3.2 TiB)
eth0 Link encap:Ethernet HWaddr XX:XX:XX:XX:XX:XX
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3737819958 errors:0 dropped:168 overruns:0 frame:0
TX packets:1233468235 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2735097151685 (2.4 TiB) TX bytes:4313257594064 (3.9 TiB)
Interrupt:177
看看eth0怎么没有IP地址?这也是我的 br0 设备的样子:
$ brctl show
bridge name bridge id STP enabled interfaces
br0 8000.XXXXXXXXXXXX no vnet2
vnet1
vnet0
eth0
我有 3 个虚拟机位于 br0 设备之上,因此它们可以像真正的物理系统一样完全参与我的网络。这意味着他们可以提供诸如运行 Samba 等服务。我不相信您可以从 NAT 网络后面提供 Samba 服务。