Linux als Router im Netz einzusetzen ist eine häufige und einfach einzurichtende Forderung. Die Problematik besteht meist darin, zu unterscheiden, in welchen Fällen ein einfacher Router ausreichend ist und in welchen Fällen zusätzliche Techniken (Proxy, Masquerading, Firewall) nötig sind.

Routing alleine ist das bloße Weiterleiten eines IP-Paketes von einer Schnittstelle (Netzwerkkarte) zu einer anderen. Um also einen Linux-Rechner zum Router zu machen, genügt es, dass

  • der Linux-Rechner mehrere Netzwerkschnittstellen hat,
  • der Kernel die Fähigkeit aufweist, Pakete von einer Schnittstelle zur anderen weiterzuleiten (IP-Forwarding).

Der erste Punkt wird praktisch automatisch erledigt, sobald ein Rechner mehrere tatsächliche oder auch virtuelle Netzwerkkarten besitzt. Im Grunde müssen es nicht einmal Netzwerkkarten im strengen Sinne sein, es reichen auch Netzwerkschnittstellen wie z.B. ISDN-Karten oder auch Modems, auf denen ein entsprechendes Protokoll (ppp oder slip) läuft.

Sobald eine Netzwerkverbindung eingerichtet ist, existiert eine sogenannte symbolische Schnittstelle im Linux-Kernel, die einen Namen trägt, anhand dessen Rückschlüsse auf die Art des Netzwerks gezogen werden können. Die Schnittstellen heißen

SchnittstelleBedeutung
eth0, eth1, eth2Ethernetkarten. Sollten mehrere IP-Adressen an nur eine Karte vergeben werden, so werden Bezeichnungen wie eth0:1, eth0:2 verwendet.

Zuweisen einer weiteren Adresse z.B.: mit ifconfig:
Ifconfig eth0:1 172.16.0.5/24
tr0, tr1, tr2Token Ring Netzwerkkarten
ppp0, ppp1, ppp2PPP-Verbindungen (Point to Point Protocol) Die heute gängigste Methode, IP über serielle Leitungen zu betreiben. In der Regel für Internetzugänge benutzt. Auch ADSL-Verbindungen (PPP over Ethernet) benutzen dieses Protokoll.
sl0, sl1, sl2SLIP-Verbindungen (Serial LIne Protocol) – der Vorgänger von ppp und nicht mehr sehr verbreitet.
ippp0, ippp1, ippp2Synchrones ppp über ISDN-Verbindungen.
fddi0, fddi1, fddi2FDDI (Fiber Distributed Data Interface) Verbindungen. (Glasfaser Wide Area Network)

Aus der Sicht des Kernels sind alle diese Schnittstellen gleich zu bedienen, so dass Linux in der Lage ist, zwischen verschiedensten Netzwerktechniken hin und her zu routen.

FORWARD aktivieren – sonst klappt es mit dem Routing nicht

Die zweite Voraussetzung (routfähiger Kernel) ist heute praktisch immer gegeben, aber meist deaktiviert. Bei OpenSuSE-Linux findet sich z.B. ein Eintrag in der Datei /etc/rc.config, der diese Fähigkeit des Kernels beim Booten standardmäßig abschaltet:

  IP_FORWARD=no

Dieser Wert muß zwingend auf yes gesetzt werden, sonst wird immer beim Hochfahren des Systems die Routingfähigkeit des Kernels deaktiviert.

Die Einstelung ob der Kernel routet oder nicht kann auch von Hand vorgenommen werden, dazu existiert die Datei /proc/sys/net/ipv4/ip_forward. Genau genommen handelt es sich hier nicht um eine physikalische Datei, sondern um eine Schnittstelle zum Kernel. Der Inhalt der Datei ist entweder eine 0 (Routing ausgeschaltet) oder eine 1 (Routing eingeschaltet). Mit dem Befehl

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

wird das Routing aktiviert.

Ob das Routing aktiviert oder deaktiviert ist, kann man unter allen Linux Distributionen ( CentOS, SuSe, Rocky, Debian, … ) mit dem folgenden cat Befehl prüfen:

  cat > /proc/sys/net/ipv4/ip_forward

Ausgabe 0 = Routing im Kernel ist nicht aktiviert.
Ausgabe 1 = Routing im Kernel ist aktiviert.

Routing alleine ist aber nur in Netzen mit bekannten IP-Adressen möglich. Damit lassen sich z.B. zwei physikalische Ethernet-Netze miteinander verbinden oder auch eine ppp-Einwahl über ein Modem ins lokale Netz realisieren. Was mit routing alleine nicht funktioniert ist die Anbindung eines lokalen Netzes mit reservierten (im Internet nicht gültigen) Adressen an das Internet. Denn Routing ist ja ausschließlich die Weitergabe eines IP-Paketes an ein anderes Netz. Das Paket selbst wird dabei nicht manipuliert. Hat das Paket aber eine reservierte Adresse, so ist im Internet keine Antwort möglich…
Hier setzen Techniken wie das Masquerading und Postrouting an, die uns Lösungen für dieses Problem anbieten. Dazu erfahren Sie auf den nächsten Seiten mehr.

Fehlersuche, wenn Routing unter Linux nicht geht

Sollte das routen der Pakte trotzdem nicht funktionieren. Gibt es mehrere Möglichkeiten die Ursache zu finden.

  • Routing im Kernel aktiviert
    Befehl dazu: cat > /proc/sys/net/ipv4/ip_forward muss 1 ergeben
  • Firewall: Erlaubt die Firewall forward der Pakete / Ist eine Firewall aktiviert.
    Befehl dazu: iptables -v -L
  • Kommen Pakete an der Netzwerkschnittstelle an bzw. verlassen Pakete die Schnittstelle.
    Befehl dazu: tcdump -i eth0 bzw. tcpdump -i eth1
  • Kommen die Pakete am Zielsystem an und werden diese Beantwortet? ( Quell IP bzw. Source IP beachten )
    Befehl dazu: tcpdump -i eth0 am Zielsystem
  • Routingtabelle stimmt nicht
    Befehl: route -n

Schreibe einen Kommentar