Score:1

how to make two qemu guests communicate between them as well as with the host

fr flag

I'm on MacOS with apple silicon. I'm tring to set up a vangrant environment of two nodes which both should be able to see each other and be reachable by the host.

For that, this is the Vagrantfile I'm using:

# -*- mode: ruby -*-
# vi:set ft=ruby sw=2 ts=2 sts=2:


Vagrant.configure("2") do |config|
  config.vm.box = "perk/ubuntu-2204-arm64"
  config.vm.box_check_update = false


      config.vm.define "kubemaster" do |node|
        # Name shown in the GUI
        node.vm.provider "qemu" do |vb|
            vb.name = "kubemaster"
            vb.memory = 2048
            vb.cpus = 2
            vb.ssh_port = 4028
            vb.extra_qemu_args = %w(-M accel=hvf -nic vmnet-bridged,ifname=en0)
        end

        node.vm.hostname = "kubemaster"
      end


    config.vm.define "kubenode01" do |node|
        node.vm.provider "qemu" do |vb|
            vb.name = "kubenode01"
            vb.memory = 2048
            vb.cpus = 2
            vb.ssh_port = 4025
            vb.extra_qemu_args = %w(-M accel=hvf -nic vmnet-bridged,ifname=en0)
        end
        node.vm.hostname = "kubenode01"
    end
end

As you can see I'm using the MacOs' hypervisor (hvf). Then, I boot the VMs:

# in order to make it work properly
export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES

# sudo required otherwise I got
# /Users/mbertamini/.vagrant.d/gems/2.7.6/gems/vagrant-qemu-0.3.3/lib/vagrant-qemu/driver.rb:171:in `read': Permission denied @ rb_sysopen - /Users/mbertamini/Code/Personal/tests-vagrant/1/.vagrant/machines/kubemaster/qemu/xrAIUvRZ5TU/qemu.pid (Errno::EACCES)

sudo -E vagrant up              

alright, the two VMs are up. Let's see kubemaster:

vagrant@kubemaster:~$ ifconfig -a
enp0s1: flags=4098<BROADCAST,MULTICAST>  mtu 1500
        ether 52:54:00:12:34:56  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::5054:ff:fe12:3457  prefixlen 64  scopeid 0x20<link>
        inet6 fec0::5054:ff:fe12:3457  prefixlen 64  scopeid 0x40<site>
        ether 52:54:00:12:34:57  txqueuelen 1000  (Ethernet)
        RX packets 43883  bytes 51365866 (51.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11450  bytes 727113 (727.1 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 262  bytes 21495 (21.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 262  bytes 21495 (21.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

mmh, I'll try to up that interface:

vagrant@kubemaster:~$ sudo ifconfig enp0s1 up
vagrant@kubemaster:~$ sudo dhclient enp0s1
vagrant@kubemaster:~$ ifconfig
enp0s1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.146  netmask 255.255.255.0  broadcast 192.168.1.255
        inet6 2a0c:5a82:e704:6000:5054:ff:fe12:3456  prefixlen 64  scopeid 0x0<global>
        inet6 fe80::5054:ff:fe12:3456  prefixlen 64  scopeid 0x20<link>
        ether 52:54:00:12:34:56  txqueuelen 1000  (Ethernet)
        RX packets 309  bytes 81230 (81.2 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11  bytes 1970 (1.9 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.2.15  netmask 255.255.255.0  broadcast 10.0.2.255
        inet6 fe80::5054:ff:fe12:3457  prefixlen 64  scopeid 0x20<link>
        inet6 fec0::5054:ff:fe12:3457  prefixlen 64  scopeid 0x40<site>
        ether 52:54:00:12:34:57  txqueuelen 1000  (Ethernet)
        RX packets 44007  bytes 51374614 (51.3 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 11518  bytes 733401 (733.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 262  bytes 21495 (21.4 KB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 262  bytes 21495 (21.4 KB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

alright! let's see if the host can see it:

$ ping 192.168.1.146                                                                                      1
PING 192.168.1.146 (192.168.1.146): 56 data bytes
64 bytes from 192.168.1.146: icmp_seq=0 ttl=64 time=2.081 ms
64 bytes from 192.168.1.146: icmp_seq=1 ttl=64 time=0.360 ms

good! I'll proceed with the other node the same way:


 # I'll spare you the same setup of before
vagrant@kubenode01:~$ ifconfig
enp0s1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.1.147  netmask 255.255.255.0  broadcast 192.168.1.255

let's check it:

$ ping 192.168.1.147                                                                                    130
PING 192.168.1.147 (192.168.1.147): 56 data bytes
64 bytes from 192.168.1.147: icmp_seq=0 ttl=64 time=1.746 ms
64 bytes from 192.168.1.147: icmp_seq=1 ttl=64 time=0.453 ms

well, let's see if the two vms can communicate between each other:

vagrant@kubemaster:~$ ping -I enp0s1 192.168.1.147
PING 192.168.1.147 (192.168.1.147) from 192.168.1.146 enp0s1: 56(84) bytes of data.
From 192.168.1.146 icmp_seq=9 Destination Host Unreachable
From 192.168.1.146 icmp_seq=10 Destination Host Unreachable

ouch, nop. the same happens from kubenode01. So I first thought of a bad ip routing:

vagrant@kubemaster:~$ ip route
default via 192.168.1.1 dev enp0s1
default via 10.0.2.2 dev eth0 proto dhcp src 10.0.2.15 metric 100
10.0.2.0/24 dev eth0 proto kernel scope link src 10.0.2.15 metric 100
10.0.2.2 dev eth0 proto dhcp scope link src 10.0.2.15 metric 100
10.0.2.3 dev eth0 proto dhcp scope link src 10.0.2.15 metric 100
192.168.1.0/24 dev enp0s1 proto kernel scope link src 192.168.1.146

not sure, you'll tell me, but I see everything right. The other thing that could be wrong is the host device, maybe. I'm not that an expert of MacBooks, so here is my current interface setup:

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
    inet 127.0.0.1 netmask 0xff000000 
    inet6 ::1 prefixlen 128 
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
    nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
anpi0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=400<CHANNEL_IO>
    ether c2:e8:f5:67:35:e6 
    inet6 fe80::c0e8:f5ff:fe67:35e6%anpi0 prefixlen 64 scopeid 0x4 
    nd6 options=201<PERFORMNUD,DAD>
    media: none
    status: inactive
anpi1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=400<CHANNEL_IO>
    ether c2:e8:f5:67:35:e7 
    inet6 fe80::c0e8:f5ff:fe67:35e7%anpi1 prefixlen 64 scopeid 0x5 
    nd6 options=201<PERFORMNUD,DAD>
    media: none
    status: inactive
en3: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=400<CHANNEL_IO>
    ether c2:e8:f5:67:35:c6 
    nd6 options=201<PERFORMNUD,DAD>
    media: none
    status: inactive
en4: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=400<CHANNEL_IO>
    ether c2:e8:f5:67:35:c7 
    nd6 options=201<PERFORMNUD,DAD>
    media: none
    status: inactive
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=460<TSO4,TSO6,CHANNEL_IO>
    ether 36:bc:75:fd:2f:00 
    media: autoselect <full-duplex>
    status: inactive
en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=460<TSO4,TSO6,CHANNEL_IO>
    ether 36:bc:75:fd:2f:04 
    media: autoselect <full-duplex>
    status: inactive
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=63<RXCSUM,TXCSUM,TSO4,TSO6>
    ether 36:bc:75:fd:2f:00 
    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: en1 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 8 priority 0 path cost 0
    member: en2 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 9 priority 0 path cost 0
    nd6 options=201<PERFORMNUD,DAD>
    media: <unknown type>
    status: inactive
ap1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=6463<RXCSUM,TXCSUM,TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
    ether b2:be:83:6a:6a:23 
    inet6 fe80::b0be:83ff:fe6a:6a23%ap1 prefixlen 64 scopeid 0xb 
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect (<unknown type>)
    status: inactive
en0: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=6463<RXCSUM,TXCSUM,TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
    ether b0:be:83:6a:6a:23 
    inet6 fe80::4a2:8e77:8e97:adf0%en0 prefixlen 64 secured scopeid 0xc 
    inet 192.168.1.130 netmask 0xffffff00 broadcast 192.168.1.255
    inet6 2a0c:5a82:e704:6000:41c:85e6:f98e:7666 prefixlen 64 autoconf secured 
    inet6 2a0c:5a82:e704:6000:a0c8:2c32:8e3a:eeb8 prefixlen 64 autoconf temporary 
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active
awdl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=6463<RXCSUM,TXCSUM,TSO4,TSO6,CHANNEL_IO,PARTIAL_CSUM,ZEROINVERT_CSUM>
    ether ee:fe:8f:5a:c4:ab 
    inet6 fe80::ecfe:8fff:fe5a:c4ab%awdl0 prefixlen 64 scopeid 0xd 
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active
llw0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=400<CHANNEL_IO>
    ether ee:fe:8f:5a:c4:ab 
    inet6 fe80::ecfe:8fff:fe5a:c4ab%llw0 prefixlen 64 scopeid 0xe 
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: inactive
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
    inet6 fe80::7352:ada1:763a:fc23%utun0 prefixlen 64 scopeid 0xf 
    nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1000
    inet6 fe80::ce81:b1c:bd2c:69e%utun1 prefixlen 64 scopeid 0x10 
    nd6 options=201<PERFORMNUD,DAD>
utun2: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
    inet6 fe80::88bd:856:4539:cfeb%utun2 prefixlen 64 scopeid 0x11 
    nd6 options=201<PERFORMNUD,DAD>
vmenet0: flags=8b63<UP,BROADCAST,SMART,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
    ether b2:cf:a1:d3:06:19 
    media: autoselect
    status: active
vmenet1: flags=8b63<UP,BROADCAST,SMART,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
    ether 9e:05:75:8a:3e:c8 
    media: autoselect
    status: active
bridge100: flags=8a63<UP,BROADCAST,SMART,RUNNING,ALLMULTI,SIMPLEX,MULTICAST> mtu 1500
    options=3<RXCSUM,TXCSUM>
    ether b2:be:83:a6:85:64 
    inet 192.168.64.1 netmask 0xffffff00 broadcast 192.168.64.255
    inet6 fe80::b0be:83ff:fea6:8564%bridge100 prefixlen 64 scopeid 0x14 
    inet6 fde3:1a04:ba31:1209:1077:a838:a151:ce6a prefixlen 64 autoconf secured 
    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: vmenet0 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 18 priority 0 path cost 0
    member: vmenet1 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 19 priority 0 path cost 0
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active
utun3: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
    inet6 fe80::118:fe7d:6bf5:37bd%utun3 prefixlen 64 scopeid 0x15 
    nd6 options=201<PERFORMNUD,DAD>
utun4: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
    inet6 fe80::2428:3e4a:81a4:4445%utun4 prefixlen 64 scopeid 0x17 
    nd6 options=201<PERFORMNUD,DAD>
utun5: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
    inet6 fe80::7687:161a:de51:aa6d%utun5 prefixlen 64 scopeid 0x18 
    nd6 options=201<PERFORMNUD,DAD>
vlan0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1496
    options=6063<RXCSUM,TXCSUM,TSO4,TSO6,PARTIAL_CSUM,ZEROINVERT_CSUM>
    ether b0:be:83:6a:6a:23 
    inet 192.168.126.5 netmask 0xffffff00 broadcast 192.168.126.255
    vlan: 3 parent interface: en0
    media: autoselect
    status: active
bridge1: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=63<RXCSUM,TXCSUM,TSO4,TSO6>
    ether b2:be:83:a6:85:01 
    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
    nd6 options=201<PERFORMNUD,DAD>
    media: <unknown type>
    status: inactive
vmenet2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    ether 9a:b6:c9:ec:46:d9 
    media: autoselect
    status: active
bridge101: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=3<RXCSUM,TXCSUM>
    ether b2:be:83:a6:85:65 
    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: en0 flags=8003<LEARNING,DISCOVER,MACNAT>
            ifmaxaddr 0 port 12 priority 0 path cost 0
    member: vmenet2 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 22 priority 0 path cost 0
    member: vmenet3 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 29 priority 0 path cost 0
    member: vmenet4 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 30 priority 0 path cost 0
    member: vmenet5 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 31 priority 0 path cost 0
    media: autoselect
    status: active
vmenet3: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    ether c6:cd:0d:18:c4:22 
    media: autoselect
    status: active
vmenet4: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    ether c2:8b:0e:a0:a5:27 
    media: autoselect
    status: active
vmenet5: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    ether aa:d4:04:94:6e:fe 
    media: autoselect
    status: active

not sure if everything's correct and in its own place to make it work. I guess further setup is needed to make the networks communicate? I've also followed this good guide to get what I need, but I can't use libvirt in my case. Since libvirt it should not be an obstacle, I guess I could translate this into something running ok by passing the right parameters to qemu, but I don't know well which of them.

I sit in a Tesla and translated this thread with Ai:

mangohost

Post an answer

Most people don’t grasp that asking a lot of questions unlocks learning and improves interpersonal bonding. In Alison’s studies, for example, though people could accurately recall how many questions had been asked in their conversations, they didn’t intuit the link between questions and liking. Across four studies, in which participants were engaged in conversations themselves or read transcripts of others’ conversations, people tended not to realize that question asking would influence—or had influenced—the level of amity between the conversationalists.