ubuntuusers.de

ubuntuusers.deWikiRouter

Router

Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:

Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.

Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:

Wiki/Icons/Oxygen/applications-internet.png Ein Router ist ein Verbindungsrechner, der Daten zwischen zwei Netzwerken verteilt. Im Zeitalter von schnellem Internet über DSL verwendet man im allgemeinen einen Hardware-Router als Vermittler zwischen dem öffentlichen Internet und einem lokalen Netzwerk.

Dazu sind verschiedene Hardware-Komponenten, wie das DSL-Modem , diverse Schnittstellen, ein kleiner Netzwerk-Switch und über Software gesteuerte Funktionen wie NAT, ein DNS-System, ein DHCP-Server und eine Firewall in einem einzigen Gerät vereint.

Unter Ubuntu lässt sich diese Aufgabe ebenfalls lösen und auf einem Rechner umsetzen. Dieser Artikel bildet das Grundgerüst für folgende weiterführende und ergänzende Artikel zu dem Thema hier im uu-Wiki und geht ausführlicher auf die Basiskonfiguration ein.

Für den praktischen Einsatz bieten sich insbesondere Embedded-PC-Systeme wie z.B. von Alix oder VIA Epia an, die zwei Netzwerkschnittstellen besitzen und besonders wenig Strom verbrauchen. Allerdings muss man berücksichtigen, dass die Kernel neuerer Ubuntu-Versionen mit dieser Hardware nicht mehr zwangsläufig funktionieren.

Linux als Gateway

Konfiguration Server

Der Dienst dnsmasq bietet einen DHCP- und DNS-Cache in einem. Dafür wird das folgende Paket benötigt [1]:

  • dnsmasq (universe - siehe auch Dnsmasq)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install dnsmasq  

sudo aptitude install dnsmasq  

Die Konfigurationsdateien können mit einem Editor [2] und Root-Rechten [3] bearbeitet werden. In der Datei /etc/dnsmasq.conf werden sämtliche Einstellungen vorgenommen. In der der nach der Installation bereits vorhandenen Konfigurationsdatei sind mögliche Parameter anhand von Beispielen erklärt. Die Konfiguration kann, je nach Einsatzzweck recht umfangreich werden. Für eine Basiskonfiguration werden zunächst jedoch nur ein paar Einstellungen benötigt.

  • interface beschränkt den Server-Dienst nur auf ein oder auch mehrere Interfaces - in diesem Beispiel für eth1 wird folgendes eingetragen:

# DHCP-Server aktiv für Interface
interface=eth1

Für jede weitere Schnittstelle muss ein neuer Eintrag angehängt werden.

  • no-dhcp-interface Kein DHCP-Service für die angegebenen Schnittstellen. Die Schnittstelle welche z.B. die Verbindung zum WAN herstellt, soll von dnsmasq ignoriert werden:

# DHCP-Server nicht aktiv für Interface
no-dhcp-interface=eth0

Auch hier sind mehrere Einträge möglich.

  • dhcp-range legt den zu vergebenden Adressbereich fest. Der Schnittstelle eth1 muss zuvor über die Datei interfaces eine feste IP-Adresse zugewiesen werden. Passend zum Beispiel hier die Adresse 192.168.3.1. Für weitere Schnittstellen muss identisch verfahren werden.

dhcp-range=192.168.3.20,192.168.3.50,12h

In diesem Beispiel befindet sich der zu vergebende IP-Adressbereich zwischen 192.168.3.20 und 192.168.3.50. 12h bedeutet, dass die IP-Adresse 12 Stunden lang gültig ist und dann automatisch erneuert wird. Alternativ kann die automatisch zugewiesene Adresse auch dauerhaft vergeben werden:

dhcp-range=192.168.3.20,192.168.3.50,infinite

Bei mehreren Schnittstellen/Subnetzen sollte der eingestellte Adressbereich der zugehörigen Schnittstelle zugewiesen werden:

dhcp-range=interface:eth1,192.168.3.20,192.168.3.50,infinite
dhcp-range=interface:eth2,192.168.4.20,192.168.4.50,infinite

LAN-Schnittstellen kann z.B. auch ein Adressbereich im selben Subnetz zugewiesen werden, bei LAN- und WLAN-Schnittstellen in Kombination funktioniert das jedoch nicht zuverlässig. Beispiel:

dhcp-range=interface:eth1,192.168.3.20,192.168.3.50,infinite
dhcp-range=interface:eth2,192.168.3.60,192.168.3.80,infinite
dhcp-range=interface:wlan0,192.168.4.10,192.168.4.30,infinite

Je zwei Schnittstellen können auch auf einen gemeinsamen Adressbereich festgelegt werden. Beispiel:

dhcp-range=interface:eth1,eth2,192.168.3.20,192.168.3.60,infinite

Auch hier funktioniert das bei LAN- und WLAN-Schnittstellen in Kombination nicht zuverlässig.

  • dhcp-host ermöglicht es Rechnern über den Namen und/oder über die MAC-Adresse der jeweiligen Netzwerkkarte eine feste IP-Adresse zuzuweisen.

dhcp-host=0B:01:02:03:25:67,192.168.3.10,infinite

Hier wird z.B. dem Rechner oder der Netzwerkkarte mit der MAC-Adresse 0B:01:02:03:25:67 die IP-Adresse: 192.168.3.10 für unbegrenzte Zeit zugewiesen. Diese Einstellung empfiehlt sich für Rechner, die z.B. Drucker- oder Dateifreigaben im Netzwerk zur Verfügung stellen oder für bestimmte Dienste Portfreigaben benötigen.

Syntax:

dhcp-host=<MAC-Adresse>,<Rechnername>,<IP-Adresse>,infinite
dhcp-host=<MAC-Adresse>,<IP-Adresse>,infinite
dhcp-host=<Rechnername>,<IP-Adresse>,infinite

Auf die Konfiguration, mit welcher für LAN und WLAN ein gemeinsamer Adressbereich verwendet werden kann, wird in WLAN_Router - Netzwerkbrücke näher eingegangen.

Alternativ zu dnsmasq kann auch als dhcp3 als DHCP-Server konfiguriert werden.

Portweiterleitung

Damit Daten vom WAN über Schnittstelle 1 (eth0) jetzt in das lokale Netz (eth1, eth2, wlan0...) übertragen werden können, muss die Portweiterleitung des Kernels (IP-Forwarding) über sysctl aktiviert und über entsprechende iptables Filterregeln festgelegt werden, wohin genau die Datenpakete weitergeleitet werden sollen (NAT). Zudem wird über sog. Masquerading das lokale Netzwerk von der Außenwelt, dem Internet, abgeschirmt (maskiert).

Hier wird also von eth0 auf die Schnittstellen an denen die Rechner des lokalen Netzwerks angeschlossen sind weitergeleitet. Dabei kann es sich sowohl um kabelgebundene als auch um Drahtlos-Verbindungen handeln.

Forwarding

  • IP-Forwarding aktivieren [4]:

    sudo sysctl -w net.ipv4.ip_forward=1  
  • Filterregeln unter Angabe der konfigurierten Schnittstelle und der benötigten Netzmaske:

    sudo iptables -A FORWARD -o eth0 -i eth1 -s 192.168.3.0/24 -m conntrack --ctstate NEW -j ACCEPT 

    Mit -i wird die Eingangs-Schnittstelle festgelegt, wenn mehrere interne Netzwerke so auf das Internet zugreifen sollen, kann diese Option weggelassen werden. -s gibt die Quell-IP (inkl. Netzwerkmaske) an. Möchte man z.B. alle privaten Netzwerke erlauben, so muss hier 192.168.0.0/16 eingetragen werden.

  • IP-Forwarding für mehrere Subnetze erlauben:

    sudo iptables -A FORWARD -o eth0 -s 192.168.0.0/16 -m conntrack --ctstate NEW -j ACCEPT 
  • Einmal zugelassene Verbindungen weiterhin akzeptieren:

    sudo iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT 

NAT

  • Adressumsetzung (NAT) aktivieren und die Schnittstelle maskieren:

    sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  

Die Einstellungen sind temporär und gehen bei einem Neustart des Systems verloren, können aber auch gespeichert und bei Systemstart wieder abgerufen werden.

iptables-Tabellen speichern

Beispiel um iptables-Tabellen zu speichern:

sudo iptables-save > /etc/iptables_01.save 

Beispiel um iptables-Tabellen wieder zu laden. Vorhandenen Regeln werden dabei gelöscht bzw. überschrieben.

sudo iptables-restore < /etc/iptables_01.save 

So werden bereits vorhandene Regeln nicht gelöscht:

sudo iptables-restore -n < /etc/iptables_01.save
sudo iptables-restore --noflush < /etc/iptables_01.save 

So können natürlich auch mehrere Tabellen gespeichert und je nach Bedarf wieder geladen werden.

iptables-Tabellen löschen

sudo iptables --flush 

./Netzwerk_Router01.png

Praktische Anwendung

Die Arbeitsweise soll nun an einem praktischen Beispiel dargestellt werden. Die Konfiguration erfolgt hier über die Datei interfaces und Dnsmasq. Die Internetverbindung wird über eth0 und einem angeschlossenen Modem mittels PPPoE-Verbindung aufgebaut, die Verbindung auf zwei Teilnetze an eth1 und eth2 weitergeleitet (geroutet). Die gezeigten MAC-Geräteadressen sind natürlich nur Beispiele.

Die Konfiguration kann mittels geeigneter WLAN-Hardware um einen Access-Point ergänzt und so zu einem vollwertigen WLAN-Router ausgebaut werden. Außerdem kann über einen Transparenten Proxy-Server wie z.B. Squid in Kombination mit SquidGuard ein Daten-Cache und Web-Filter eingerichtet werden. Squid Beispielkonfigurationen.

Aufgaben

Zusätzlich sollen folgende Vorgaben erfüllt werden:

  • in Teilnetz 1 (eth1) soll dem Rechner mit der MAC-Adresse 00:24:21:0e:8f:4a Reverse-VNC über Port 5500 ermöglicht werden

    • Um Reverse-VNC effektiv nutzen zu können, kann ein entsprechender DynDNS-Client eingerichtet werden.

  • in Teilnetz 1 (eth1) soll einer angeschlossenen Spielekonsole (PlayStation 3) der Zugriff auf das PlayStation-Netzwerk ermöglicht werden

  • in Teilnetz 2 (eth2) soll die Verwendung eines BitTorrent-Clients gesperrt werden

  • in Teilnetz 2 (eth2) soll einer angeschlossenen Spielekonsole (xBox) der Zugriff auf das Online-Portal xBox-Live ermöglicht werden

  • für beide Teilnetze soll eine Bandbreitenverteilung mittels Traffic-Controll für eine gleichmäßige Last sorgen und Blockaden verhindern

Für eine einfache Bandbreitenverteilung bedienen wir uns hier des Skripts Wondershaper {en}, welches in den Paketquellen zur Verfügung steht.

  • wondershaper (universe - Traffic-Control des Kernels (tc) einfach konfigurieren)

Wiki/Vorlagen/Installbutton/button.png mit apturl

Paketliste zum Kopieren:

sudo apt-get install wondershaper  

sudo aptitude install wondershaper  

Syntax:

wondershaper clear [interface]                # Einstellungen zurücksetzen
wondershaper [interface] [downlink] [uplink] 

Die Angaben erfolgen in Kilobit pro Sekunde. Wir gehen hier im Beispiel von einem ADSL2+-Anschluß mit 12000 kbits/s effektiver Empfangsrate (engl. "download rate") und 1000 kbit/s Senderate (engl. "upload rate") aus.

Konfiguration

Konfiguration der /etc/network/interfaces:

auto lo
iface lo inet loopback

# LAN-Anschluß 1
# an eth0 ist das DSL-Modem angeschlossen
auto eth0
iface eth0 inet manual

# pppoe Verbindung
auto dsl-provider
iface dsl-provider inet ppp
pre-up /sbin/ifconfig eth0 up   # line maintained by pppoeconf
provider dsl-provider

# lokales Netzwerk LAN-Anschluß 2
# Teilnetz 1
auto eth1
iface eth1 inet static
address 192.168.3.1
netmask 255.255.255.0
broadcast 192.168.3.255

# lokales Netzwerk LAN-Anschluß 3
# Teilnetz 2
auto eth2
iface eth2 inet static
address 192.168.4.1
netmask 255.255.255.0
broadcast 192.168.4.255

# Maskieren der LAN-Schnittstelle, Port-Forwarding & NAT aktivieren
# vorhandene Regeln und Ketten zuerst löschen / Reset Traffic-Control
# Restart-Funktionalität

up /sbin/iptables -F
 up /sbin/iptables -X
  up /sbin/iptables -t nat -F
   up /usr/sbin/wondershaper clear eth1
    up /usr/sbin/wondershaper clear eth2

# Forwarding für alle verwendeten Schnittstellen im lokalen Netz aktivieren 
up /sbin/iptables -A FORWARD -o ppp0 -s 192.168.0.0/16 -m conntrack --ctstate NEW -j ACCEPT
 up /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  up /sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 
   up /sbin/sysctl -w net.ipv4.ip_forward=1 

# dnsmasq neu starten
up /etc/init.d/dnsmasq restart

# Traffic-Control
up /usr/sbin/wondershaper eth1 500 6000
 up /usr/sbin/wondershaper eth2 500 6000

## Portfreigaben

# Port TCP 5500 an IP-Adresse 192.168.3.10 (Reverse-VNC)
up /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5500 -j DNAT --to-destination 192.168.3.10
 up /sbin/iptables -A FORWARD -i eth0 -d 192.168.3.10 -p tcp --dport 5500 -j ACCEPT

# Ports UDP 3478,3479,3658  / TCP 80,443,5223 an 192.168.10.253 (Playstation 3)
up /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dports 80,443,5223 -j DNAT --to-destination 192.168.3.20
 up /sbin/iptables -t nat -A PREROUTING -i eth0 -p udp -m multiport --dports 3478,3479,3658 -j DNAT --to-destination 192.168.3.20
  up /sbin/iptables -A FORWARD -i eth0 -d 192.168.3.20 -p tcp -m multiport --dports 80,443,5223 -j ACCEPT
   up /sbin/iptables -A FORWARD -i eth0 -d 192.168.3.20 -p udp -m multiport --dports 3478,3479,3658 -j ACCEPT

# Ports UDP 88, 3074 / TCP 3074 an IP-Adresse 192.168.4.10 (xBox)
up /sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3074 -j DNAT --to-destination 192.168.4.10
 up /sbin/iptables -t nat -A PREROUTING -i eth0 -p udp -m multiport --dports 88,3074 -j DNAT --to-destination 192.168.4.10
  up /sbin/iptables -A FORWARD -i eth0 -d 192.168.4.10 -p tcp --dport 3074 -j ACCEPT
   up /sbin/iptables -A FORWARD -i eth0 -d 192.168.4.10 -p udp -m multiport --dports 88,3074 -j ACCEPT

# Ports TCP 6881-6889; 3881-3889; 6969,49152,52525 Bit-Torrent Client für Teilnetz 2 sperren
up /sbin/iptables -A FORWARD -i eth2 -d 192.168.3.1 -p TCP -m multiport --dports 6881:6889 -j DROP
 up /sbin/iptables -A FORWARD -i eth2 -d 192.168.3.1 -p TCP -m multiport --dports 3881:3889 -j DROP
  up /sbin/iptables -A FORWARD -i eth2 -d 192.168.3.1 -p TCP -m multiport --dports 6869,49152,52525 -j DROP

## optional benötigte DNS eintragen
## drei Einträge sind möglich
## siehe Links zu DNS im Wiki-Artikel
# post-up /bin/echo 'nameserver 192.168.178.1' | tee /etc/resolv.conf
#  post-up /bin/echo 'nameserver 213.73.91.35' | tee -a /etc/resolv.conf
#   post-up /bin/echo 'nameserver 87.118.100.175' | tee -a /etc/resolv.conf

## optional Domain und Sucheintrag 
# post-up /bin/echo 'domain fritz.box' | tee -a /etc/resolv.conf
#  post-up /bin/echo 'search fritz.box' | tee -a /etc/resolv.conf

Basiskonfiguration der /etc/dnsmasq.conf:

sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf.bak         # Originaldatei vorab sichern  

Basiskonfiguration:

# DHCP-Server aktiv für Interface
interface=eth1
interface=eth2

# DHCP-Server nicht aktiv für Interface
no-dhcp-interface=eth0

# IP-Adressbereich / Lease-Time
dhcp-range=interface:eth1,192.168.3.20,192.168.3.50,infinite   # Verteile an eth1 (Teilnetz 1) Adressen 192.168.3.20..192.168.3.50
dhcp-range=interface:eth2,192.168.4.20,192.168.4.50,infinite   # Verteile an eth2 (Teilnetz 2) Adressen 192.168.4.20..192.168.4.50

# feste IP-Adressen definieren
# PC in Teilnetz 1 / bekommt Portfreigabe für Reverse-VNC
dhcp-host=00:24:21:0e:8f:4a,192.168.3.10,infinite

# PS3 in Teilnetz 1 / bekommt Portfreigabe für PS-Netzwerk
dhcp-host=00:16:43:1a:2c:4a,192.168.3.20,infinite

# xBox in Teilnetz 2 / bekommt Portfreigaben für xBox-Live
dhcp-host=00:03:a8:15:25:67,192.168.4.10,infinite

Statische IP-Adressen können auch auf den Clients eingestellt werden, da es dann aber zu doppelt vergebenen Adressen kommen könnte, sollte eine automatische Konfiguration mit DHCP und einer Konfiguration über dnsmasq bevorzugt werden.

Funktionsprüfung

Nun kann das Netzwerk neu gestartet werden:

sudo /etc/init.d/networking restart  

Fehlerfreie Ausgabe nach einem Neustart der Netzwerkkonfiguration:

* Reconfiguring network interfaces ...
# die automatisch konfigurierte DSL-Verbindung über ''pppoe'' ist hier ausgeblendet
...
net.ipv4.ip_forward = 1
 * Restarting DNS forwarder and DHCP server dnsmasq
   ...done.

Die erzeugten Filtertabellen:

sudo iptables -t nat -n -L -v  

Ausgabe für die Kette "POSTROUTING" passend zum Beispiel:

Chain POSTROUTING (policy ACCEPT 180 packets, 17217 bytes)
 pkts bytes target     prot opt in     out     source               destination         
  62  2734 MASQUERADE  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0 
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           multiport dports 80,443,5223 to:192.168.3.20
    0     0 DNAT       udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           multiport dports 3478,3479,3658 to:192.168.3.20
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:3074 to:192.168.4.10 
    0     0 DNAT       udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           multiport dports 88,3074 to:192.168.4.10

Ausgabe für die Kette "PREROUTING" passend zum Beispiel:

Chain PREROUTING (policy ACCEPT 4 packets, 246 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:5500 to:192.168.3.10 
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           multiport dports 80,443,5223 to:192.168.3.20
    0     0 DNAT       udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           multiport dports 3478,3479,3658 to:192.168.3.20
    0     0 DNAT       tcp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           tcp dpt:3074 to:192.168.4.10 
    0     0 DNAT       udp  --  eth0   *       0.0.0.0/0            0.0.0.0/0           multiport dports 88,3074 to:192.168.4.10 
sudo iptables -t filter -n -L -v  

Ausgabe für die Kette "FORWARD", passend zum Beispiel:

Chain FORWARD (policy ACCEPT 13 packets, 8162 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      eth0    192.168.0.0/16       0.0.0.0/0           ctstate NEW 
    7   842 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0           ctstate RELATED,ESTABLISHED
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            192.168.3.10        tcp dpt:5500 
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            192.168.3.20        multiport dports 80,443,5223
    0     0 ACCEPT     udp  --  eth0   *       0.0.0.0/0            192.168.3.20        multiport dports 3478,3479,3658
    0     0 ACCEPT     tcp  --  eth0   *       0.0.0.0/0            192.168.4.10        tcp dpt:3074 
    0     0 ACCEPT     udp  --  eth0   *       0.0.0.0/0            192.168.4.10        multiport dports 88,3074 
    0     0 DROP       tcp  --  eth2   *       0.0.0.0/0            192.168.3.1         multiport dports 6881:6889 
    0     0 DROP       tcp  --  eth2   *       0.0.0.0/0            192.168.3.1         multiport dports 6869,49152,52525 
    0     0 DROP       tcp  --  eth2   *       0.0.0.0/0            192.168.3.1         multiport dports 3881:3889 

Die Anzahl der übertragenen Datenpakete und Bytes ändert sich natürlich. Bei korrekter Konfiguration können die angeschlossenen Clients nun eine Verbindung über DHCP herstellen.

Für eine erweiterte Konfiguration und die Einrichtung spezieller Filtertabellen bietet sich nathelper, ufw oder auch anfd an. Entsprechende Befehle können ebenfalls in die Datei interfaces übernommen werden. Ebenso lassen sich diverse Serverdienste einrichten. Beispielkonfiguration für einen MAC-Adressfilter.

Systemlog abfragen

Ereignisse zu dnsmasq werden im Systemlogbuch unter /var/log/syslog abgelegt und können mit einem entsprechenden Filter ausgelesen werden:

grep dnsmasq /var/log/syslog 

Filterregeln auslagern

Die erstellten iptables-Filterregeln werden sehr schnell recht umfangreich. Um eine bessere Übersicht zu behalten und die erstellten Regeln testen zu können, ohne das Netzwerk jedesmal neu starten zu müssen, bietet es sich an, alle Regeln und Aufrufe der Dienste in ein Skript auszulagern.

Dazu erstellt man die Datei /usr/sbin/my_iptables_rules.sh und macht diese anschließend noch ausführbar

touch my_iptables_rules.sh
chmod +x my_iptables_rules.sh 

Inhalt passend zum Beispiel:

#!/bin/bash
## Iptables Regeln
## sonstiges

# vorhandene Regeln und Ketten zuerst löschen / Reset Traffic-Control
# Restart-Funktionalität

/sbin/iptables -F
 /sbin/iptables -X
  /sbin/iptables -t nat -F
   /usr/sbin/wondershaper clear eth1
    /usr/sbin/wondershaper clear eth2

# Forwarding für alle verwendeten Schnittstellen im lokalen Netz aktivieren 
/sbin/iptables -A FORWARD -o ppp0 -s 192.168.0.0/16 -m conntrack --ctstate NEW -j ACCEPT
 /sbin/iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
  /sbin/iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE 
   /sbin/sysctl -w net.ipv4.ip_forward=1 

# dnsmasq neu starten
/etc/init.d/dnsmasq restart

# Traffic-Control
/usr/sbin/wondershaper eth1 500 6000
 /usr/sbin/wondershaper eth2 500 6000

## Portfreigaben

# Port TCP 5500 an IP-Adresse 192.168.3.10 (Reverse-VNC)
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 5500 -j DNAT --to-destination 192.168.3.10
 /sbin/iptables -A FORWARD -i eth0 -d 192.168.3.10 -p tcp --dport 5500 -j ACCEPT

# Ports UDP 3478,3479,3658  / TCP 80,443,5223 an 192.168.10.253 (Playstation 3)
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -m multiport --dports 80,443,5223 -j DNAT --to-destination 192.168.3.20
 /sbin/iptables -t nat -A PREROUTING -i eth0 -p udp -m multiport --dports 3478,3479,3658 -j DNAT --to-destination 192.168.3.20
  /sbin/iptables -A FORWARD -i eth0 -d 192.168.3.20 -p tcp -m multiport --dports 80,443,5223 -j ACCEPT
   /sbin/iptables -A FORWARD -i eth0 -d 192.168.3.20 -p udp -m multiport --dports 3478,3479,3658 -j ACCEPT

# Ports UDP 88, 3074 / TCP 3074 an IP-Adresse 192.168.4.10 (xBox)
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 3074 -j DNAT --to-destination 192.168.4.10
 /sbin/iptables -t nat -A PREROUTING -i eth0 -p udp -m multiport --dports 88,3074 -j DNAT --to-destination 192.168.4.10
  /sbin/iptables -A FORWARD -i eth0 -d 192.168.4.10 -p tcp --dport 3074 -j ACCEPT
   /sbin/iptables -A FORWARD -i eth0 -d 192.168.4.10 -p udp -m multiport --dports 88,3074 -j ACCEPT

# Ports TCP 6881-6889; 3881-3889; 6969,49152,52525 Bit-Torrent Client für Teilnetz 2 sperren
/sbin/iptables -A FORWARD -i eth2 -d 192.168.3.1 -p TCP -m multiport --dports 6881:6889 -j DROP
 /sbin/iptables -A FORWARD -i eth2 -d 192.168.3.1 -p TCP -m multiport --dports 3881:3889 -j DROP
  /sbin/iptables -A FORWARD -i eth2 -d 192.168.3.1 -p TCP -m multiport --dports 6869,49152,52525 -j DROP

Durch direkten Aufruf kann die Funktion nun getestet werden:

sudo ./my_iptables_rules.sh 

Funktioniert alles einwandfrei, wird das Skript nach /usr/sbin/ kopiert:

sudo cp my_iptables_rules.sh /usr/sbin 

Die Einträge in der /etc/network/interfaces können natürlich entfallen. Stattdessen muss nach der Konfiguration der einzelnen Schnittstellen nur der Verweis auf das Skript eingetragen werden.

...
post-up /usr/sbin/my_iptables_rules.sh

Fernzugriff / Administration

Um das System von einem anderen Rechner aus verwalten zu können, bieten sich SSH oder auch ein Zugriff über VNC an. Der Zugriff von einen Windows-System aus wäre mit dem Programm PuTTY über eine SSH-Verbindung möglich.

Problembehandlung Clients

Fehler „Server nicht gefunden“

Anscheinend existiert unter Ubuntu 10.04 (Lucid Lynx) im NetworkManager noch ein Bug, der das Forwarding an den richtigen DNS-Server verhindert.

Äußern tut sich dieser, wenn der Client-Rechner keine Namen auflösen kann, IP-Adressen aber pingen oder Webseiten über die IP-Adresse aufrufen kann.

Abhilfe schafft ein

sudo killall -s HUP dnsmasq 

Spezielle Distributionen

Es gibt einige Linux-Distributionen, die speziell für diesen Anwendungszweck konzipiert wurden und die benötigten Komponenten bereits integriert haben oder sich durch Zusatzmodule ("Add-Ons") entsprechend erweitern lassen. Die Verwaltung erfolgt z.B. bequem über eine Weboberfläche.

Weitere Informationen und vergleichbare Distributionen findet man auf distrowatch.com {en} {de}

Zusatzinformationen

Extern

Diese Revision wurde am 1. April 2014 16:29 von aasche erstellt.
Die folgenden Schlagworte wurden dem Artikel zugewiesen: Netzwerk, Internet