Routing mit Linux in virtuellen Umgebungen

Vor 4 Jahren hatte ich einen Blog geschrieben, wie man einen Microsoft Hyper-V Server 2016 als Router “verwenden” kann.

Natürlich stellt man sich dabei die Frage, wieso man das tun sollte? Zum einen ist der Hyper-V Server von Microsoft kostenlos und hat als Mitglied der Windows Server Core Familie geringere Systemanforderungen.

Es gibt hier eine Alternative, dazu müssen wir aber die Windows-Welt verlassen und uns Linux anschauen. Ich selbst bin historisch mit SUSE Linux verbunden, daher habe ich für diese Lösung openSUSE Leap 15.2 verwendet.

Als Ausgangslage haben wir die gleichen Voraussetzungen wie im Blog damals, also gleiche Netzwerke, IP-Adressen und die FRITZ!box usw. Also einfach mal den Blog nochmals anschauen, dort ist auch die Konfiguration der FRITZ!box selbst beschrieben.

Ausgangslage

Hier eine kurze Zusammenfassung davon:

  • Server mit 3 Netzwerkkarten (172.16.16.253, 192.168.110.0 und 192.168.120.1)
  • Fritz!BOX für den Internet-Zugang
  • Netzwerk an der FRITZ!box ist 172.16.16.0/24, das Gateway ist immer die 1 (also die FRITZ!box selbst)

Konfiguration der Linux VM

Für die VM unter Hyper-V habe ich die folgenden Parameter verwendet:

  • Hyper-V Generation 2 VM mit deaktiviertem Secure Boot
  • 2 CPUs
  • Dynamischer Hauptspeicher mit 1GB Start und maximal 2GB, im Betrieb läuft die VM mit grob 800MB
  • 64GB Festplatte (wobei hier auch weniger ausreichend ist), da die VHDX aber dynamisch ist, stellen die 64GB kein Problem dar
  • Zum Start nur einen Netzwerk-Adapter, wobei im Verlauf der Konfiguration weitere hinzugefügt werden

Die folgende Abbildung zeigt eine Übersicht der VM.

image

Installation openSUSE Leap 15.2 in der VM

Für die Installation wird das ISO-Image gemounted und die VM gestartet.

image

Im nun folgenden Menü Installation auswählen und den Dingen seinen Lauf lassen.

image

Da die VM über den einen Adapter eine IP-Adresse vom DHCP-Server bekommen hat, ist das Linux Setup in der Lage ggf. notwendige Updates aus dem Netz zu laden. Nach knapp 2min erscheint die Auswahl zur Konfiguration der Tastatur und der Lizenzvereinbarung. Ich verwende gerne VMs in englischer Sprache (English US) dazu aber eine Tastatur mit den deutschen (QWERTZ) Layout.

image

Hier dann auf Next drücken. Im nun folgenden Menü können wir auf eine Aktivierung von Online Repositories für unseren Zweck verzichten, also No auswählen.

image

Da wir einen schlanken Server wollen, treffen wir die Auswahl Server bei der Abfrage der System Role. Damit  haben wir zwar keine Oberfläche, können aber auf YaST zurück greifen, der alle notwendigen Aufgaben für uns erledigen kann.

image

Weiter geht es mit Next mit dem Vorschlag der Partitionierung die wir so übernehmen können.

image

Hier ebenfalls mit Next die Installation fortsetzen. Als Zeitzone wähle ich Europe und Germany und drücke abermals den Next Button.

Der Benutzer der im nächsten Schritt angelegt wird, findet später seine Verwendung für alle Aufrufe mit sudo.

image

Mit der Übersicht der gewählten Parameter kann die Installation starten.

image

Die gut 800 Pakete mit knapp 2GB Gesamtgröße installiert das Setup relativ schnell, für einen Kaffee reicht es aber trotzdem Smile

Konfiguration der Netzwerk-Adapter

Nach dem Neustart kann das ISO von der VM entfernt werden und die Anmeldung erfolgen.

image

YaST wird danach mit dem sudo Befehl gestartet und alle weiteren Schritte erfolgen im YaST Control Center unter System / Network Settings.

image

Als erstes verpassen wir der Netzwerkkarte eine feste IP (172.16.16.253/24). Dazu wird mit Edit die Konfiguration bearbeitet. Innerhalb von YaST springt man mit der TAB-Taste zwischen den einzelnen Menüpunkten hin und her. Zusätzlich zur IP-Adresse setze ich auch gleich den Hostnamen.

image

Mit Next bekommen wir wieder die Übersicht über die gemachten Einstellungen.

image

In den Einstellungen System / Network Settings / Hostname / DNS trage ich nochmals einen statischen Hostnamen ein und dazu noch die beiden im Netzwerk vorhandenen DNS-Server.

Mit Quit wird YaST beendet und die VM heruntergefahren, was wieder mit einem sudo shutdown erfolgt. Das Herunterfahren der VM ist notwendig, da ich zwei weitere  Netzwerk-Adapter hinzufüge die mit den Netzen 192.168.110.0/24 und 192.168.120.0/24 konfiguriert werden.

image

Der Trick, nur einen der beiden neuen Netzwerk-Adapter zu verbinden funktioniert unter Linux leider nicht, beide werden als Not Connected dargestellt. Nach dem Start der VM sind beide Netzwerk-Adapter zusätzlich sichtbar und können konfiguriert werden.

image

Welcher nun der richtige Adapter ist, lässt sich über die MAC-Adresse herausfinden.

image

Der Adapter eth1 bekommt nun die IP-Adresse 192.168.110.1/24 und dient zukünftig als Gateway für dieses Subnetz.

image

Analog dazu Adapter eth2 mit der Konfiguration 192.168.120.1/24 hier die Zusammenfassung aller Netzwerk-Adapter.

image

Was fehlt nun eigentlich noch? Richtig, wir haben das Routing selbst nicht aktiviert und ein Gateway ist ebenfalls noch nicht konfiguriert. Das erfolgt in den nächsten beiden Schritten.

Gateway und Routing

Die bisher gemachten Konfigurationen kann man mit der Auswahl von Next einfach mal schreiben lassen und hat diese damit gesichert.

Danach sind wir wieder im YaST Control Center unter System / Network Settings unterwegs.

image

Dort wird unter Network Settings / Routing die Weiterleitung für IPv4 aktiviert (wer hier IPv6 benötigt, bitte zusätzliche diese Option auswählen).

image

Damit fehlt nur noch das Gateway und das ist im YaST in der Textversion nach meiner Meinung fies versteckt.

Der Dialog zur Konfiguration ist unter System / Network Settings / Routing und dann unter der Option Add zu finden.

image

Hier wird das Gateway 172.16.16.1 für den Adapter mit der IP-Adresse 172.16.16.253 konfiguriert und damit die Konfiguration abgeschlossen.

Wer will, kann die VM nochmals neustarten. Bei mir hat es ohne diesen geklappt und der Router war fast fertig, denn natürlich muss noch die Firewall konfiguriert werden, sonst geht bei der Einstellung default nur der Ping durch.

Konfiguration der Firewall

Die Firewall in openSUSE verwendet Zonen, die eine Sammlung von geöffneten Ports und Protokollen darstellen. Ich habe die Firewall auf trusted gesetzt, damit ist ein interner Datenverkehr ohne weiteren Einschränkungen möglich.

image

Dazu werden die Netzwerk-Adapter mittels YaST von der Zone default in die Zone trusted geändert.

image

Enjoy it, b!

IPv6 Configuration OpenSuse Leap

Verwendet man eine FRITZ!Box in seinem LAN dann kann einem die schwer kontrollierbare Vergabe von IPv6-Adressen durchaus Probleme machen. Das Deaktivieren von IPv6 auf allen Windows Systemen halte ich hier für keine saubere Lösung, vielmehr habe ich mich dazu entschlossen die IPv6-Adressen selbst zu vergeben. Darüber will ich in diesem Blog aber gar nicht schreiben, sondern wie einem openSUSE Server eine funktionierende IPv6 Konfiguration eingestellt werden kann.

Eckdaten

  • IPv6 Adresse für den OpenSuse Server: fd8e:5644:167b:100a::18
  • IPv6 Adresse für den Router / Gateway: fd8e:5644:167b:100a::1
  • Interface für die Konfiguration: eth0

Konfiguration

Im Gegensatz zu Windows, ist es bei Linux möglich IP-Adressen nur zur Laufzeit zu konfigurieren oder aber statisch, damit die Konfiguration einen Neustart überlebt.

Die Konfiguration zur Laufzeit ist dabei recht einfach, benötigt aber die Rechte des SU.

# ip -6 address add fd8e:5644:167b:100a::18/64 dev eth0

# ip -6 route add default via fd8e:5644:167b:100a::1 dev eth0

Statisch erfolgt die Konfiguration wie folgt:

# cd /etc/sysconfig/network

# vi ifcfg-eth0

# hinzufügen der folgenden Zeilen ans Ende der Datei (ifcfg-eth0)
LABEL_0='0'
IPADDR_0='fd8e:5644:167b:100a::18'
PREFIXLEN_0='64'

# echo 'default fd8e:5644:167b:100a::1 - -' >> /etc/sysconfig/network/routes

Damit die Konfiguration aktiv wird, entweder den Server neu starten oder den folgenden Befehl ausführen.

# service network restart

Enjoy it, b!

Hyper-V Linux VM Boot Problem

Für einen aufwendigeren Test hatte ich mir unter Hyper-V eine Linux VM (Generation 2 mit CentOS 7.4) konfiguriert, mit der Absicht deren Disk für eine Reihe weiterer VMs zu verwenden … analog zum SysPrep von Windows.

Der Boot einer neuen VM mit der kopierten Linux VHDX ging aber sofort, mit der folgenden Meldung daneben.

image

Die Lösung des Problems ist, wenn man die notwendigen Schritte kennt nicht sonderlich schwer. Eigentlich haben wir ein Problem mit dem Bootloader von Linux.

Im ersten Schritt schalten wir die VM über das Hyper-V Management aus und fügen im Anschluss (wenn die VM aus ist) ein Linux ISO hinzu. Danach verändern die Boot Reihenfolge so, dass die VM von der DVD (sprich dem ISO Image startet).

image

Die Änderung erfolgt unter Change Hardware/Firmware/Boot order im Hyper-V Management und sollte das DVD-Laufwerk an erster Stelle haben.

  1. DVD Drive
  2. Hard Drive
  3. Network Adapter

Nun wird die VM wieder eingeschaltet und es erfolgt ein Boot von der DVD. Innerhalb des Boot-Menüs erfolgt dann die Auswahl Select Troubleshooting / Rescue a CentOS system.

image

Linux erkennt nun die vorhandene Installation und mounted diese unter /mnt/sysimage

Damit liegt unser Boot-Verzeichnis unter /mnt/sysimage/boot/efi/EFI und wir können das mit Hilfe der folgenden Schritte reparieren.

# Wechsel in das EFI Verzeichniss
cd /mnt/sysimage/boot/efi/EFI
# "Weg-Kopieren" des Boot files
cp -r centos/ boot
# ODER ALTERNATIV bei Ubuntu
cp -r ubuntu/ boot
mv fbx64.efi grubx64.efi

Nun fahren wir das Linux System wieder runter …

shutdown

… schalten die VM aus und ändern erneut die Boot-Reihenfolge unter Change Hardware/Firmware/Boot order im Hyper-V Management damit nun die VHD an erster Stelle steht.

  1. Hard Drive
  2. DVD Drive 
  3. Network Adapter

Damit startet mein CentOS ohne Probleme.

Enjoy it, b!

Lenovo T410 aktivieren von Bluetooth unter Windows 10

Um an einem Lenovo Notebook Bluetooth zu aktivieren gibt es eine Vielzahl von Möglichkeiten, welche hier im thinkwiki sehr gut beschrieben sind.

Mit einem Lenovo T410 (ein älteres Modell) hatte ich hier so meine Probleme. Ein Bekannter wollte daran eine Microsoft Bluetooth-Maus aktivieren was einfach nicht klappen wollte.

Bei solchen Problemen schaue ich als erstes in den Gerätemanager um nach deaktivierten oder nicht sauber installierten Geräten zu suchen.

Im Gerätemanager (auch nach der Anzeige von versteckten Geräten) waren aber keine Auffälligkeiten zu finden … nur das halt der Bluetooth-Stack garnicht vorhanden war.

OK, ein Blick ins BIOS des Notebooks (Blaue Taste beim Start) zeigte, dass Bluetooth aktiviert ist. Damit konnte ich schon einmal die Aussage, dass dieses Notebook KEIN Bluetooth hätte, entkräften.

Die Installation des Lenovo Hotkey-Utilities unter Windows brachte aber auch keine Lösung. Normaler weise kann der Bluetooth-Stack mit FN+F5 aktiviert oder deaktiviert werden.

Nach einiger Recherche im Internet bin ich auf den Hinweis gestoßen, dass Notebook mit einer Linux-Live-CD zu booten und 1x FN+F5 unter Linux zu drücken (angezeigt wird bei dieser Aktion nichts!), außer das der Bluetooth-Stack aktiviert wird.

So richtig glauben wollte ich die Sache nicht, aber einen Versuch war es wert. In Ermangelung einer Live-CD habe ich meinen c’t Desinfect USB Stick verwendet, damit das Notebook gestartet, und genau 1x FN+F5 gedrückt. Wie beschrieben passierte augenscheinlich nichts, aber in der Systemsteuerung unter Linux war nun Bluetooth vorhanden und ich konnte hier, unter Windows die Maus koppeln … und wenn es unter Linux geht, dann muss es auch unter Windows gehen.

Nach einem Neustart mit Windows 10 hat sich, der nun aktivierte Bluetooth-Stack mit dem aktuellen Treiber versorgt und auch hier klappte die Kopplung der Maus ohne Probleme.

Der Hintergrund ist wohl der, dass wenn der Bluetooth-Stack deaktiviert Windows dafür keinen Treiber lädt, welchen aber wiederum der Hotkey FN+F5 zur Aktivierung / Deaktivierung benötigt. Erfolgt nun bei deaktiviertem Bluetooth eine Neuinstallation, so dreht man sich mi Kreis. Ohne Treiber keine Aktivierung von Bluetooth, und ohne aktiven Bluetooth-Stack keine Installation des Treibers …

Abschließend hatte Linux hier die Lösung gebracht!

Know your gear, b!