====== HOWTO: Multihoming ======
**a.k.a von Welt unter mehreren IPs erreichbar sein**
===== Problemstellung =====
* mehrere IPs an einem Rechner sind normalerweise kein Problem, einfache zusätzliche Adresse konfigurieren, fertig
* jedoch verwenden moderne Betriebssysteme meist nur eine einzige Routingtabelle zum routen
* Antworten zu Anfragen von IPs außerhalb der konfigurierten Subnetze gehen standardmäßig über die eingestellte Defaultroute
* davon kann es mehrere geben, aber nur die mit der kleinsten Metrik matcht
* soll ein Rechner unter 2 IPs von Welt erreichbar sein, muss der Rechner auch von der IP aus antworten, an die die Anfrage ging und nicht einfach von der IP des Interfaces, über die die Defaultroute geht
* die Clients bekommen dann Antwort von einer anderen IP, als die angefragte und können diese Antworten nicht mehr zuordnen und sie werden verworfen
===== Policy-Based Routing =====
Die Lösung für das oben beschriebene Problem heißt Policy-Based Routing.
* mehrere Routingtabellen
* Auswahl der Tabelle anhand einer Rule
* in diesem Fall abhängig von der Zieladresse der eingehenden Anfrage
* damit ist sichergestellt, dass die Antworten über die passende Defaultroute rausgehen
==== neue Routingtabellen ====
* Tabellennamen eintragen
#
# reserved values
#
255 local
254 main
253 default
1 tbl_eth0
2 tbl_eth1
* Tabelle tbl_eth0 füllen
ip route add 192.168.1.0/24 dev eth0 src 192.168.1.1 table tbl_eth0
ip route add default via 192.168.1.254 dev eth0 src 192.168.1.1 table tbl_eth0
* Tabelle tbl_eth1 füllen
ip route add 192.168.2.0/24 dev eth1 src 192.168.2.1 table tbl_eth1
ip route add default via 192.168.2.254 dev eth1 src 192.168.2.1 table tbl_eth1
==== Policies konfigurieren mittels ip rule ====
ip rule add from 192.168.1.1 table tbl_eth0
ip rule add from 192.168.2.1 table tbl_eth1
===== ARP-Antwort-Einstellungen =====
Wenn die IPs auf verschiedenen Interfaces anliegen oder sonst irgendwie die IP-MAC-Bindung wichtig ist (2 IPs im selben Subnetz), sollte man einstellen, dass der Rechner nur die vorgesehene MAC des Interfaces mit der IP verwendet, damit nicht jede IP an jedem Interface verfügbar ist.
net.ipv4.conf.eth0.arp_announce=2
net.ipv4.conf.eth0.arp_ignore=1
net.ipv4.conf.eth1.arp_announce=2
net.ipv4.conf.eth1.arp_ignore=1
===== Konfiguration unter verschiedenen Distributionen/Betriebssystemen =====
==== Gentoo ====
config_eth0="192.168.1.1/24"
routes_eth0="192.168.1.0/24 table tbl_eth0 src 192.168.1.1
default via 192.168.1.254 table tbl_eth0 src 192.168.1.1
default via 192.168.1.254"
rules_eth0="from 192.168.1.1 table tbl_eth0"
config_eth1="192.168.2.1/24"
routes_eth1="192.168.2.0/24 table tbl_eth1 src 192.168.2.1
default via 192.168.2.254 table tbl_eth1 src 192.168.2.1"
rules_eth1="from 192.168.2.1 table tbl_eth1"
==== Debian ====
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
gateway 192.168.1.254
up ip route add 192.168.1.0/24 dev "$IFACE" src 192.168.1.1 table "tbl_$IFACE"
up ip route add default via 192.168.1.254 dev "$IFACE" table "tbl_$IFACE"
up ip rule add from 192.168.1.254 table "tbl_$IFACE"
iface eth1 inet static
address 192.168.2.1
netmask 255.255.255.0
up ip route add 192.168.2.0/24 dev "$IFACE" src 192.168.2.1 table "tbl_$IFACE"
up ip route add default via 192.168.2.254 dev "$IFACE" table "tbl_$IFACE"
up ip rule add from 192.168.2.254 table "tbl_$IFACE"
Hinweis: Unter Debian wheezy (Kernel 3.2.0) wird dafür auch folgende Einstellung benötigt: FIXME Verifizieren!
net.ipv4.ip_forward=1
Sicherheitshalber sollte dies mit folgender Firewall-Regel kombiniert werden:
iptables -A FORWARD -j REJECT