Linux Server mit mehreren NICs im selben Netz

Folgendes Problem:

Man hat einen Server mit zwei Interfaces im selben LAN. eth1 nutzt 10.0.0.1/24, eth2 die 10.0.0.2/24. Hinzu kommt eth0 welches als Gateway für Clients an eth1 dient (eth2 soll dediziert für NFS/CIFS genutzt werden, eth1 für die restliche Kommunikation mit dem LAN). Nun wird man eventuell feststellen das man von einem anderen Client aus Traffic zur 10.0.0.2 schickt, dieser aber auf eth1 hereinkommt. Um dies zu fixen gibt es zwei Möglichkeiten eine einzige ultimative Möglichkeit:

Anpassungen in der /etc/network/interfaces falls man eine feste IP-Adresse am Gateway hat:

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet static
  address 192.168.178.34
  netmask 255.255.255.0
  gateway 192.168.178.1

iface eth0 inet6 auto

allow-hotplug eth1
iface eth1 inet static
  address 10.0.0.1
  netmask 255.255.255.0
  up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  up ip route add 10.0.0.0/24 dev eth1 src 10.0.0.1 table rt1
  up ip route add default via 192.168.178.34 dev eth1 table rt1
  up ip rule add from 10.0.0.1 lookup rt1

allow-hotplug eth2
iface eth2 inet static
  address 10.0.0.2
  netmask 255.255.255.0
  up ip route add 10.0.0.0/24 dev eth2 src 10.0.0.2 table rt2
  up ip rule add from 10.0.0.2 lookup rt2

Und falls man dhcp am Gateway nutzt:

auto lo
iface lo inet loopback

allow-hotplug eth0
iface eth0 inet dhcp

iface eth0 inet6 auto

allow-hotplug eth1
iface eth1 inet static
  address 10.0.0.1
  netmask 255.255.255.0
  up iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  up ip route add 10.0.0.0/24 dev eth1 src 10.0.0.1 table rt1
  up ip route add default dev eth1 table rt1
  up ip rule add from 10.0.0.1 lookup rt1

allow-hotplug eth2
iface eth2 inet static
  address 10.0.0.2
  netmask 255.255.255.0
  up ip route add 10.0.0.0/24 dev eth2 src 10.0.0.2 table rt2
  up ip rule add from 10.0.0.2 lookup rt2

Unterschiede: DHCP statt statische Konfiguration für eth0, außerdem wird bei eth1 in der Standardroute keine IP-Adresse angegeben.

Die benötigten Routingtabellen erstellen in der /etc/iproute2/rt_tables Datei:

255     local
254     main
253     default
0       unspec
1 rt1
2 rt2

Und zum Schluss die passende sysctl Config /etc/sysctl.d/90-bastelfreak.conf:

net.ipv4.ip_forward=1
net.ipv.conf.eth1.arp_proxy=0
net.ipv.conf.eth2.arp_proxy=0
net.ipv4.conf.eth1.arp_ignore=1
net.ipv4.conf.eth2.arp_ignore=1
net.ipv4.conf.eth1.arp_filter=1
net.ipv4.conf.eth2.arp_filter=1

Warum funktioniert das ganze(Erklärung von qybl)?
Als erstes ein Link zum Packet Flow.

16:48:34 - qybl: (ignorier mal, dass es iptables/netfilter is fuer die erklaerung :D)
16:49:03 - qybl: pakete kommen auf deinem eth1 vom angeschlossenen laptop rein, gehen dann durch den ganzen linux-routing-stack
16:49:09 - qybl: am ende steht die default-route dev eth1
16:49:30 - qybl: damit landen die pakete wieder ganz links beim 'ingress'-kaestchen
16:49:36 - qybl: und es geht dann durch die main-routing-table
16:49:51 - qybl: und dann kommt eben aus der die passende default-route und man kommt ins internet

This entry was posted in General, Linux. Bookmark the permalink.

1 Response to Linux Server mit mehreren NICs im selben Netz

  1. Pingback: Redundantes Gateway inkl bonding unter Linux bauen | the world needs more puppet!

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload CAPTCHA.