Host has no internet access when VMs are running

How do I set up the network, so that both host and VMs can connect to the internet?

I've set up a server to host several virtual machines using KVM. It is intended to serve a library of downloadable books for blind people (further details below).

The current state is the result of trying to follow a number of tutorials on networking for virtual machines. The aim is to have internet access from both the host and VMs.

Both host and guests run Debian 10. The network card is configured as network bridge br0 with a static address ('interfaces' see below).

At present the VMs are started manually using virsh. When no VMs are running, the host has internet access (for example ping debian.org, get update, wget ...).

Once a VM is started, the VM has internet access using br0. Each VM has a static address. The host then loses internet access. Ping is possible to other machines in the local network as well as the router, but not beyond (either pinging a domain name or an IP address).

Both host and VMs can be reached using ssh from other local machines.

Once the VMs are set to autostart, it is no longer possible to update without shutting down the VMs manually, also the host doesn't connect to a time server. Furthermore ip shows dropped packages.

All of this most likely is the result of my very limited understanding of networks and bridges in particular. I am most grateful for any help!

Here some further information.

Purpose
One VM is supposed to serve users from outside the local network, using an NginX web server. It handles the download of books checked out by users which are stored on a local drive.

The second VM provides a PostgreSQL database server, to be accessed from local workstations only, where the library users and loans are administered.

The host should be accessible by ssh from the local network. Internet access is required for connecting to a time server and to be able to keep the software up to date.

PC
Motherboard: MSI MPG B550 GAMING PLUS
CPU: AMD Ryzen™ 7 3700X
RAM: Corsair DIMM 32 GB DDR4-3200 Kit
HD: Samsung 980 PRO 1 TB, SSD
Graphics card: MSI GeForce GT 710 1GD3H LP

OS
uname -r

4.19.0-17-amd64

lsb_release -a

No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:    10
Codename:   buster

Network
Until it's moved to the library, the server is at my home office connected to an AVM Fritz!Box 7490 router.

ls /sys/class/net/

br0  enp42s0  lo

cat /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

source /etc/network/interfaces.d/*

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
iface enp42s0 inet manual

# The br0 bridge settings
auto br0
iface br0 inet static
   bridge_ports enp42s0
      address 192.168.10.50
      network 192.168.10.0
      broadcast 192.168.10.255
      netmask 255.255.255.0
      gateway 192.168.10.1
      dns-nameservers 94.247.43.254 194.36.144.87 192.168.10.1
      bridge_stp off
      bridge_fd 0
      bridge_maxwait 0

(The VMs have adresses 192.168.10.51, 192.168.10.52)

ip -s link show dev br0

3: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP mode DEFAULT group default qlen 1000
    link/ether 2c:f0:5d:e4:36:d5 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast   
    206602     2218     0       1130    0       177     
    TX: bytes  packets  errors  dropped carrier collsns 
    99981      593      0       0       0       0       

cat /proc/net/dev

  Inter-|   Receive                                                | Transmit
   face |   bytes packets errs drop fifo frame compressed multicast|    bytes packets errs drop fifo colls carrier compressed
    br0:   210026    2268    0 1138    0     0          0       177    103273     615    0    0    0     0       0          0
  vnet0:  1384510   18903    0    0    0     0          0         0  58389276   40523    0    0    0     0       0          0
     lo:     1840      26    0    0    0     0          0         0      1840      26    0    0    0     0       0          0
enp42s0: 58580534   42260    0   38    0     0          0       289   1467123   19358    0    0    0     0       0          0

route -n

Kernel-IP-Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
0.0.0.0         0.0.0.0         0.0.0.0         U     0      0        0 vnet0
0.0.0.0         192.168.10.1    0.0.0.0         UG    0      0        0 br0
169.254.0.0     0.0.0.0         255.255.0.0     U     0      0        0 vnet0
192.168.10.0    0.0.0.0         255.255.255.0   U     0      0        0 br0

ls /sys/class/net/

br0  enp42s0  lo  vnet0

Your bridge is dropping half the incoming packets! Amazing that you have any connectivity.

I only really see one obvious issue with your configuration and unfortunately it's a badly chosen Debian default:

      bridge_stp off

STP really should be on for any virtual bridge used by libvirt or for VMs. It is way too easy to construct a loop either by accident or intentionally. Which means it also needs to be on at your Fritz!Box, but it most likely already is. The same for whatever switch you plug it into at the library, but again it most likely already has STP on.