Okay, I created a custom rules file (/etc/udev/rules.d/85-nm-unmanaged.rules
):
# Virtual Ethernet device pair. Often used to communicate with a peer interface
# in another net namespace and managed by libvirt, Docker or the like.
ENV{INTERFACE}=="veth*", ENV{NM_UNMANAGED}="1"
The interfaces are now no longer managed:
$ nmcli -o d
DEVICE TYPE STATE CONNECTION
enp0s31f6 ethernet connected Kabelgebundene Verbindung 1
lxdbr0 bridge connected (externally) lxdbr0
wlp4s0 wifi disconnected --
dummy0 dummy unmanaged --
erspan0 erspan unmanaged --
veth576670f3 ethernet unmanaged --
veth68d924cb ethernet unmanaged --
veth9671cbf0 ethernet unmanaged --
gre0 iptunnel unmanaged --
gretap0 iptunnel unmanaged --
sit0 iptunnel unmanaged --
tunl0 iptunnel unmanaged --
lo loopback unmanaged --
and the interfaces are no longer bouncing up and down, either.
Thank you Tom!