Router mit Linux

Eine Linux-Maschine lässt sich leicht als Router betreiben. Voraussetzung ist natürlich, dass mindestens zwei Netzwerkkarten eingebaut sind, die mit unterschiedlichen Netzwerken verbunden und entsprechend unterschiedlich adressiert wurden.

Darüberhinaus soll die Maschine mittels Source-NAT ein internes LAN ins Internet bringen.

OSI Layer 3 Paketweiterleitung

Auf typische Live-Art handelt es sich nur um eine einzige Zeile, um das Weiterleiten von Datenpaketen zwischen den Netzwerkkarten zu erlauben:

[root@linux:~]# echo 1 > /proc/sys/net/ipv4/ip_forward

Soll es nicht nur temporär sein, also einen reboot überleben, muss die Datei /etc/sysctl.conf als root editiert und die folgende Zeile einkommentiert werden, so dass sie schließlich so ausschaut:

net.ipv4.ip_forward=1

Network Address Translation

Um nicht einfach nur zwei Netze routingfähig zu bekommen, sondern darüber hinaus das Internet im LAN verfügbar zu machen, ist für das klassische Source-NAT nur eine einige Zeile erforderlich. Wir gehen hierbei davon aus, dass ‚enp0s3‘ als erster Ethernet-Adapter den Weg zum Internet hin kennt (die Option -o spezifiziert das Outgoing device):

[root@linux:~]# iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE

Das ist auch wieder nur temporär, je nach Distrubution muss dies an jeweiliger Stelle hinterlegt werden. Bei Debian ist es relativ einfach, wir brauchen diese Zeile zusammen mit dem einleitenden Schlüsselwort up nur an die existierende Datei interfaces anhängen:

[root@linux:~]# echo 'up iptables -t nat -A POSTROUTING -o enp0s3 -j MASQUERADE' >> /etc/network/interfaces

Praxisbeispiel GNS3

Wie bereits erwähnt, benötigen wir einen NAT-Router, um ein LAN ins Internet zu bringen. So wie es ja auch die WLAN-Router mit unseren Heimnetzwerken tun. Die Netzwerkschnittstelle zum Internet hin hat dort eine öffentliche IP-Adresse, die Schnittstelle nach innen zum LAN hin besitzt dagagen eine reservierte, private Adresse.

Um bestimmte Szenarien zu realisieren, finden NAT-Router aber auch innerhalb von LANs Verwendung. Ein Fall kann z.B. sein, wenn transparente, virtuelle Software-Switche (Netzwerkbrücken) nicht vollständig unterstützt werden.

Als Workaround kann damit der Internetzugang im Netzwerk-Simulator GNS3 ermöglicht werden, ohne dass eine „Cloud“ konfiguriert werden muss, die bei einer Installation von GNS3 unter Windows Probleme bereitet. Im folgenden Beispiel wird der Netzwerkadapter 1 innerhalb von GNS3 verwaltet, wogegen Adapter 2 von VirtualBox verwaltet wird. Dieser zweite Adapter führt via WLAN-Connection-Sharing ins Internet (Internetverbindungsfreigabe). Das Sharing setzt auf einen vorher zu installierenden KVM-TEST-Loopbackadapter auf. Siehe dazu diese Grafik:

../_images/router-gns3.png

Zur Installation des KVM-TEST-Loopbackadapters und zur Einrichtung der Internetverbindungsfreigabe siehe:

Adressierung

Die Konfiguration des kleinen Linux-Routers erfolgt anhand einer VirtualBox-Maschine mit Debian 11 und vorinstalliertem NetworkManager.

Der Adapter Nr. 1 nennt sich enp0s3, er ist an das innere GNS3-Netzwerk angeschlossen und bekommt die IP-Adresse 10.2.2.1/24 statisch zugewiesen. Standardgateway und Nameserver müssen hier nicht angegeben werden, weil beide Informationen vom KVM-TEST-Loopbackadapter kommen:

[root@linux:~]# nmcli con add con-name Adapter1 ifname enp0s3 type ethernet ip4 10.2.2.1/24
[root@linux:~]# nmcli con up Adapter1

Der Adapter Nr. 2 nennt sich enp0s8, er bezieht seine Adresse aus dem Netzwerk 192.168.137.0/24 dynamisch vom KVM-TEST-Loopbackadapter, der seinerseits einen kleinen NAT-Router mit DHCP-Serverfunktionalität darstellt. Hier brauchen wir nichts weiter zu unternehmen, der NetworkManager unseres Linux-Routers tritt standardmäßig als DHCP-Client auf.

DHCP-Server

Auf dem kleinen Linux-Router lässt sich schließlich auch sehr leicht ein DHCP-Server bereitstellen, der die Maschinen in der GNS3-Testumgebung dynamisch konfigurieren kann. Nach der Installation des erforderlichen Pakets mittels apt install dnsmasq sichern wir uns die ausgelieferte Konfigurationsdatei und erstellen eine neue:

[root@linux:~]# mv /etc/dnsmasq.conf /etc/dnsmasq.conf_orig
[root@linux:~]# echo 'dhcp-range=10.2.2.50,10.2.2.150,12h' >> /etc/dnsmasq.conf
[root@linux:~]# echo 'dhcp-option=option:dns-server,8.8.8.8' >> /etc/dnsmasq.conf

Nach dem Neustart des Daemons mittels systemctl restart dnsmasq sollte der Server in der Testumgebung seine Arbeit tun und z.B. den VPCS namens „PC1“ mit den passenden Adressen versorgen.