我已经通过QEMU在Mac OS X上成功设置了Raspberry PI VM。现在我想从我的Mac访问这个VM的文件系统。
当我在我的VM上调用ifconfig时,我得到了这个。
这里是我的/ etc / network / interfaces文件的内容
在我的Mac上
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
options=10b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV>
ether 3c:07:54:65:da:50
inet6 fe80::3e07:54ff:fe65:da50%en0 prefixlen 64 scopeid 0x4
inet6 fdbf:a879:6730::3e07:54ff:fe65:da50 prefixlen 64 autoconf
inet6 fdbf:a879:6730::401e:56f5:f2f9:a236 prefixlen 64 autoconf temporary
inet 192.168.1.119 netmask 0xffffff00 broadcast 192.168.1.255
nd6 options=1<PERFORMNUD>
media: autoselect (1000baseT <full-duplex,flow-control>)
status: active
我认为原因是VM使用某种共享网络。有没有办法让VM从我的路由器获取IP地址?
答案 0 :(得分:11)
他们配置qemu
的方式似乎是默认的主机NAT网络(又名。qemu -net nic -net user
配置)
默认情况下,从您的访客访问时,您的主机(在本例中为Mac)将在10.0.2.2上找到。在您的访客内部,您可以在10.0.2.2上连接主机(MAC)上的服务。但这是使用NAT,所以你不能轻易地回到另一个方向。
例如,如果您决定要连接到SSH服务以及在访客中运行的Web服务器,则需要使用以下修改选项启动qemu
:
qemu -net nic -net user,hostfwd=tcp::2222-:22,hostfwd=tcp::22280-:80
这样做的路由是将主机(您的MAC)上的端口22280连接到qemu
访客内的端口80(对于端口2222 - >访客中的端口22相同)
这意味着您可以浏览Mac上的http://localhost:22280
,访问虚拟Raspberry Pi中的Web服务器等。
由于使用的端口不同以及使用它们的方式等原因,FTP和SMB设置会更加复杂,但是如果设置FTP以使用PASV模式,则不会出现太多问题。
这涉及按照您的建议进行操作,配置虚拟机任务以便从路由器获取IP地址。在这种情况下,您需要从虚拟机桥接到主机网络。
这需要比此处快速解释的设置更多,但实质上,您需要将NIC分配给vlan并添加tap
接口,例如:
qemu -net nic,vlan=0 -net tap,ifname=tap0
然而,这需要在主机上进行更多设置(最初是手动,当你弄清楚自己的情况,但随后可以编写脚本)来创建桥接和点击接口 - 这通常需要超出简单运行所需的root权限{{ 1}}。一些谷歌搜索引出了各种方法来实现这一点,因为它会根据您的设置而变化。 (我在这里找到了一个示例安装脚本:https://gist.github.com/EmbeddedAndroid/6572715)
qemu
选项。注意:我只在Linux下试过这个
您可以在qemu:
中启用samba服务器qemu
这将创建一个SMB共享,可从客户端内部访问,位于主机上/ path / to / files映射的\ 10.0.2.4 \ qemu内。
答案 1 :(得分:1)
如果您乐意使用SFTP / SCP,那么IMO最简单的方法就是在您的Pi客户上安装openssh-server:
sudo apt-get update && sudo apt-get install openssh-server
启动Pi VM时,在启动QEMU guest虚拟机时使用-redir
开关重定向端口22(SSH / SFTP / SCP),例如
qemu <other-qemu-switches-options-etc> -redir tcp:2222::22
然后,您可以通过主机上的端口2222连接到VM SFTP / SCP(或SSH)。所以从你的主机你可以使用localhost;从局域网上的其他机器,您可以使用:2222
[更新2019] 正如@ChristophBimminger在评论中所述,在较新版本的QEMU中,-redir
开关已被弃用/删除。现在通过-net
或-netdev
开关来实现同样的目标。请查看手册页,例如Debian testing(我目前没有运行QEMU,因此无法给出明确的例子。)