zwei default routen - möglich?

Errorsmith

Kompiliertier
Hi

Ich habe Zwei Subnetze: 192.168.200.0/24 und 192.168.24.0/24. Im ersten Subnetz steht ein Firewall-Router der die Verbindung zum Internet herstellt. Im Subnetz 192.168.24.0/24 sind diverse Rechner und Geräte die aufs Internet zugreifen sollen. Die Verbindung erledigt "Router A" mit der IP 192.168.24.1 (und 192.168.200.2 im anderen Subnetz). Das läuft soweit.

Ich möchte nun zusätzlich "Router B" mit der IP 192.168.24.2 (und 192.168.200.3) ins Netz stellen. Sollte "Router A" die Verbindung zum anderen Subnetz verlieren oder gänzlich ausfallen, sollen die Computer über Router B auf das Internet zugreifen können. Hintergrund ist der bevorstehende Austausch von "Router A"

Ich habe nun die optionen im DHCP entsprechend gesetzt:
Code:
option routers   192.168.24.1,192.168.24.2;

Bei den Windows Clients funktioniert dies auch, nur auf dem FreeBSD Rechnern zeigt er mir die zweite Route (netstat -rn) nicht an. Kann FreeBSD das überhaupt ohne weiteres? Installiert ist ein FreeBSD 9.2 auf allen beteiligten Systemen. Wenn das so nicht ohne weiteres geht, welches wäre der richtige Weg für eine temporäre Lösung? Ich würde gern vermeiden, die Rechner alle umzukonfigurieren, will aber auch nicht für ein paar Tage eine vollwertige Failover-Lösung aufsetzen.

Grüße,
errorsmith
 
Jein. Logischerweise kannst du nur eine Defaultroute haben, da es nur einen Weg hinaus in die Welt geben kann. FreeBSD unterstützt zwar mehrere Routingtabellen, d.h. man kann mehrere Tabellen mit unterschiedlichen Defaultroutes haben, aber die Tabellen können Prozessen nur zur Startzeit zugewiesen werden. Im Flug ändern geht auf elegantem Weg nicht. Du könntest nun:
- Ein Script bauen, was regelmäßig prüft ob der Router erreichbar ist und sie bei Bedarf ändert (was anderes macht Windows afaik auch nicht)
- oder eleganter deine beiden Router zu einem CARP-Verbund zusammenfassen
 
will aber auch nicht für ein paar Tage eine vollwertige Failover-Lösung aufsetzen.
Na dann würde ich an Stunde X auf dem Router A das Interface "192.168.200.2" abstellen und auf Router B starten. :)

Vielleicht noch einen Hinweiss. Hat du dir mal überlegt, das Routing auf die Switche zu verlegen? Dann hat der Switch die Gateway Adresse. Natürlich muss der Layer 3 unterstützen. Der Gedanke ist, dass die Switche oft redundant ausgelegt sind. :)
 
Hi
Ich hab parallel ein wenig weiter gegoogelt und hab zumindest einen Ansatz gefunden: Was ich suche nennt sich scheinbar "equal cost multipath routing". Kann FreeBSD das? Ich hab einen uralten Patch für 8.0 ausgegraben, konnte aber nicht herausfinden was daraus geworden ist. So wie ich das verstanden habe, scheint es so zu sein das man mehrere (default)-Routen definieren kann und er nutzt die, die funktieren, im round-robin Verfahren.

@Yamagi:
Mehrere Routingtabellen sind - wie du schon sagst nicht das, was ich brauche.
Das Script müßte ich dann auf jedem Rechner installieren, richtig? Würd ich - für eine temporäre Lösung - gern vermeiden.
Wie würde CARP funktionieren? Router A ist eine FreeBSD Maschine, auf Router B läuft ein Debian, das Teil hat auch wesentlich weniger "Power", es soll ja nur als Interimlösung dienen. Arbeiten die (im Sinne von CARP) einigermaßen poblemlos zusammen? Muss mein Switch das unterstützen?
Windows scheint die Router einen nach dem anderen durchzuprobieren und es nicht dauerhaft zu checken. Wenn ich Router A aus dem Netz nehme, hängen neue Verbindungen kurz, dann läuft es eine Zeitlang "normal", dann hängen sie wieder kurz.

@foxit:
Mein Switch unterstützt leider kein Routing. Ist zwar ein Layer2/3 Switch, Routing kann das etwas ältere Gerät jedoch nicht. Das Interface "umzuschalten" würde trotzdem das Netz unterbrechen. Falls möglich würde ich das gern transparent handhaben.

Grüße
errorsmith
 
EQMR wird unterstützt, wenn "option RADIX_MPATH" im Kernel ist. Da es nicht Teil von GENERIC ist, musst du dir einen eigenen Kernel bauen.
 
Klar hab ich das irgendwann. Aber halt so klein wie möglich :-)
Einen eigenen Kernel baue ich eh immer. Und ich muss das nur einmal machen, die FreeBSD Rechner booten über PXE, alles das gleiche System. Gibts irgendwelche Nachteile bei EQMR von denen ich wissen sollte? Wie gesagt, das war alles recht altes Zeug was ich da gefunden habe...
(Ich guck mir trotzdem mal CARP an)

Grüße,
errorsmith
 
Stichwort fib bzw. forwarding information base ist das gesuchte Stichwort,
um Waelder zu erschaffen.Die Defaultroute stellt i. A. den Wurzelknoten
(abgebildet auf struct rtentry mit gesetztm RNF_ROOT flag) dar.

Im Hinblick auf fib bedeutet dies, dasz auf eine Protokollfamilie
mehrere Routingtables (identifiziert durch fib) abgebildet werden.
Vorrausgesetzt, dasz
#
# net.fibs > als 1
#
per sysctl() gesetzt wird. Auszug aus net/route.c:
Code:
/* Initialize to default if not otherwise set. */
#ifndef RT_NUMFIBS
#define RT_NUMFIBS 1
#endif

u_int rt_numfibs = RT_NUMFIBS;
SYSCTL_UINT(_net, OID_AUTO, fibs, CTLFLAG_RD, &rt_numfibs, 0, "");
/*
* Allow the boot code to allow LESS than RT_MAXFIBS to be used.
* We can't do more because storage is statically allocated for now.
* (for compatibility reasons.. this will change. When this changes, code should
* be refactored to protocol independent parts and protocol dependent parts,
* probably hanging of domain(9) specific storage to not need the full
* fib * af RNH allocation etc. but allow tuning the number of tables per
* address family).
*/
TUNABLE_INT("net.fibs", &rt_numfibs);
Wie unschwer zu erkennen ist, wird als Grundeinstellung nur ein fib,
bei Systemstart initialisiert, d.h. bspw. kann die Anzahl gegebener
Rtables bspw. durch setzen von
#
# net.fibs=2
#
in /boot/loader.conf erhoeht werden, da der Rtable bei Systemstart
(siehe u. a. domain(9)) via dom_rtattach() bzw. in_inithead() bzgl.
AF_INET initialisiert wird.

Soll eine spezifische Route referenziert werden,
so kann dies bspw. via in_rtalloc() (siehe netinet/in_rmx.c)
bzw. per rtsocket oder via in_rtrequest() realisiert werden.
Aus Perspektive des Userspace kann bspw. ein spezifischer Routingtable mittels
#
# route add -host my_destination my_gateway my_netmask -fib N
#
manipuliert werden. Die Option -fib N identifiziert den Nten rtable
in einer spezifischen Domaene (hier: bspw. AF_INET).

Guten rutsch...
 
Zuletzt bearbeitet von einem Moderator:
Der saubere Weg hängt von mehreren Details ab, aber so wie du es beschreibst klingt CARP nach dem richtigen Weg. Alternativ auf jedem System einen OSPF Daemon, wenn du Overkill magst.
 
Zurück
Oben