> ## Content Index
> Fetch the complete content index at: https://www.linuxfrickeln.de/llms.txt
> Use this file to discover other available public pages before exploring further.

# LARTC: Policy-Based-Routing mit Debian und iptables
- URL: https://www.linuxfrickeln.de/2015/09/04/port-basiertes-routing-mit-debian-und-iptables/
- Published: 2015-09-04T14:46:17.000Z
- Updated: 2015-09-04T14:46:17.000Z
- Author: Tom Schäfer

[Policy-Based-Routing](https://de.wikipedia.org/wiki/Policy-basiertes%5FRouting?ref=linuxfrickeln.de) beschreibt die Möglichkeit, Routing nicht nur von der Destination-IP abhängig zu machen sondern von selbst definierten Regeln (Policies).

So können zum Beispiel Pakete aufgrund ihrer Source-IP oder ihres Destination-Ports geroutet werden. Dies wird benötigt wenn man zwei oder mehrere Gateways nutzen möchte (z.B. zwei DSL-Leitungen). Man könnte dann Webtraffic vom restlichen Traffic (Mail, VPN, Fernwartung...) trennen.

## Webtraffic (Port 80 und 443) über zweites Gateway routen

Im folgenden Beispiel gibt es drei Interfaces, jeweils mit IP und Gateway. An einem Interface hängen alle LAN-Clients. Ein weiteres wird für nicht priorisierte Anwendungen genutzt (z.B. Mail). Hier ist es nicht wichtig eine hohe Bandbreite zur Verfügung zu haben. Außerdem gibt es ein LTE-Interface an welchem ein weiterer Router oder ein LTE-Modul angeschlossen wird. Webtraffic für Port 80 oder Port 443 soll nur über dieses Gateway geroutet werden. Somit werden Downloads schneller abgeschlossen.

### Netzaufbau

| eth0 | LAN-Netz, alle Clients                   |
| ---- | ---------------------------------------- |
| ppp0 | WAN-IP, PPPoE Einwahl-Punkt, **6MBit/s** |
| eth2 | LTE-Gateway mit LTE-Modul, **50MBit/s**  |

### Firewall-Regeln mit iptables

Mit iptables markieren wir nun in der MANGLE-Tabelle alle relevanten Pakete mit einer 2.

```
iptables -A PREROUTING -t mangle -i eth0 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 2
iptables -A OUTPUT -t mangle -p tcp -m multiport --dports 80,443 -j MARK --set-mark 2
iptables -A POSTROUTING -t nat -o eth2  -j SNAT --to-source 192.168.10.254

```

Für Pakete die lokal erzeugt werden, greift die PREROUTING-Regel nicht, da diese die Maschine nicht passieren. Hierfür muss OUTPUT (wie oben zu sehen) verwendet werden. Als letztes muss noch ein Source-NAT ergänzt werden, weil sonst die Pakete im Falle des alternativen Routings mit der falschen Source-IP verschickt werden würden.

### Anlegen der zweiten Routingtabelle

Jetzt kann eine zweite Routingtabelle erstellt werden. Gegebenenfalls mit `apt-get install iproute2` das entsprechende Paket nach installieren. Dieses sollte aber bei allen gängigen Distributionen enthalten sein.

```
echo "201 lte_http" >> /etc/iproute2/rt_tables

```

### Interface-Konfiguration

Das Routing über das alternative Interface (hier eth2) geschieht mithilfe der neu erstellten Routingtabelle. Wir haben die Web-Pakete (Port 80 und 443) mit iptables markiert, haben eine weitere Routingtabelle erstellt und müssen jetzt noch Regeln (Policies) für das Routing festlegen.

Alle mit einer 2 markierten Pakete sollen über die alternative Routingtabelle geroutet werden. Das geht mit `ip rule add` und `ip route add`. Solange diese Anweisungen in der Interface-Konfiguration stehen, sind Sie **boot-safe**, also auch nach einem Neustart des Servers wieder aktiv. Die Config findest du unter `vim /etc/network/interfaces`.

```
# LTE
auto eth2
iface eth2 inet static
    address 192.168.10.254
    netmask 255.255.255.252

    post-up ip rule add fwmark 2 table lte_http
    post-up ip route add default via 192.168.10.253 dev eth2 table lte_http

```

Und schon hast du einen Dual-Uplink Router eingerichtet. Es lässt sich natürlich auch ein Load-Balancer einrichten und viele andere nützliche Dinge.

Wer mehr erfahren möchte, schaut bei den Leuten von [Linux Advanced Routing & Traffic Control](http://www.lartc.org/?ref=linuxfrickeln.de) vorbei.