IPv6 auf einem Ubuntu 18.04 Server deaktivieren

Selbst in der heutigen Zeit bereiten Server die sowohl eine IPv4 als auch eine IPv6 Adresse haben manchmal Probleme. Deshalb kann es nützlich sein, wenn man die IPv6 Adressen eines Server komplett deaktiviert. Bei Ubuntu 18.04 LTS geht das wie folgt.

Man legt die Datei /etc/sysctl.d/01-disable-ipv6.conf mit dem folgenden Inhalt an und startet den Server hinterher neu.

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1

Test einer Synology DS416play mit DSM 6.1

Synology DS416play

Die taiwanische Firma Synology wurde im Jahr 2000 von den ehemaligen Microsoft Managern Cheen Liao und Philip Wong gegründet und hat sich zum Ziel gesetzt Network Attached Storage-Geräten (kurz NAS) mit umfangreicher Software auf Basis von Linux zu bauen. Dabei nennt Synology die Hardware DS (DiskStation) und die Software DSM (DiskStation Manager).

Als ich vor 10 Jahren die ersten NAS (Network Attached Storage) Geräte von Synology eingerichtet habe, war ich bereits überrascht wir groß der Funktionsumfang der Software und die Anpassungsmöglichkeiten dieser Geräte waren. Man merkte den Geräten aber an, dass sie eher für kleinere Firmen und den privaten Gebrauch gebaut wurden. Für den Einsatz in großen Firmennetzen waren sie noch nicht reif.

Inzwischen hatte ich einige Jahre keine Synology mehr in der Hand und es wurde höchste Zeit, sich so ein Gerät mit der aktuellen Software mal wieder näher anzuschauen. Als zudem noch mein Speicherplatz für das Backup meiner privaten Daten knapp wurde, beschoss ich mir ein aktuelles NAS der Firma Synology zuzulegen und dieses genauestens unter die Lupe zu nehmen.

Welches NAS von Synology ist für mich das beste?
Zunächst stellte sich die Frage, welches der aktuellen NAS-Geräte von Synology am ehesten für meine Bedürfnissen passt. Synology bietet inzwischen über 20 unterschiedliche NAS Geräte an, die für verschiedenste Einsatzzwecke ausgelegt sind. Es gibt sowohl für den Privatanwender als auch für Firmen verschiedener Größenordnungen passende Geräte zu finden. Für mich persönlich war eine große Speicherkapazität und ein geringer Stromverbrauch wichtig. Außerdem wollte ich gerne eine etwas leistungsfähigere CPU, um 4k Videos von dem NAS auf den Fernseher übertragen zu können. Nach einer Recherche im Internet entschied ich mich für das Model DS416play welches es aktuell bei Amazon für 442,19- € gibt. Es kann mit vier Platten bestückt werden und bringt eine etwas leistungsstärkere CPU mit. Mit vier Festplatten mit einer Größe von 4 TB und der Verwendung eines RAID (Redundant Array of Independent Disks) mit einer Festplatte für Redundanz erhält man über 10 TB Speicherplatz. Für meine privaten Zwecke ist das zunächst ausreichend. Zudem reicht die CPU der DS416play, um 4k Videos zum Fernseher zu übertragen.

Zusammenbauen und einrichten
Das zusammenbauen und einrichten des NAS ist für jemanden mit Computerkenntnissen schnell erledigt. Die Festplatten können ohne Schrauben eingebaut werden. Sobald man das Gerät anschaltet, holt es sich eine IP-Adresse per DHCP und ist über die URL http://diskstation:5000 erreichbar. Wenn man diese URL im Browser aufruft, landet man auf dem Desktop des DSM (DiskStation Managers). Dort kann man in der Systemsteuerung die Konfiguration des Gerätes vornehmen. Die vier von mir verbauten Festplatten hatte das NAS bereits automatisch zu einem SHR1 (Synology Hybrid RAID) zusammengefasst. Bei Bedarf kann das NAS natürlich auch andere RAID-Arten. Das SHR1 dürfte für die meisten aber auch das geeignetste RAID sein, da es am flexibelsten ist. Danach ist das Gerät prinzipiell einsatzbereit. Es gibt natürlich noch haufenweise kostenlose und kostenpflichtige Zusatzsoftware, die man über das sogenannte „Paket-Zentrum“ installieren kann. Ähnlich wie bei einem iPhone, ist das NAS damit nach Bedarf erweiterbar und kann zu einem kleinen Server mit diversen Funktionalitäten ausgebaut werden.

Fazit
Die NAS Systeme von Synology sind extrem erweiterbar, haben ein sehr gutes Preis-Leistung-Verhältnis und sind fast schon kleine Applikationsserver mit diversen Funktionen. Für den privaten Gebrauch und für kleine Firmen sind sie völlig ausreichend und mehr Leistung und mehr Funktionen sind für das Geld nicht zu bekommen. Ich kann diese Geräte sehr empfehlen.

Wenn man möchte gibts die Synology DS416play bei Amazon auch bereits bestückt mit Festplatten. Die Variante mit 12 TB Speicherplatz kostet bei Amazon aktuell z.B. gerade 995,- €.

Wenn Server nach einem Neustart die Netzwerkkarten vertauscht haben

Ich hatte letztlich das Problem, dass sich Netzwerkkarten bei Linux und Windows nach einem Neustart immer wieder vertauschten. Da die Server dadurch über Netzwerk nicht mehr erreichbar sind und ausfallen, ist das natürlich sehr ärgerlich. Da ich jetzt gerade eine neuen Firewall auf Basis von Ubuntu Linux mit 9 Netzwerkkarten und 100 VPN-Tunneln eingerichtet habe, wollte ich das Problem auf jeden Fall verhindern. Deshalb habe ich das Problem noch mal genauer untersuch und viel Doku dazu gelesen. Jetzt ist mir klar warum das Problem auftritt und ich kann es zukünftig verhindern.

Ursache: Da die Betriebssysteme zum schnellen Booten alles parallel starten, kommt es beim Booten regelmäßig dazu, dass die Hardwaretreiber in anderer Reihenfolge geladen werden. Wenn man im Server zwei Netzwerkkarten mit unterschiedlichen Treibern hat, kann dabei die Reihenfolge vertauscht werden, in der die Treiber geladen werden. Da bei älteren Windows- und Linuxservern die Netzwerkkarten einfach nur anhand der Startreihenfolge durchnummeriert werden, kann es somit vorkommen, dass die IP-Konfiguratiuonen der Karten durcheinander gewürfelt werden.

Lösung bei neueren Betriebssystemen: Bei neueren Betriebssystemen wird das Vertauschen der Karten verhindert. Windows merkt sich inzwischen für welche Karte eine Konfiguration war und zählt bei neuen Karten einfach immer weiter hoch. Es bindet (vermutlich anhand der Mac-Adresse oder Seriennummer) die Konfiguration fest an eine Netzwerkkarte und vergibt eine bereits vergebene Nummer kein zweites mal. Deshalb hat man bei Windows auch machmal einen Netzwerkadapter 5 oder 6, obwohl aktuell nur eine Karte im Betriebssystem steckt. Bei Linux wird der Steckplatz der Karte mit in den Namen der Netzwerkkarte aufgenommen. Eine Netzwerkkarte auf PCI-Slot 2 heißt dann z.B. p2p1, wobei das p2 dann für den PCI-Slot 2 und das p1 für den ersten Port der Karte steht. Theoretisch kann man bei Linux also eine neue Karte in den gleichen Slot stecken und die Konfiguration sollte noch funktionieren.

Das Tunneln von X11 über SSH bei Ubuntu 14.04 geht nicht

Zu meiner Überraschung funktionierte das Tunneln von X11 über ssh auf einem Ubuntu 14.04 Server nicht mehr. Schon beim Login über den Befehl

ssh -X <Hostname>

gibt es den Fehler „X11 forwarding request failed on channel 0“,
obwohl in der /etc/ssh/sshd_config der Eintrag „X11Forwarding yes“ gesetzt ist.

Auch eine Installation der der XServer Utils

apt-get install x11-xserver-utils

brachte keine Lösung und nicht einmal xclock lief.

Nach ein bisschen Suchen stellt ich fest, dass das Paket xauth fehlt. Wenn man dieses nachinstalliert funktioniert auch das Tunneln von X11 über SSH wieder.

apt-get install xauth

VPN-Anbindung eines Internetservers mit strongSwan 4.2

Bei mir kommt es immer häufiger vor, dass ein Webserver Zugriff auf sensible Dienste eines Servers im internen Netzwerk erhalten soll. Um diesen Zugriff so sicher wie möglich zu gestallten, sollte die dazu notwendige Netzwerkverbindung verschlüsselt werden. Also muss eine VPN-Verbindung her.

Bei Linux-Servern kann man diese Verbindung ganz einfach mit der Software strongSwan einrichten. Bei den meisten Linux-Distributionen ist das dazu nötige Paket enthalten und schnell installiert. Bei Ubuntu 12.04 geht dies z.B. ganz einfach mit dem folgenden Befehl:

sudo apt-get install strongswan

Um die software einzurichten ist noch ein geheimes Kennwort für den Verbindungsaufbau und eine Konfiguration für die VPN-Verbindung notwendig. Das Kennwort wird in der Datei /etc/ipsec.secrets festgelegt. Wenn der Internetserver die IP 144.133.122.111 und die Firewall des internen Netzwerkes die IP 143.132.121.110 hat, müsste die Datei die folgende Zeile beinhalten (das Kennwort sollte natürlich anders sein):

144.133.122.111 143.132.121.110 : PSK 'HierKommtEinGeheimesLangesKennwortHin'

Die Konfiguration der VPN-Verbindung erfolgt in der Datei /etc/ipsec.conf. Für eine Verbindung mit dem Namen InternesNetzwerk kommt der folgende Abschnitt in die Datei:

conn InternesNetzwerk
        left=144.133.122.111
        leftsubnet=144.133.122.111/255.255.255.255
        right=143.132.121.110
        rightsubnet=172.30.4.0/255.255.255.0
        leftid="144.133.122.111"
        rightid="143.132.121.110"
        ike=aes128-sha-modp1536,aes128-sha-modp1024,aes128-md5-modp1536,aes128-md5-modp1024,3des-sha-modp1536,3des-sha-modp1024,3des-md5-modp1536,3des-md5-modp1024
        esp=aes128-sha1,aes128-md5,3des-sha1,3des-md5
        ikelifetime=1h
        keylife=8h
        dpddelay=30
        dpdtimeout=120
        dpdaction=restart
        pfs=yes
        authby=secret
        auto=start
	keyexchange="ikev1"

Bei der Verbindung werden die zuvor schon genannten IP-Adressen von Webserver und Firewall verwendet. Ferner ist ein interner IP-Bereich 172.30.4.0/24 für das interne Netzwerk konfiguriert. Für die IPSec Verbindung wurde IKE in der Version 1, Dead Peer Detektion, Perfect Forward Seurity und einige andere übliche Einstellungen gesetzt. All diese Einstellungen müssen natürlich den jeweiligen Gegebenheiten angepasst werden. Außerdem müssen die IPSec Parameter denen der Firewall entsprechen.

Wenn auch die Firewall auf der Gegenseite eingerichtet ist, lässt sich die Konfiguration durch einen Neustart von strongSwan bzw. IPSec aktivieren.

sudo /etc/init.d/ipsec restart

Danach kann man sich mit dem Befehl

sudo ip xfrm state

oder dem Befehl

sudo ip xfrm policy

anzeigen lassen, ob ein Tunnel zustande gekommen ist. Eventuelle Fehlermeldungen sind wie immer in der Datei /var/log/syslog zu finden. Wenn man die letzen 50 Zeilen anzeigen lassen möchte also einfach den folgenden Befehlt eingeben:

tail /var/log/syslog -n 50

Windows Ereignis-ID 50: Time-Service Zeitdifferenz von mehr als 5000

Wenn ein Windows-Server eine Zeitdifferenz von mehr als 5000 auf 900 Sekunden feststellt, wird die Synchronisation der Systemzeit angehalten und der Server gibt selber keine Zeiten mehr raus. Dies kann z.B. durch eine schlechte Netzwerkanbindung oder eine defekte Hardwareuhr kommen. Um in diesem Fall die Synchronisation wieder zu aktivieren, gibt man auf der Kommandozeile den folgenden Befehl ein:

W32TM /resync

Ob die Zeit wieder synchronisiert wird kann man sich dann mit dem folgenden Befehl anschauen:

W32TM /query /status

Statische, interne Route auf einem IPCop Version 2 setzen

Das setzen einer statischen und permanenten Route ist bei dem IPCop etwas kryptisch, da es dafür kein Menü gibt. Deshalb hier mal ein kleines Beispiel. Um das interne Netzwerk 192.168.140.0/24 auf das Gateway 172.30.1.9 zu routen, müssen in die datei /etc/rc.d/rc.event.local die folgenden Zeilen geschrieben werden.

if [ ${1} == "network" -a ${2} == "up" ]; then
    /sbin/ip route add 192.168.140.0/24 via 172.30.1.9
fi

Virtualisierung mit KVM und libvirt unter Ubuntu 10.04

Um eine virtuelle Maschine mit libvirt einzurichten, benötigt man als erstes ein virtuelles Netzwerk. Dazu legt man unter /etc/libvirt/qemu/networks eine XML-Datei an oder editiert die dort bei der Installation angelegte default.xml. Wenn man sich z.B. für das virtuelle Netzwerk 192.168.34.0/24 entschieden hat, könnte diese Datei wie folgt aussehen:

<network>
  <name>subnetz1</name>
  <forward dev='eth0' mode='route'/>
  <bridge name='virbr2' stp='off' forwardDelay='0' />
  <ip address="192.168.34.1" netmask="255.255.255.0" />
</network>

Die fertige XML-Datei wird nach dem speichern und mittels virsh net-define in libvirt bekannt gemacht. Das neue Netzwerk hat in libvirt den Namen subnetz1. Wenn man nur die default.xml editiert hat entfällt dieser natürlich, da dieses Netz bereits bekannt ist.

Nach dem Aufruf von virsh net-autostart subnetz1 ist sichergestellt, dass das Netzwerk auch tatsächlich nach jedem Systemstart sofort verfügbar ist. Mit virsh net-start subnetz1 aktiviert man das Netz von Hand.

Damit die virtuelle Maschine mit der Außenwelt kommunizieren kann, muss jetzt noch IP Forwarding aktiviert werden. Bei Debian/Ubuntu wird das Forwarding in der Datei /etc/sysctl.conf aktiviert. In ihr sollte die folgende Zeile stehen:

net.ipv4.ip_forward=1

Danach kann eine neue virtuelle Maschine angelegt und gestartet werden. Diese muss dann nur noch eine freie IP-Adresse aus dem virtuellen Netzwerk bekommen und kann danach gestartet werden.

1-wire Wetterstation (Teil 3: Anzeige)

Nachdem man sich eine 1-wire Wetterstation nach dem Artikel 1-wire Wetterstation (Teil 1: Installation) gebaut und die Daten wie im Artikel 1-wire Wetterstation (Teil 2: Datenbank) beschrieben in einer MySQL Tabelle speichert möchte man die gesammelten Werte natürlich auch angezeigt bekommen.

Um möglichst einfach die gemessenen Werte der Wetterstation in einer Webseite anzuzeigen, habe ich die jpgraph verwendet. Diese Software darf für private Zwecke kostenlos verwendet werden. Da sie ansonsten Geld kostet ist sie nicht im Repository zu finden. Man kann sie aber unter der URL http://jpgraph.net/download runterladen. Ich habe mir von dort die aktuelle Version 3.07 geholt und in das Verzeichnis /usr/share/jpgraph3 entpackt. Danach benötigt man noch das Paket php5-gd. Diese ist im Repository enthalten und kann mit dem folgenden Befehl installiert werden.

apt-get install php5-gd

Um aus den gesammelten Wetterdaten eine Grafik mit den Werten des letzten Tages erstellen zu lassen, habe ich das Verzeichnis /var/www/grafiken angelegt und das folgenden PHP-Programm geschrieben, welches die Grafiken aus erzeugt.

Anschließend habe ich zum anzeigen der Grafiken die folgende, einfache HTML-Seite geschrieben und in das Verzeichnis /var/www gelegt.

Das Ergebnis sieht dann ungefähr so aus:

1-wire Wetterstation (Teil 2: Datenbank)

Nachdem man sich eine 1-wire Wetterstation nach dem Artikel 1-wire Wetterstation (Teil 1: Installation) gebaut hat, ist es sinnvoll die gesammelten Daten in einer Datenbank zu speichern. Dazu habe ich mir eine MySQL-Datenbank angelegt.

mysql -u root -p
CREATE DATABASE wetterstation;
quit

In der Datenbank wird danach noch eine Tabelle für die Werte der 1-wire Sensoren benötigt. Da ich pro Minute einen Wert festhalten will habe ich diese daten_min genannt.

mysql -u root -p
connect wetterstation; 
CREATE TABLE daten_min ( 
zeitstempel int UNSIGNED, 
temp_clara FLOAT(7,4) NOT NULL, 
humidity_clara FLOAT(7,4) NOT NULL, 
temp_simon FLOAT(7,4) NOT NULL, 
humidity_simon FLOAT(7,4) NOT NULL, 
PRIMARY KEY (`zeitstempel`));
quit

Zum Schluss habe ich mir dann noch ein PHP-Programm geschrieben, dass die Werte der Sensoren abfragt und in die Tabelle schreibt. Dieses habe ich in der Datei /usr/local/sbin/datensammeln.php gespeichert.

<?php
$DatabaseHost = "localhost";
$DatabaseUser = "root";
$DatabasePassword = "geheim";
$Database = "wetterstation";
$Table = "daten_min";
 
// Aktuelle UNIX-Zeit abfagen
date_default_timezone_set("Europe/Berlin");
$zeitstempel = date("U");
 
// ##### Werte der Sensoren abfragen #####
// Claras Zimmer
$temp_clara = file_get_contents("/var/1wire/26.7ECCCF000000/temperature");
$humidity_clara = file_get_contents("/var/1wire/26.7ECCCF000000/humidity");
 
// Simons Zimmer
$temp_simon = file_get_contents("/var/1wire/26.A0AECF000000/temperature");
$humidity_simon = file_get_contents("/var/1wire/26.A0AECF000000/humidity");
 
// ##### Daten in die Datenbank schreiben #####
$DatabasePointer = mysql_connect($DatabaseHost, $DatabaseUser, $DatabasePassword) or die ("Keine Verbindung moeglich");
mysql_select_db($Database, $DatabasePointer) or die ("Die Datenbank existiert nicht");
$ResultPointer = mysql_query("INSERT INTO $Table (
     zeitstempel, temp_clara, humidity_clara, temp_simon, humidity_simon
   ) VALUES (
     '$zeitstempel', '$temp_clara', '$humidity_clara', '$temp_simon', '$humidity_simon'
   )");
?>

Damit man php in der Shell laufen lassen kann wird übrigens das Paket php5-cli benötigt. Dieses kann man mit dem folgenden Befehl installieren

apt-get install php-cli

Zum Schluss habe ich einen Cronjob angelegt, der alle 60 Sekunden das PHP-Script ausführt.