来自在 qemu 上运行的 quest 操作系统的网络和 Samba

来自在 qemu 上运行的 quest 操作系统的网络和 Samba

我正在尝试在大端系统上测试一些软件以确保兼容性。我的计划是在 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 服务。

相关内容