Routing mit 2 IPs

djrick

Registered User
Hallo,

Ich brauche mal ne ziemlich genaue Beschreibung für das Routing mit 2 IPs unter Linux. Also folgendes:

Ich habe zwei Netzwerkdevices nennen wir sie: eth0 und eht1 ;)
Beide haben eine IP eth0: 123.123.123.1 und eth1: 123.123.123.2 .

Nun möchte ich der Routing Tabelle sagen:
Alles was über 123.123.123.1 reinkommt auch über 123.123.123.1 rausschicken und für 123.123.123.2 genauso.

Bisher ist es nämlich so:
Es kommt was an Device 2 an aber wird über Device 1 wieder gesendet, weil das die default route ist.

Aber das ist irgendwie doof, weil eine Statistik sieht dann so aus:

eth0 (default): 1 MB in / 2 MB out
eth1: 1 MB in / 0 MB out

Zusatzinfo: Es geht um IPv6, aber das sollte das gleiche sein wie mit normalen IP Addressen.
 
Hallo!
Ich vermisse hier die Angabe einer Subnetzmaske. Wenn wir mal von Standard Class C ausgehen, kann man sich das Routing doch wohl komplett schenken. Beide IPs sind im gleichen Subnetzt.

mfG
Thorsten
 
Ich schätze, da wirst du auf mangle und QoS Routing zurück greifen müssen.

Du kannst die Verbindungen je nach eingangs IF mit CONNMARK markieren, und je nach Markierung unterschiedliche Routen benutzen.

mit iproute kansnt du dann für jede Markierung eine unterschiedliche Routing Tabelle verwenden, und somit steuern, über welches Interface die Pakete den Rechner verlassen sollen.

Ist aber nicht ganz trivial einzurichten.
 
Machen wirs konkreter:

Device 1: xs26-de
IPs:
3ffe:80ee:3358::/48

Device 2: ipv6tf-ee
IPs:
2001:07F9:0400:0124::/64

ip -6 route:
Code:
2000::/3 dev xs26-de  metric 1  mtu 1480 advmss 1420 fragtimeout 64
fe80::/64 via :: dev xs26-de  metric 256  mtu 1480 advmss 1420 fragtimeout 64
ff00::/8 dev xs26-de  metric 256  mtu 1480 advmss 1420 fragtimeout 1
unreachable default dev lo  proto none  metric -1  error -101 fragtimeout 255

Device2 ist bislang dort noch nicht drinne, weil ... siehe meine Frage :)
 
OK, vorweg: da kann ich dir momentan nur die Ansätze liefern - ich hatte vor einiger Zeit ein QoS Routing aufgesetzt, allerdings für IPv4 - sollte sich aber auf v6 portieren lassen.

Zuerst brauchst du in der mangle Table einträge, mit denen du Pakete bzw. Verbindungen markierst, die über das IF rein kommen, welches aktuell nicht für ausgehende Pakete gemäss deiner Problematik verwendet wird.

Dazu verwendest du das MARK Modul von iptables.

also müsst das etwa so aussehen:
ip6tables -t mangle -i eth0 -j CONNMARK --set-mark 0x00
ip6tables -t mangle -i eth1 -j CONNMARK --set-mark 0x01
(syntax aus v4 abgeleitet - falls das so nicht klappt, einfach in der ipv6tables manpage nachsehen)

die obere bewirkt, dass Verbindungen, die über eth0 rein kamen, mit der Markierung 0 versehen werden, die untere, dass sie mit 1 markiert werden.

Ach ja, die entsprechenden Module muss dein Kernel natürlich unterstützen. Höchstwahrscheinlich musst du dazu einen eigenen Kernel bauen.

dann brauchst du zu der existierenden default Routing Tabelle noch eine weitere.

ip rule add fwmark 1 table 1
ip route add table 1 to $ip/$netmask via eth1

Die obere Zeile bewirkt, dass bei Paketen, die die Markierung 1 tragen, die alternative Routingtabelle verwendet wird.
Die 2. Zeile definiert dann die Subnet Route in der alternativen Tabelle.

Falls du nicht mit den Routing Table IDs arbeiten willst, ist es auch möglich, über /proc die verschiedenen Tabellen mit Namen zu versehen. Da weiß ich allerdings jetzt auf die Schnelle nicht mehr, in welches Pseudo-File man das schreiben musste.

Evtl. brauchst du auch noch ein Default GW in der alternativen Tabelle.

Ach ja: IPv6 netfilter ist noch im Stadium EXPERIMENTAL - ich kann da über die Stabilität nichts aussagen.
 
Back
Top