7Oct/135

IPv6 auf Ihrem Server einrichten

Mit der kürzlichen Einführung von IPv6 in unserem Rechenzentrumsnetzwerk sollten neu installierte Server bereits mit einer IPv6-Adresse ausgestattet sein. Für bestehende Installationen, welche nicht neu installiert werden sollen oder Colocation-Geräte, deren Betriebssystem nicht mit unserer Deployment-Lösung installiert wurde, muss die erforderliche Konfiguration manuell hinterlegt werden. Dieser Leitfaden soll Ihnen genügend Informationen geben, um IPv6 auf Ihrem Server einzurichten.

Informationen erhalten

Wir haben bereits jeder Ihrer Leistungen eine IPv6-Adresse zugeordnet. Sie können diese Adresse in Ihrem Kundenlogin finden. Dort sollte sie in etwa wie folgt zu sehen sein:

ipv6ccp

Verwenden Sie nicht den im obenstehenden Bild gezeigten IPv6-Adressbereich "2a02:c200:0:10:3:0:7:1", sondern Ihren eigenen.

Zusätzlich benötigen Sie die folgenden Angaben, um die Einrichtung abzuschließen:

Netzmaske / Präfix-Länge: 64
Gateway-Adresse: fe80::1

Wenn das /64-Netzwerk für Ihren Server mit "2a02:c205" beginnt, nutzen Sie bitte folgende DNS-Server:

Resolver/DNS server 1: 2a02:c205::1:53
Resolver/DNS server 1: 2a02:c205::2:53

Wenn das /64-Netzwerk für Ihren Server mit "2a02:c207" beginnt, nutzen Sie bitte folgende DNS-Server:

Resolver/DNS server 1: 2a02:c207::1:53
Resolver/DNS server 1: 2a02:c207::2:53

Erstkonfiguration (Linux-basierte Betriebssysteme)

Bevor Sie diese IPv6-Adresse in die Konfigurationsdateien eintragen, damit die Änderungen auch nach einem Neustart des Servers erhalten bleiben, können Sie diese auch manuell einrichten. In diesem Beispiel wird die IPv6-Adresse 2001:db8::1 verwendet. Bitte ersetzen Sie sie mit der entsprechenden Adresse des zu konfigurierenden Servers. Falls Ihre Netzwerkkarte nicht eth0 ist, muss auch dieser Wert angepasst werden.

Fügen Sie die Adresse der Netzwerkschnittstelle im Format / hinzu:

ip addr add 2001:db8::1/64 dev eth0

Sie können überprüfen, ob die Adresse korrekt aktiviert wurde, in dem Sie folgenden Befehl ausführen:

ip -6 addr show

Hier sollten neben einigen anderen Ausgaben auch folgende Zeilen auftauchen:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2001:db8::1/64 scope global valid_lft forever preferred_lft forever

Um die weite IPv6-Welt erreichen zu können, wird eine Route benötigt, welche folgendermaßen angelegt werden kann:

ip route add default via fe80::1 dev eth0

Auch hier können Sie die Einstellung überprüfen, indem Sie Folgendes ausführen:

ip -6 route show

Die Ausgabe sollte folgendermaßen aussehen:

default via fe80::1 dev eth0 metric 1024 mtu 1500 advmss 1440 hoplimit 4294967295

Sie können nun Ihre IPv6-Konnektivität mit dem Befehl ping6 testen:

ping6 2a02:c205:0:5001::1

Änderungen permanent speichern (Linux-basierte Betriebssysteme)

Unterschiedliche Betriebssysteme haben verschiedene Vorgehensweisen, die Netzwerk-Konfiguration vorzunehmen. Falls nötig, schauen Sie bitte in die entsprechende Dokumentation zu Ihrem Betriebssystem. Beispiel-Konfigurationen für Debian / Ubuntu und CentOS / Fedora / RedHat sehen Sie hier. Bitte seien Sie bei der Einrichtung sehr umsichtig, eine fehlerhafte Konfiguration kann zu einer Nicht-Erreichbarkeit Ihres Servers führen.

Debian / Ubuntu

Bearbeiten Sie die Datei /etc/network/interfaces und fügen Sie die folgenden Zeilen ein:

iface eth0 inet6 static
address 2001:db8::1
netmask 64
gateway fe80::1
accept_ra 0
autoconf 0
privext 0

CentOS / Fedora / RedHat

Stellen Sie sicher, dass IPv6 generell aktiviert ist. Dazu die Datei /etc/sysconfig/network bearbeiten und falls nicht schon vorhanden die folgende Zeile einfügen:

NETWORKING_IPV6 = yes

Dann fügen Sie die IP-Konfiguration in der Datei /etc/sysconfig/network-scripts/ifcfg-eth0 hinzu:

IPV6INIT = yes
IPV6ADDR = 2001:db8::1/64
IPV6_DEFAULTGW = fe80::1
IPV6_DEFAULTDEV = eth0

Dies sollte sicherstellen, dass die IPv6-Adresse nach einem Neustart des Servers wieder aktiviert wird.

Einrichtung unter Windows Server Betriebssystemen

Klicken Sie nach der Anmeldung per RDP auf "Start" > "Control Panel" > "Network and Internet" > "Network and Sharing Center". Klicken Sie auf "Change Adapter Settings" auf der linken Seite. Rechtsklicken Sie auf das Icon für die Netzwerkverbindung, wählen Sie "Properties" aus dem Menü aus:

IPv6-Windows-1

Markieren Sie den Eintrag "Internet Protocol Version 6 (TCP/IP)" aus der Liste, stellen Sie sicher, dass der Haken gesetzt ist und klicken Sie wieder auf "Properties". Tragen Sie die Informationen wie auf dem Screenshot zu sehen ein:

IPv6-Windows-2

Klicken Sie auf "OK", um die Dialoge zu schließen und die Änderungen zu speichern.

Ihr Server ist trotzdem nicht via IPv6 erreichbar?

Falls Sie Ihren Server nach diesen Änderungen von Ihrem Computer aus nicht via IPv6 erreichen können, obwohl das ping6-Kommando eine Antwort lieferte, dürfte IPv6 in Ihrem lokalen Netzwerk noch nicht aktiviert sein. Bitte prüfen Sie dies als erstes und kontaktieren Sie gegebenenfalls Ihren ISP.

Posted by: Markus | Tagged as: , , , , , 5 Comments
27Aug/130

Prozesse mit Supervisor kontrollieren

Ein bestimmtes Programm ablaufen zu lassen ist häufig ein Grund um einen virtuellen oder dedizierten Server zu betreiben. Wenn das Programm als Teil der verwendeten Linux-Distribution verfügbar ist, reicht das Installieren des Paketes und das Bearbeiten der Konfigurationsdateien üblicherweise aus. Falls das Programm aber aus einer externen Quelle kommt oder eine Eigenentwicklung ist, steht man selbst vor der Aufgabe dafür zu sorgen, dass es beim Systemstart automatisch gestartet wird. Außerdem ist es in der Entwicklungsphase oft sinnvoll, das Programm automatisch neu starten zu lassen, falls es durch einen Fehler abbricht. Vor einigen Jahren war es relativ einfach, ein Programm bei Systemstart starten zu lassen. Es musste nur ein passendes init-Script erstellt werden. Seit einiger Zeit setzen einige Linux-Distribution für den Systemstart auf upstart oder systemd anstelle von init. Passende Konfiguration für alle Systeme bereitzustellen kann recht aufwendig werden. Zudem besitzen upstart undsystemd zwar eine Option zum automatischen Neustart eines Programms, die gleiche Funktionalität in init zu benutzen erfordert aber das Verändern der Konfigurationsdatei des initd.

Für den Eigenbedarf nutze ich selbst seit einiger Zeit supervisor zur Lösung dieses Problems. Auf http://supervisord.org finden Sie sowohl das Programm selbst als auch die Dokumentation dazu. Bei den meisten Linux-Distributionen gibt es aber schon Pakete dafür in den Repositories. Supervisor wird bei Systemstart von init oder einer der Alternativen automatisch gestartet. Um das eigene Programm damit zu betreiben muss es in der Konfiguration des supervisor bekannt gemacht werden.

Als Beispiel habe ich hier eine Webapplikation in Python geschrieben, erstellt mit dem bottle Framework (http://bottlepy.org). Da dies kein Tutorial zur Webprogrammierung sein soll, ist das Programm sehr einfach.

1 from bottle import route, run
2
3 @route('/')
4 def index():
5     return 'Hello World'
6
7 run(host='0.0.0.0', port=8080)

Dieses Programm startet einen Webserver auf Port 8080 und zeigt 'Hello World' an, wenn man mit einem Webbrowser darauf zugreift. Das Programm wird in der Datei app.py gespeichert und anschließen mit python app.py ausgeführt. Es läuft dann bis es manuell beendet wird oder abstürzt. Dies ist ein guter Zeitpunkt um die Konfiguration von Supervisor durchzuführen damit dieser unser Programm ausführt. Supervisor stellt ein Kommandozeilenprogramm bereit, mit dem der aktuelle Status abgerufen werden kann bzw. konfigurierte Programme gestartet oder gestoppt werden können. Der Aufruf von supervisorctl status zeigt uns... nichts, denn wir haben noch keine Einstellung vorgenommen. Wir legen eine Datei hello.conf an und speichern sie in /etc/supervisor/conf.d/ ab. Diese enthält die nötigen Parameter damit Supervisor unser Programm steuern kann. Die einfachste Konfiguration enthält einen Namen für unser Programm, das Kommando, das ausgeführt werden soll und einen Benutzernamen unter dem das Programm ausgeführt werden soll. Wird der Benutzername weggelassen, wird das Programm als root ausgeführt - in den meisten Fällen ein unnötiges Sicherheitsrisiko.

[program:hello]
command=/usr/bin/python /home/markus/app.py
user=markus

Die Pfade sind hier bewusst absolut angegeben. Nachdem die Datei gespeichert wurde, können wir sie von supervisor einlesen lassen, in dem wir das Kommando supervisorctl reread ausführen. Wenn alles richtig eingegeben ist, dann sollte uns die Ausgabe dieses Kommandos zeigen, dass jetzt ein neues Programm verfügbar ist:

# supervisorctl reread
hello: available

Dieses Programm können wir nun starten:

# supervisorctl start hello
hello: started

Wir prüfen nun nochmals den Status:

# supervisorctl status
hello                 RUNNING    pid 32675, uptime 0:00:46

Wie man hier sehen kann, läuft unser Programm. Es wird außerdem die PID und die Zeit seit dem Start angezeigt. Wir simulieren nun einen Absturz indem wir das Programm beenden und prüfen ob Supervisor wie gewollt einen Neustart durchführt:

# kill -9 32675
# supervisorctl status
hello                 RUNNING    pid 32686, uptime 0:00:04

Die supervisor Website enthält noch wesentlich mehr Information über mögliche Parameter für Programme oder die Konfiguration von supervisor selbst. Es ist z.B. auch möglich, Protokolldateien für die Programme anzulegen und diese automatisch zu rotieren, wenn sie eine bestimmte Größe überschreiten. Weitere Details gibt es hier: http://supervisord.org/configuration.html. Endlich gibt es keinen Grund mehr, seine Applikationen in einer screen-Sitzung laufen zu lassen... 😉