public:technik:howto:multihoming

HOWTO: Multihoming

a.k.a von Welt unter mehreren IPs erreichbar sein

  • 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

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
  • Tabellennamen eintragen

/etc/iproute2/rt_tables

#
# 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

ip rule add from 192.168.1.1 table tbl_eth0
ip rule add from 192.168.2.1 table tbl_eth1

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.

/etc/sysctl.d/local-multihome.conf

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

/etc/conf.d/net

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"

/etc/network/interfaces

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!

sysctl

net.ipv4.ip_forward=1

Sicherheitshalber sollte dies mit folgender Firewall-Regel kombiniert werden:

iptables

iptables -A FORWARD -j REJECT

  • public/technik/howto/multihoming.txt
  • Zuletzt geändert: 2013/10/30 18:08
  • von mehdorn