28.3Masquerading (NAT)

Nachdem sichergestellt ist, dass der Gateway-Rechner selbst über die Schnittstelle enp0s4 Internetzugang hat, geht es nun darum, diesen Internetzugang über die WLAN-Schnittstelle mit WLAN-Clients zu teilen. Ein Puzzelstein in der folgenden Konfiguration ist das Masquerading.

Das Prinzip des Masqueradings besteht darin, dass der Gateway-Rechner an das Internet adressierte Datenpakete der Clients annimmt und deren Absenderadresse so verändert, als würden sie vom ihm selbst stammen. Diese Adressänderung wird auch als Network Address Translation (NAT) bezeichnet.

Jetzt kann das Datenpaket in das Internet weitergeleitet werden. Im Regelfall kommt aus dem Internet nach einer Weile eine Antwort – beispielsweise die angeforderte Webseite. Das Gateway muss die Antwort an den richtigen Client weiterleiten. Dazu muss es die korrekte Zieladresse erraten. Das Datenpaket wurde ja (nach der Adressänderung) von ihm selbst abgesandt, daher ist auch die Antwort an das Gateway adressiert.

Um eine Adresszuordnung der Antwortpakete zu ermöglichen, verändert das Gateway nicht nur die Absenderadresse, sondern auch den Absender-Port. Für jede IP-Adresse innerhalb des lokalen Netzes wird eine bestimmte Port-Nummer verwendet. Linux-intern ist für das Masquerading iptables zuständig. Das ist ein in den Kernel integriertes System zur Verarbeitung von IP-Paketen.

Wenn der Gateway-Rechner über einen ADSL-Router mit dem Internet verbunden ist (also nicht über ein Modem), führt dieses Gerät nochmals Masquerading oder eine andere Form der Adressmanipulation durch. Daraus ergeben sich glücklicherweise keine Probleme.

Masquerading- und Firewall-Funktionen sind eng miteinander verwandt. Wenn auf Ihrem Gateway-Rechner bereits eine Firewall läuft, wie dies standardmäßig bei einigen Distributionen der Fall ist (CentOS, Fedora, Red Hat, SUSE), dann müssen Sie die Masquerading-Funktionen mit dem Firewall-Konfigurationswerkzeug Ihrer Distribution einrichten. Läuft hingegen noch keine Firewall, dann reichen zur Aktivierung des Masqueradings zwei iptables-Kommandos, die ich Ihnen gleich erläutern werde. Hintergrundinformationen darüber, was Firewalls sind und wie sie funktionieren, finden Sie in Kapitel 38, »Firewalls«.

Die NAT-Firewall-Regel allein reicht nicht aus. Standardmäßig leitet Linux Netzwerkpakete nämlich nicht von einem Netzwerk zum nächsten weiter. Aus Sicherheitsgründen ist die sogenannte IP-Forwarding-Funktion deaktiviert. Zum Glück ist es nicht schwierig, diese Funktion im laufenden Betrieb zu aktivieren – es muss lediglich mit sysctl ein Kernelparameter verändert werden.

Um das Masquerading manuell einzuschalten, führen Sie dazu zwei kurze Kommandos aus:

root# sysctl -w net.ipv4.ip_forward=1 root# iptables -A POSTROUTING -t nat -o enp4s0 -j MASQUERADE

Das sysctl-Kommando aktiviert die IP-Forwarding-Funktion des Kernels, die aus Sicherheitsgründen in der Standardeinstellung deaktiviert ist. Sollte sysctl bei Ihrer Distribution nicht zur Verfügung stehen, können Sie stattdessen das folgende Kommando ausführen:

root# echo 1 > /proc/sys/net/ipv4/ip_forward

Das iptables-Kommando definiert eine Regel, gemäß der IP-Pakete, die das lokale Netzwerk verlassen sollen, über das Interface enp4s0 geleitet und dabei entsprechend den NAT-Regeln manipuliert werden. (enp4s0 ist in diesem Kapitel die Schnittstelle, über die der Gateway-Rechner mit dem Internet verbunden ist.)

Um die Masquerading-Funktionen zu deaktivieren, führen Sie folgende Kommandos aus:

root# iptables -t nat -D POSTROUTING -o enp4s0 -j MASQUERADE root# sysctl -w net.ipv4.ip_forward=0

Statt sysctl funktioniert auch dieses echo-Kommando:

root# echo 0 > /proc/sys/net/ipv4/ip_forward

Client/Server-Begriff

Im Folgenden wird der Gateway-Rechner auch als Server bezeichnet, alle anderen Rechner als Clients – ganz unabhängig davon, welche Funktionen diese Rechner sonst erfüllen. Im Fall von Masquerading wird der Server oft auch als Internet-Gateway (korrekt) oder als Internet-Router bezeichnet.

Diese Unterscheidung zwischen Client und Server gilt für das gesamte Buch – aber immer nur für eine bestimmte Funktion! Ein Rechner, der bezüglich seines Internetzugangs ein Client ist, kann durchaus für eine andere Funktion (etwa NFS) ein Server sein. In der Praxis werden sehr oft mehrere Server-Funktionen auf einem einzigen Rechner konzentriert.

Masquerading und Forwarding dauerhaft aktivieren

Das manuelle Aktivieren der Masquerading- und Forwarding-Funktion mag für erste Tests angehen. Für den dauerhaften Betrieb eines Gateway-Rechners muss das Aktivieren aber automatisch erfolgen. Im Folgenden skizziere ich für einige Distributionen die beste Vorgehensweise.

Unter Debian und Ubuntu läuft standardmäßig keine Firewall. Um das Masquerading zu aktivieren, bauen Sie die beiden Zeilen in /etc/network/interfaces ein, die mit up bzw. down beginnen:

# Datei /etc/network/interfaces ... iface wlp0s29u1u7 inet static ... up /sbin/iptables -A POSTROUTING -t nat -o enp4s0 -j MASQUERADE down /sbin/iptables -D POSTROUTING -t nat -o enp4s0 -j MASQUERADE

Die Schlüsselwörter up und down geben Kommandos an, die bei der Aktivierung bzw. bei der Deaktivierung der WLAN-Schnittstelle automatisch ausgeführt werden sollen.

Um außerdem das IP-Forwarding zu aktivieren, ändern Sie die Datei /etc/sysctl.conf. Sie enthält bereits die Zeile net.ipv4.ip_forward=1. Sie müssen lediglich das Kommentarzeichen # am Beginn dieser Zeile entfernen. (Diese Konfigurationsdatei gibt es nicht nur unter Debian und Ubuntu, sondern auch bei den meisten anderen Distributionen.)

# Änderung in /etc/sysctl.conf net.ipv4.ip_forward=1

Die Änderung wird mit dem nächsten Neustart wirksam. Diesen Neutstart ersparen Sie sich, wenn Sie das entsprechende sysctl-Kommando einmal manuell ausführen:

root# sysctl -w net.ipv4.ip_forward=1

Bei Fedora sowie CentOS 7 und RHEL 7 ordnen Sie die Schnittstelle, über die der Rechner mit dem Internet verbunden ist, der Firewall-Zone external zu. Damit wird für diese Schnittstelle das Masquerading aktiviert. Gleichzeitig aktiviert Fedora auch das IP-Forwarding.

# Datei /etc/sysconfig/network-scripts/ifcfg-enp4s0 (Verbindung zum ADSL-Router) ... ZONE=external

Unter CentOS 6 und RHEL 6 können Sie das Masquerading mit dem Programm system-config-firewall einschalten. Im Dialogblatt Trusted Interface markieren Sie die Schnittstelle zum LAN. Damit stellen Sie sicher, dass die Firewall den Netzwerkverkehr zum LAN nicht blockiert. Außerdem wählen Sie im Dialogblatt Masquerading die Schnittstelle aus, die mit dem Internet verbunden ist.

Bei SUSE ordnen Sie im YaST-Modul Sicherheit • Firewall die LAN-Schnittstelle dem internen Netzwerk zu. Anschließend aktivieren Sie im Dialogblatt Masquerading die gleichnamige Option.

Distributionsunabhängig können Sie die Masquerading- und Forwarding-Funktionen auch über ein Init-V-Script oder eine Systemd-Service-Datei aktivieren. Eine entsprechende Anleitung finden Sie in Abschnitt 25.7, »Eigene Init-Scripts bzw. Init-Konfigurationsdateien«.

Probleme

Das Masquerading ist zwar eine elegante Lösung, um im lokalen Netzwerk einen Internetzugang gemeinsam zu nutzen. Es kann aber auch Probleme geben: