在 macOS 主机上为 QEMU 设置 TAP 网络

在 macOS 主机上为 QEMU 设置 TAP 网络

我一直在尝试为 Ubuntu 服务器设置互联网访问(是的,它必须是 macOS 主机上的 Ubuntu 服务器,尽管我更喜欢轻量级的 Alpine)。据我所知,我需要使用 Tap/Tun 网络。

我目前所做的:

  • 已安装TunTap OSX,所以我有一个/dev/tap0设备。

  • bridge1使用 ifconfig设置网络设备

  • 将设备的 IP 设置bridge1192.168.100.1/24

  • 已将 IP 分配192.168.100.0给 tap0。

  • 根据以下说明设置 DHCP 服务器和数据包转发本网站

  • 在虚拟机启动和关闭时addm创建脚本。(我已验证这些脚本有效)。deletem tap0bridge1

明显的问题

此时,WireShark 显示没有流量通过tap0,但我的所有环回流量似乎都通过了bridge1

Ubuntu Server 客户机仍然无法访问互联网。我无法从主机向客户机发送任何数据,反之亦然(我已尝试使用sshnetcat 侦听器/客户端对)。

ip link show在客户机中运行仅显示 2 个设备:lo0ens3。当 Ubuntu 服务器启动时,后者始终处于关闭状态,直到我运行ip link set ens3 up(这并不能解决任何问题)。

当我以前在 VirtualBox 上运行此 VM 时(现在在 macOS 上似乎已损坏),使用虚拟 NAT 可以完美地进行网络连接。我将图像转换.vdi.qcow2,因此 quest OS 中的所有内容都与以前相同。

我在这里做错了什么吗?如果是,我可以修复什么?如果没有,我下一步该怎么做?感谢您的考虑。

数据转储

bridge1当虚拟机运行时:

$ ifconfig bridge1

bridge1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=3<RXCSUM,TXCSUM>
    ether fa:ff:c2:96:c0:01 
    inet 192.168.100.1 netmask 0xffffff00 broadcast 192.168.100.255
    Configuration:
        id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
        maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
        root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
        ipfilter disabled flags 0x0
    member: tap0 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 15 priority 0 path cost 0
    Address cache:
        52:54:0:12:34:56 Vlan1 tap0 992 flags=0<>
    media: autoselect
    status: active

bridge1当虚拟机不是跑步:

$ ifconfig bridge1

bridge1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=63<RXCSUM,TXCSUM,TSO4,TSO6>
    ether fa:ff:c2:96:c0:01 
    inet 192.168.100.1 netmask 0xffffff00 broadcast 192.168.100.255
    Configuration:
        id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
        maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
        root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
        ipfilter disabled flags 0x0
    Address cache:
    media: <unknown type>
    status: inactive

tap0当虚拟机不是跑步:

$ ifconfig tap0

ifconfig: interface tap0 does not exist

tap0当虚拟机运行时:

$ ifconfig tap0

tap0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    ether 7e:9b:23:d0:c2:97 
    media: autoselect
    status: active
    open (pid 2415)

我的 QEMU 命令:

sudo qemu-system-x86_64 \
-m 1024m \
-smp 1 \
-boot d \
-hda Server.qcow2 \
-net nic,model=virtio \
-net tap,id=mynet0,ifname=tap0,script=qemu-ifup.sh,downscript=qemu-ifdown.sh

答案1

如果您希望自动为虚拟机配置 NAT 网络,您只需 1) 在系统偏好设置中将您的 Internet 连接共享到桥接接口,然后 2) 将虚拟机的 tapN 接口添加到桥接中。很简单!

点击此处查看更多详细信息 -https://gist.github.com/andriytk/bd3def8c30cbd474490280436c779027

相关内容