Netzwerke unter Linux


© November 2020, Letzte Änd. 28.12.22

Themen

Bestandsaufnahme

Leider gibt es etliche Web-Seiten, welche noch veraltete net-tools Befehle nutzen - siehe linuxfoundation.org. Daher versuche ich neue iproute2 Befehle zu beschreiben und erwähne, der Vollständigkeit halber, noch die alten net-tools Befehle. Ich denke dann kann man schneller den Unterschied erkennen...

Zum Anfang

Welche Schnittstellen habe ich?

/usr/sbin/ifconfig                                 veraltet
enp37s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.178.35  netmask 255.255.255.0  broadcast 192.168.178.255

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)

virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255

wlp36s0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500

Der besseren Übersicht halber habe ich die Zeilen mit
"device memory, inet6, ether, RX, TX" entfernt.
Was in diesem Beispiel nicht auffällt,
ifconfig   zeigt nur die aktivierten Schnittstellen.

Stattdessen wird der Befehl   ip addr show
zur Anzeige der Geräte-Adresse verwendet.

ip address show                                  Kurzform: ip a
1: lo: <LOOPBACK,UP,LOWER_UP> 
    mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
    
2: enp37s0: <BROADCAST,MULTICAST,UP,LOWER_UP> 
    mtu 1500 qdisc mq state UP group default qlen 1000
    inet 192.168.178.35/24 brd 192.168.178.255 
    scope global dynamic noprefixroute enp37s0
    
3: wlp36s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> 
    mtu 1500 qdisc mq state DOWN group default qlen 1000

4: virbr0: <NO-CARRIER,BROADCAST,MULTICAST,UP> 
    mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
    
5: virbr0-nic: <BROADCAST,MULTICAST> 
    mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000

Etwas zusammen gekürzt   (IPv6, valid_lft, link/ entfernt)
kann man trotzdem noch erkennen, dass folgende Schnittstellen
in diesem Beispiel existieren.

Zum Anfang

Zur Erklärung der Begriffe

Weitere Möglichkeiten um die Ausgabe einzuschränken sind z.B. folgende.
ip -4 addr show dev virbr0

Zum Anfang

Welche Verbindungen sind geroutet?

Ursprünglich hätte ich dafür  route -n  verwendet,
wobei -n für die Anzeige der numerischen Adresse, statt symbolischen Namen, steht.

/usr/sbin/route -n                                    veraltet!
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.178.1   0.0.0.0         UG    100    0        0 enp37s0
169.254.0.0     0.0.0.0         255.255.0.0     U     1000   0        0 enp37s0
192.168.122.0   0.0.0.0         255.255.255.0   U     0      0        0 virbr0
192.168.178.0   0.0.0.0         255.255.255.0   U     100    0        0 enp37s0

Ein weiterer veralteter Befehl ist brctl

su
apt install bridge-utils
exit
/sbin/brctl show virbr0                               veraltet
bridge name  bridge id          STP enabled  interfaces
virbr0       8000.525400985a1d  yes          virbr0-nic

Ebenso kann die Routing-Tabelle auch durch   ip route show
oder   ip route list   dargestellt werden.

ip route show                                    Kurzform: ip r
default via 192.168.178.1  dev enp37s0 proto dhcp metric 100 
            169.254.0.0/16 dev enp37s0 scope link metric 1000 
          192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown             
          192.168.178.0/24 dev enp37s0 proto kernel scope link src 192.168.178.35 metric 100

Zur besseren Optik habe ich die Zeilen leicht verschoben...
Per DHCP bekomme ich von meiner Fritz-Box Router-Adresse  192.168.178.1  eine Adresse zugewiesen.
In diesem Fall wurde vom Router  192.168.178.35  zugewiesen.

Mit statischer IP zwischen  169.254.0.0  und  169.254.255.255
darf auch an den Router ein Gerät angeschlossen werden.
Das passt gut zur Dokumentation der Fritzbox wo  169.254.1.1  die Notfall-IP Adresse ist.

Dann gibt es noch ein lokales Netzwerk  virbr0  welches einen eigenen IP-Breich bekommen hat.
192.168.122.0 - 192.168.122.255.

Zum Anfang

Verbindung aktiv?

Aktive Verbindungen habe ich mir wie folgt über den veralteten Befehl  nmcli  angeschaut.
nmcli heißt soviel wie NetworkManager command line interface.

nmcli connection show --active                        veraltet
NAME                UUID                                  TYPE      DEVICE  
virbr0              f8eeaed5-eb13-482f-9963-134443c493e1  bridge    virbr0  
Wired connection 1  e59515c8-0b5e-4daa-8ac6-3be61ca77df8  ethernet  enp37s0 

Details zu einer Verknüpfung einer Netzwerkschnittstelle (hier virbr0-nic)
kann man auch über folgenden Befehl bekommen.

ip link show virbr0-nic                          Kurzform: ip l s virbr0-nic
5: virbr0-nic:  mtu 1500 qdisc pfifo_fast master virbr0 state DOWN mode DEFAULT group default qlen 1000
    link/ether 52:54:00:98:5a:1d brd ff:ff:ff:ff:ff:ff

Zum Anfang

Eine Netzwerk-Brücke einrichten

Grob kann man sagen, das Thema Netzwerk-Brücke für eine VM - virtual maschine gliedert sich in 2 Teile.

Hier wird nur der erste Teil betrachtet. Der 2. Teil ist in KVM virsh beschrieben.

Zum Anfang

Netzwerk auf dem Host einrichten

Die Default-Schnittstelle ist nicht die optimalste,
da Host- und Gast-System sich im Default-Fall die selbe IP-Adresse via NAT teilen.
Ein paar Grundlagen dazu, sind gut unter libvirt.org VirtualNetworking beschrieben.

Besser ist es eine sogenannte Bridge einzurichten,
sodass das Gast-System eine andere IP-Adresse zugewiesen bekommt.
Zum Einen kann ich dann Netzwerke etablieren, welche nur innerhalb des Host-Systems laufen
und zum Anderen kann ich den Zugriff Aufgrund einer anderen IP-Adresse besser im Router kontrollieren.

Zum Anfang

Eine Bridge via nmtui erstellen

nmtui  ist das Text user interface für den NetworkManager-Daemon.
Für Veränderungen sind Admin-Rechte erforderlich.

su
nmtui

                    ┌─┤ NetworkManager TUI ├──┐
                    │                         │ 
                    │ Please select an option │ 
                    │                         │ 
                    │ Edit a connection       │ 
                    │ Activate a connection   │ 
                    │ Set system hostname     │ 
                    │                         │ 
                    │ Quit                    │ 
                    │                         │ 
                    │                    <OK> │ 
                    │                         │ 
                    └─────────────────────────┘ 

Im ersten Menüeintrag  Edit a connection  können wir ein weiteres Netzwerk
via  Add  hinzufügen.
Add  erreiche ich via TAB und RETURN.

                    ┌───────────────────────────────────────┐
                    │                                       │ 
                    │ ┌─────────────────────────┐           │ 
                    │ │ Ethernet              ↑ │ <Add>     │ 
                    │ │   Wired connection 1  ▒ │           │ 
                    │ │ Bridge                ▒ │ <Edit...> │ 
                    │ │   virbr0              ▒ │           │ 
                    │ │                       ▒ │ <Delete>  │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▮ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ↓ │ <Back>    │ 
                    │ └─────────────────────────┘           │ 
                    │                                       │ 
                    └───────────────────────────────────────┘ 
 

Dann kann ich   Bridge   auswählen
und mit  Create  fortsetzen.

         ┌──────────────────────┤ New Connection ├──────────────────────┐
         │                                                              │ 
         │ Select the type of connection you wish to create.            │ 
         │                                                              │ 
         │                        Ethernet    ↑                         │ 
         │                        InfiniBand  ▒                         │ 
         │                        Wi-Fi       ▮                         │ 
         │                        Bond        ▒                         │ 
         │                        Bridge      ↓                         │ 
         │                                                              │ 
         │                                            <Cancel> <Create> │ 
         │                                                              │ 
         └──────────────────────────────────────────────────────────────┘

Nun kann ich dem Tier noch einen Namen geben z.B.  virbr1
Über TAB gelange ich zum Menüpunkt Add.

   ┌───────────────────────────┤ Edit Connection ├───────────────────────────┐
   │                                                                        ↑│ 
   │         Profile name virbr1__________________________________          ▮│
   │               Device virbr1__________________________________          ▒│ 
   │                                                                        ▒│ 
   │ ╤ BRIDGE                                                      <Hide>   ▒│ 
   │ │ Slaves                                                               ▒│ 
   │ │ ┌───────────────────────────────────────────────┐                    ▒│ 
   │ │ │                                             ↑ │ <Add>              ▒│ 
   │ │ │                                             ▮ │                    ▒│ 
   │ │ │                                             ▒ │ <Edit...>          ▒│ 
   │ │ │                                             ▒ │                    ▒│ 
   │ │ │                                             ▒ │ <Delete>           ▒│ 
   │ │ │                                             ↓ │                    ▒│ 
   │ │ └───────────────────────────────────────────────┘                    ▒│ 
   │ │         Aging time 300_______ seconds                                ▒│ 
   │ │ [X] Enable IGMP snooping                                             ▒│ 
   │ │ [X] Enable STP (Spanning Tree Protocol)                              ▒│ 
   │ │           Priority 32768_____                                        ▒│ 
   │ │      Forward delay 15________ seconds                                ▒│ 
   │                                                                        ↓│ 
   └─────────────────────────────────────────────────────────────────────────┘ 

Hier kann ich als Slave-Verbindung Ethernet auswählen.
und die neue Brücke mit Create erzeugen.

   ┌───────────────────────────┤ Edit Connection ├───────────────────────────┐
   │                                                                        ↑│ 
   │         Profile name virbr1__________________________________          ▮│ 
   │               Device virbr1__________________________________          ▒│ 
   │                                                                        ▒│ 
   │ ╤ BR┌──────────────────────┤ New Connection ├──────────────────────┐   ▒│ 
   │ │ Sl│                                                              │   ▒│ 
   │ │ ┌─│ Select the type of slave connection you wish to add.         │   ▒│ 
   │ │ │ │                                                              │   ▒│ 
   │ │ │ │                         Ethernet  ↑                          │   ▒│ 
   │ │ │ │                         Wi-Fi     ▮                          │   ▒│ 
   │ │ │ │                         VLAN      ▒                          │   ▒│ 
   │ │ │ │                                   ▒                          │   ▒│ 
   │ │ │ │                                   ↓                          │   ▒│ 
   │ │ └─│                                                              │   ▒│ 
   │ │   │                                            <Cancel> <Create> │   ▒│ 
   │ │ [X│                                                              │   ▒│ 
   │ │ [X└──────────────────────────────────────────────────────────────┘   ▒│ 
   │ │                                                                      ▒│ 
   │ │      Forward delay 15________ seconds                                ▒│ 
   │                                                                        ↓│ 
   └─────────────────────────────────────────────────────────────────────────┘ 

Nun wähle ich noch die physikalische Schnittstelle aus, mit dem die Brücke verbunden werden soll.
In meinen Fall ist das enp37s0.

   ┌─────────────────────────┤ Edit Connection ├──────────────────────────┐
   │                                                                      │  
   │         Profile name Ethernet connection 1___________________        │  
   │               Device enp37s0_________________________________        │  
   │                                                                      │  
   │ ═ ETHERNET                                                    <Show> │  
   │                                                                      │  
   │ ╤ BRIDGE PORT                                                 <Hide> │  
   │ │           Priority 32________                                      │  
   │ │          Path cost 100_______                                      │  
   │ │ [ ] Hairpin mode                                                   │  
   │ └                                                                    │  
   │ [X] Automatically connect                                            │  
   │ [X] Available to all users                                           │  
   │                                                                      │  
   │                                                        <Cancel> <OK> │  
   │                                                                      │  
   │                                                                      │  
   │                                                                      │  
   │                                                                      │  
   │                                                                      │  
   └──────────────────────────────────────────────────────────────────────┘  

Da mein PC über DHCP vom Router die Adresse erhält, sind keine weiteren Aktionen nötig.
Also nach unten scrollen und die Seite mit  OK  abschließen.

   ┌───────────────────────────┤ Edit Connection ├───────────────────────────┐
   │                                                                        ↑│ 
   │ │                                                                      ▒│ 
   │ │         Aging time 300_______ seconds                                ▒│ 
   │ │ [X] Enable IGMP snooping                                             ▒│ 
   │ │ [X] Enable STP (Spanning Tree Protocol)                              ▒│ 
   │ │           Priority 32768_____                                        ▒│ 
   │ │      Forward delay 15________ seconds                                ▒│ 
   │ │         Hello time 2_________ seconds                                ▒│ 
   │ │            Max age 20________ seconds                                ▒│ 
   │ │ Group forward mask 0_________                                        ▒│ 
   │ └                                                                      ▒│ 
   │                                                                        ▒│ 
   │ ═ IPv4 CONFIGURATION <Automatic>                              <Show>   ▒│ 
   │ ═ IPv6 CONFIGURATION <Automatic>                              <Show>   ▒│ 
   │                                                                        ▒│ 
   │ [X] Automatically connect                                              ▒│ 
   │ [X] Available to all users                                             ▒│ 
   │                                                                        ▒│ 
   │                                                           <Cancel> <OK>▮│ 
   │                                                                        ↓│ 
   └─────────────────────────────────────────────────────────────────────────┘ 

Nun gehe ich erst einmal zuück ins Ursprungsmenü

                    ┌───────────────────────────────────────┐
                    │                                       │ 
                    │ ┌─────────────────────────┐           │ 
                    │ │ Ethernet              ↑ │ <Add>     │ 
                    │ │   Wired connection 1  ▒ │           │ 
                    │ │ Bridge                ▒ │ <Edit...> │ 
                    │ │   virbr0              ▒ │           │ 
                    │ │   virbr1              ▒ │ <Delete>  │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▒ │           │ 
                    │ │                       ▮ │           │ 
                    │ │                       ↓ │ <Back>    │ 
                    │ └─────────────────────────┘           │ 
                    │                                       │ 
                    └───────────────────────────────────────┘ 

Dort verändere ich die aktiven Verbindungen.

                           ┌─┤ NetworkManager TUI ├──┐
                           │                         │ 
                           │ Please select an option │ 
                           │                         │ 
                           │ Edit a connection       │ 
                           │ Activate a connection   │ 
                           │ Set system hostname     │ 
                           │                         │ 
                           │ Quit                    │ 
                           │                         │ 
                           │                    <OK> │ 
                           │                         │ 
                           └─────────────────────────┘ 

Nun ist es noch erforderlich wired zu trennen und virbr1 zu verbinden.
Das Ergebnis sollte dann wie folgt aussehen
Also kein * vor Wired connection 1

                   ┌──────────────────────────────────────────┐
                   │                                          │ 
                   │ ┌─────────────────────────┐              │ 
                   │ │ Wired                 ↑ │ <Activate>   │ 
                   │ │   Wired connection 1  ▒ │              │ 
                   │ │                       ▒ │              │ 
                   │ │ Bridge (virbr0)       ▒ │              │ 
                   │ │ * virbr0              ▮ │              │ 
                   │ │                       ▒ │              │ 
                   │ │ Bridge (virbr1)       ▒ │              │ 
                   │ │ * virbr1              ▒ │              │ 
                   │ │                       ▒ │              │ 
                   │ │                       ▒ │              │ 
                   │ │                       ▒ │              │ 
                   │ │                       ▒ │              │ 
                   │ │                       ▒ │              │ 
                   │ │                       ▒ │              │ 
                   │ │                       ▒ │              │ 
                   │ │                       ↓ │ <Back>       │ 
                   │ └─────────────────────────┘              │ 
                   │                                          │ 
                   └──────────────────────────────────────────┘ 

Damit die neue Konfiguration benutzbar ist,
muß das Netzwerk unter DEB 10 wie folgt neu gestartet werden.

sudo systemctl restart NetworkManager.service

Zum Anfang

Eine Bridge im vmm verwenden

Im Virtual Machine Manager virt-manager kann ich nun die neu etablierte Bridge verwenden,
indem ich die Konfiguration meines virtuellen Klienten anpasse.
Das geschieht durch Selektion der virtuellen Maschine gefolgt von   open.

vmm

Nun klicke ich auf die Glühbirne  Show virtual hardware details
und dann auf die Netzwerkschnittstelle (NIC).

NIC default

Hier ändere ich das Netzwerkinterface zur Bridge virbr1.
Als pseudo Hardware verwende ich einen alten Intel Netzwerkcontroller e1000e

NIC bridged

Nach dem Speichern der veränderten Konfiguration und Start der virtuellen Maschine
sollte in der Fritzbox die neu genutzte Adresse zu sehen sein.

NIC bridged

Zum Anfang

Quellen

Aufgrund der Menge habe ich es so weit es geht alphabetisch sortiert um Dupletten zu vermeiden.

archlinux.org   Network configuration
ping; iproute2; enable, disable; static/dynamic IP; routing table; DHCP; etc.

cyberciti.biz   how-to-install-kvm-on-ubuntu-20-04-lts-headless-server - 2021
Bridge mit nmcli erzeugen; VM erzeugen mit virt-install; Display via virsh vncdisplay; VM erzeugen mit virt-builder; etc.
cyberciti.biz   How to setup Bridge br0 on Ubuntu - 2020
mit bridge-utils; systemctl restart networking
cyberciti.biz   How to configure network interfaces as a Bridge - 2021
mit bridge-utils (); /etc/network/interfaces; service networking stop; service networking start; verify with ip addr show; brctl show
cyberciti.biz   Linux ip Command Examples - 2022

datacenter-insider.de   virsh Verwaltung der KVM (2015)
Win-7 Installation über virsh (veraltet, virsh Dialog funktioniert nicht mehr bei DEB 10), virt-install, virsh Kommandos; virsh migrate
debian.org   the_virtual_interface; Kapitel 5. Netzwerkkonfiguration;
debian.org   manpage von virt-install, mit allen erdenklichen Optionen ;-)
debian.org   BridgeNetworkConnections
dedoimedo.com   How to setup bridged networking in KVM (2011)
creating bridge via brctl, virt-manager, some dirty bridging hacks,
digitalocean.com   how to use systemctl (2015)
Systemd versus SysV; Services: start, stop, re-start, re-load, enable, disable, status, unmask, etc.

funtoo.org   libvirt (Anleitung für DEB nicht so geeignet)
via NAT, spice, Virt-Manager, BIOS-Versionen, XML editing to return unused space
funtoo.org   Windows_10_Virtualization_with_KVM
Win mit VirtIO-Treiber; script to install Win; using spicy

golinuxcloud.com   virt-install examples; KVM virtualisation commands cheatsheet
virt-install, virt-viewer, tigervnc
golinuxcloud.com   how to configure network bridge via nmtui on CentOS
nmtui, /etc/sysconfig/network-... existiert nicht unter DEB,
golinuxcloud.com   nmcli-command-examples-cheatsheet-centos-rhel
golinuxcloud.com   16 Linux ip command examples to configure network interfaces (cheatsheet)
games4linux.de   Debian 9 «Stretch»: Das ist neu & Dist-Upgrade erläutert
gitconnected.com   How to Setup Bridge Networking with KVM on Ubuntu 20.04 - 2020

howtogeek.com   How to Use the ip Command on Linux - 2020

isc.org   BIND9; DHCP;

linuxconfig.org   How to use bridged networking with libvirt and KVM - 2021
libvirt.org Domain XML format
  Ein paar Netzwerk-Grundlagen (NAT, routed, isolated) und Konfiguration mit virt-manager, Netzwerksteuerung mit virsh.
linuxhint.com   debian_/etc/network/interfaces
/etc/network/interfaces; DHCP or static address, two interfaces, network bonding, logging
linuxhint.com   debian_/etc/network/interfaces
gateways, masquerading, network bonding, etc.
linux-kvm.org   Configuring Guest Networking
linux-kvm.org   Ubuntu Networking
bridge-utils;
linuxtechi.com   install-kvm-hypervisor-on-centos-7-and-rhel-7
bridge interface, virt-manager, virt-install

ostechnix.com   manage-kvm-virtual-machines-with-virsh-program
virsh: help, list, save, restore, destroy, shutdown, dumpxml, create, edit, undefine, net- commands

raymii.org   install online Distro with virt-install
fallocate, div. Beispiele virt-install, osinfo-query os, etc.

suse.com   13 Managing Networks

tecmint.com   How to manage KVM via command line tools (2015)
virsh create storage pool, virt-install
tecmint.com   11 best tools to access remote linux desktop (2019)
TigerVNC, RealVNC, TeamViewer, Remmina, NoMachine, Apache Guacamole, XRDP, FreeNX, X2Go, Xpra
tecmint.com   install-and-configure-kvm-in-linux
How to Create Virtual Machines in Linux Using KVM (Kernel-based Virtual Machine) – Part 1
tecmint.com   How to Use IP Command in Linux [24 Useful Examples]
techotopia.com   Installing a KVM Guest-OS from the Command-line (virt-install)
virt-install Parameter-Tabelle & ein Beispiel (ein bischen wenig...)
thomas-krenn.com   virsh Werkzeug zur Verwaltung virtueller Maschinen
Grundlagen, Virsh-Parameter-Tabelle; virsh: VM starten, entfernen, etc.; XML von VM editieren - mehr nicht...
thomas-krenn.com   Netzwerkkonfiguration
bridge-utils
techotopia.com   Creating a RHEL 8 KVM Networked Bridge Interface

techtarget.com   virtual machine (VM)

tldp.org   Introduction to Linux Traffic Control

tldp.org   6. Classless Queuing Disciplines

ubuntu.com   KVM Networking
NAT & bridged; via bridge-utils & anderen Methoden; Private Virtual Switch; boot over network
ubuntuusers.de   virsh
virt-install; virsh: start, shutdown via ACPI -> acpid für den Gast, console (Debugging), virt-top

Zum Anfang