RHCE Study Lab: KVM and networking issues

Posted on

I'm trying to setup an RHCE study lab per Michael Jang's RHCSA/RHCE book. I've followed the guide in the book to the dot, though in my opinion a lot of information is missing (step by step would have been nice for such a book).

TL;DR - I cannot get VMs to talk to each other in the same subnet in my KVM setup. My study guide says to use Forward NAT with the virbr# devices...but it is not working.

The main issue I am having is that my VMs cannot ping anything on the networks: "destination host unreachable". server1 cannot ping its default gateway, the host computer, or even tester1, which is on the same subnet. The same is true for trying to reach outsider1, which is a different subnet on the same KVM host PC. The same behavior is present on the VMs tester1 and outsider1 too.

For the setup, I have a host computer on a private network (192.168.5.0/24), and per the book I created two KVM virtual networks and three VMs. Below is a summary of the configuration for each VM.

server1.example.com:
- attached to virtual network 'example.com': NAT
- device model: virtio
- vNIC MAC 52:54:00:86:51:d2
- static IP: 192.168.122.50/24, gw=192.168.122.1

tester1.example.com:
- attached to virtual network 'example.com': NAT
- device model: virtio
- vNIC MAC 52:54:00:89:20:c7
- static IP: 192.168.122.150/24, gw=192.168.122.1

outsider1.example.org:
- attached to virtual network 'example.org': NAT
- device model: virtio
- vNIC MAC 52:54:00:03:c3:0a
- static IP: 192.168.100.100/24, gw=192.168.100.1

I followed the directions to create two virtual networks, and the setup as seen from the virtualization host PC is as follows:

    # virsh list
     Id    Name                           State
    ----------------------------------------------------
     1     outsider1                      running
     2     tester1                        running
     4     server1                        running

    # virsh net-list
     Name                 State      Autostart     Persistent
    ----------------------------------------------------------
     example.com          active     yes           yes
     example.org          active     yes           yes

    # virsh net-info example.com
    Name:           example.com
    UUID:           6d2a6e12-2d72-4720-9427-630a608bae6f
    Active:         yes
    Persistent:     yes
    Autostart:      yes
    Bridge:         virbr0

    # virsh net-info example.org
    Name:           example.org
    UUID:           3d564af8-4d3e-484b-846e-7ad76bd4be4a
    Active:         yes
    Persistent:     yes
    Autostart:      yes
    Bridge:         virbr1

    # virsh net-dumpxml example.com
    <network>
      <name>example.com</name>
      <uuid>6d2a6e12-2d72-4720-9427-630a608bae6f</uuid>
      <forward mode='nat'>
        <nat>
          <port start='1024' end='65535'/>
        </nat>
      </forward>
      <bridge name='virbr0' stp='on' delay='0'/>
      <mac address='52:54:00:7f:b9:50'/>
      <domain name='example.com'/>
      <ip address='192.168.122.1' netmask='255.255.255.0'>
        <dhcp>
          <range start='192.168.122.151' end='192.168.122.254'/>
        </dhcp>
      </ip>
      <ip family='ipv6' address='fd00:a81d:a6d7:55::1' prefix='64'>
        <dhcp>
          <range start='fd00:a81d:a6d7:55::100' end='fd00:a81d:a6d7:55::1ff'/>
        </dhcp>
      </ip>
    </network>

    # virsh net-dumpxml example.org
    <network>
      <name>example.org</name>
      <uuid>3d564af8-4d3e-484b-846e-7ad76bd4be4a</uuid>
      <forward mode='nat'>
        <nat>
          <port start='1024' end='65535'/>
        </nat>
      </forward>
      <bridge name='virbr1' stp='on' delay='0'/>
      <mac address='52:54:00:49:c7:35'/>
      <domain name='example.org'/>
      <ip address='192.168.100.1' netmask='255.255.255.0'>
        <dhcp>
          <range start='192.168.100.128' end='192.168.100.254'/>
        </dhcp>
      </ip>
      <ip family='ipv6' address='fd00:e81d:a6d7:56::1' prefix='64'>
        <dhcp>
          <range start='fd00:e81d:a6d7:56::100' end='fd00:e81d:a6d7:56::1ff'/>
        </dhcp>
      </ip>
    </network>

    # brctl show
    bridge name bridge id       STP enabled interfaces
    docker0     8000.02428a3f4914   no      
    virbr0      8000.5254007fb950   yes     virbr0-nic
    virbr1      8000.52540049c735   yes     virbr1-nic

    # ip route show
    default via 192.168.5.1 dev enp0s31f6 proto dhcp metric 100 
    192.168.5.0/24 dev enp0s31f6 proto kernel scope link src 192.168.5.45 metric 100 
    192.168.100.0/24 dev virbr1 proto kernel scope link src 192.168.100.1 
    192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 

    # ip addr show
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: enp0s31f6: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
        link/ether 2c:4d:54:d2:c5:89 brd ff:ff:ff:ff:ff:ff
        inet 192.168.5.45/24 brd 192.168.5.255 scope global noprefixroute dynamic enp0s31f6
           valid_lft 71762sec preferred_lft 71762sec
        inet6 fe80::7abc:be60:6633:d94/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
        link/ether 02:42:8a:3f:49:14 brd ff:ff:ff:ff:ff:ff
    10: vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
        link/ether fe:54:00:03:c3:0a brd ff:ff:ff:ff:ff:ff
        inet6 fe80::fc54:ff:fe03:c30a/64 scope link 
           valid_lft forever preferred_lft forever
    11: vnet1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
        link/ether fe:54:00:89:20:c7 brd ff:ff:ff:ff:ff:ff
        inet6 fe80::fc54:ff:fe89:20c7/64 scope link 
           valid_lft forever preferred_lft forever
    13: vnet2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN group default qlen 1000
        link/ether fe:54:00:86:51:d2 brd ff:ff:ff:ff:ff:ff
        inet6 fe80::fc54:ff:fe86:51d2/64 scope link 
           valid_lft forever preferred_lft forever
    14: virbr1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
        link/ether 52:54:00:49:c7:35 brd ff:ff:ff:ff:ff:ff
        inet 192.168.100.1/24 brd 192.168.100.255 scope global virbr1
           valid_lft forever preferred_lft forever
        inet6 fd00:e81d:a6d7:56::1/64 scope global 
           valid_lft forever preferred_lft forever
        inet6 fe80::5054:ff:fe49:c735/64 scope link 
           valid_lft forever preferred_lft forever
    15: virbr1-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr1 state DOWN group default qlen 1000
        link/ether 52:54:00:49:c7:35 brd ff:ff:ff:ff:ff:ff
    16: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
        link/ether 52:54:00:7f:b9:50 brd ff:ff:ff:ff:ff:ff
        inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
           valid_lft forever preferred_lft forever
        inet6 fd00:a81d:a6d7:55::1/64 scope global 
           valid_lft forever preferred_lft forever
        inet6 fe80::5054:ff:fe7f:b950/64 scope link 
           valid_lft forever preferred_lft forever
    17: virbr0-nic: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000
        link/ether 52:54:00:7f:b9:50 brd ff:ff:ff:ff:ff:ff

I have tried restart NetworkManager on all of the VMs, as well as restarting the VMs too, but none of the VMs can talk to any other device. Clearly I am missing a step in order to get these devices to talk to each other...

Server1 is configured as follows:
[root@server1 ~]# ip route show
default via 192.168.122.1 dev eth0  proto static  metric 100 
192.168.122.0/24 dev eth0  proto kernel  scope link  src 192.168.122.50  metric 100 
[root@server1 ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:86:51:d2 brd ff:ff:ff:ff:ff:ff
[root@server1 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:86:51:d2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.50/24 brd 192.168.122.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe86:51d2/64 scope link 
       valid_lft forever preferred_lft forever
Tester1 is configured as follows:
[root@tester1 ~]# ip route show
default via 192.168.122.1 dev eth0  proto static  metric 100 
192.168.122.0/24 dev eth0  proto kernel  scope link  src 192.168.122.150  metric 100 
[root@tester1 ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:89:20:c7 brd ff:ff:ff:ff:ff:ff
[root@tester1 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:89:20:c7 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.150/24 brd 192.168.122.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe89:20c7/64 scope link 
       valid_lft forever preferred_lft forever
And outsider1 is configured as follows:
[root@outsider1 ~]# ip route show
default via 192.168.100.1 dev eth0  proto static  metric 100 
192.168.100.0/24 dev eth0  proto kernel  scope link  src 192.168.100.100  metric 100 
[root@outsider1 ~]# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DEFAULT qlen 1000
    link/ether 52:54:00:03:c3:0a brd ff:ff:ff:ff:ff:ff
[root@outsider1 ~]# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:03:c3:0a brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.100/24 brd 192.168.100.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe03:c30a/64 scope link 
       valid_lft forever preferred_lft forever

~~~
I'm pretty sure I will need to create static routes on the hosts to get traffic going from outsider1 to tester1/server1 and vice versa. But what really has me stuck is that I cannot even get tester1 and server1 to talk to each other, or even talk to the default gateway virbr0.

Any ideas?

Responses