PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LVS --> UDP-Forwarding, aber wie???


MGeee
2003-04-24, 12:22:41
Hallo,

Wie muss ich das Paket ipvsadm (www.linuxvirtualserver.org) konfigurieren, damit ich Port-Forwarding betreiben kann??

Ich will folgendes erreichen:
Mein Client-Rechner fragt auf Port 1234 an der virtuellen IP-Adresse an und soll dann auf einen bestimmten Rechner geforwarded werden.
Fragt der gleiche Client-Rechner wieder auf an der virtuellen IP-Adresse aber mit Port 4321 an, soll er an einen anderen Rechner geforwardet werden.

wie bekomme ich dass mit ipvsadm hin??

Danke schonmal im vorraus.

Gruß,
MGeee

schroedinger
2003-04-27, 23:26:53
Da ich das Programm ipvsadm nicht kenne, kann ich dir nur sagen, wie ich s machen würde.
Vorraussetzungen: 2.4er Kernel und iptables

192.168.0.1 (eth0).... ipadresse1
192.168.0.2 (eth0:1).... virtuelleipadresse
192.168.0.10 .... bestimmter rechner
192.168.0.20 .... anderer rechner

iptables -t nat -A PREROUTING -i eth0:1 -p tcp (oder udp) --dport 1234
-j DNAT --to-destination 192.168.0.10

iptables -t nat -A PREROUTING -i eth0:1 -p tcp (oder udp) --dport 4321 -j DNAT --to-destination 192.168.0.20

Ich ging davon aus das du einer Netzwerkkarte 2 IPAdressen vergebn hast (virtuelle IP-Adresse?!), falls du aber doch 2 Netzwerkkarten hast, dann tausche alle eth0:1 mit eth1 aus.

MGeee
2003-04-28, 09:09:28
Danke erstmal, ich werde es so mal ausprobieren!

Ich habe in dieser Maschine sogar 3 NICs drin, allerdings
soll die virtuelle IP an 2 der 3 NICs auch sichtbar sein.
In dem Sinne ist eth0:1 auch richtig. IPTables und der 2.4´er
sind installiert, bzw. aktiv.
Ein weiteres Problem, was ich noch dabei habe, ist, dass die
dahinterliegenden Rechner auch noch doppelt ausgelegt sind,
weswegen zusätzlich der Dienst heartbeat -ldirectord installiert
ist. Also muss ich an dieser Stelle nicht nur nach Ports unterscheiden,
sondern auch noch jede IP, die für einen Port steht, doppelt eintragen können. Angeblich soll das gehen ???

schroedinger
2003-04-28, 15:27:15
leider vestehe ich das problem nicht ganz, deswegen halte ich es allgemein. Du benötigst mehr Auswahlkriterien als alleinig den Port? Z.B.die destination und source ip, und den destinationport. Kein Problem:
Um den schon geposteten Code zu präsentieren:

iptables -t nat -A PREROUTING -i eth0:1 -p tcp (oder udp) --dport 1234
-j DNAT --to-destination 192.168.0.10

du wenn du nun ein portmapping (packet kommt an port 1234, und du routest es weiter an einen anderen rechner auf port 564) dann würde der code folgendermassen aussehen:

iptables -t nat -A PREROUTING -i eth0:1 -p tcp (oder udp) --dport 1234
-j DNAT --to-destination 192.168.0.10:564


wenn du nur packete von einem bestimmten rechner weiterleiten willst (192.168.0.200)


iptables -t nat -A PREROUTING -i eth0:1 -s 192.168.0.200 -p tcp (oder udp) --dport 1234
-j DNAT --to-destination 192.168.0.10:564

wenn du mir aber dein netzwerk genauer beschreibst (+ problemstellung) (ich verstehe nicht genau was du mit "doppelt ausgelegten rechnern" meinst) , kann ich dir (hoffentlich) eine passende Lösung schicken.

MGeee
2003-04-29, 09:21:45
hallo + Danke für die Antwort!

Also:
Ich habe 2 Server mit insgesamt 7 Diensten (die ich auf dem jeweiligen Port ansprechen kann).
Diese 2 Server existieren 2x, ich habe also sozusagen 2 Stränge, wobei der zweite Strang als Backup dient, falls der erste ausfällt.
Vor jedem der beiden Stränge befindet sich ein Redirector, als 2 Redirectoren insgesamt. Die Redirectoren dienen zum einen als Trennung zwischen innen (die 2 Server) und aussen (Client-Rechner).
Jeder Redirector hat 3 NIC´s:
NIC 1: nach "innen" zu den Servern (Netz 10.100.50.0)
NIC 2: nach aussen (Netz 10.230.50.0) zu den Clients.
NIC 3: Heartbeat-> direkte Verbindung zwischen den beiden Redirector.

Das Paket ipvsadm (www.linuxvirtualserver.org) generiert eine virtuelle IP-Adresse, welche von "aussen" von den Clients angesprochen wird. Die Konfig zur virtuellen IP sieht momentan folgendermaßen aus:

virutelle IP=10.230.50.1
Server1=10.100.50.10 (im Strang 1)
Server1=10.100.50.20 (im Strang 2=Backupstrang)


In Verbindung mit dem Heartbeat-Dienst (Paket heartbeat-ldirectord) kann nun über die virtuelle IP entweder Server1 oder Server2, je nachdem, welcher Strang aktiv ist, erreicht werden.

Stellt der aktive Redirector (vom aktiven Strang) fest, dass einer der 7 Dienste (Ports) nicht erreichbar ist (Testverfahren: Telnet mit IP+Port auf den jeweiligen Server/Dienst mit dem heartbeat-ldirectord Dienst), schaltet er auf den zweiten Strang um und der Client spricht über die virtuelle IP 10.230.50.1 den Server 10.100.50.20 an.

... soweit sogut. In diesem Zustand habe ich die Maschinen übernommen. Jetzt befinden sich aber nicht mehr nur 1 Server, sonder 2 Server im Strang (also insgesamt 4 Server auf 2 Stränge verteilt, wobei der zweite Strang, wie bereits gesagt nur all Backup dient, falls im ersten Strang ein Dienst nicht erreichbar ist).

Nun muss der Redirector an der virtuellen IP-Adresse nicht nur einfach die einkommenden Pakete an einer der beiden (jeweils aktiven) Server forwarden, sondern auch noch nach Ports unterscheiden, also z.B. so:

virutelle IP=10.230.50.1
Server1=10.100.50.10:80 (im Strang 1)
Server1=10.100.50.20:80 (im Strang 2=Backupstrang)
Server2=10.100.50.11:25 (im Strang 1)
Server2=10.100.50.21:25 (im Strang 2=Backupstrang)


hierzu müssen die nachstehenden iptables-Einträge dementsprechend angepasst werden.

Die virtuelle IP wird übrigens wie folgt generiert:
ipvsadm -A 10.230.50.1:domain (virtuelle IP)
ipvsadm -a 10.100.50.10:domain (echte IP, zu der geforwarded wird)
ipvsadm -a 10.100.50.20:domain (echte IP, zu der im Backup-Fall geforwarded werden soll)

leider klappt das Ganze nicht, zumal das uns zur Verfügung gestellte Paket ipvsadm zur Generierung der virtuellen IP noch eine Spezialanpassung seitens suSE ist, damit es mit dem Heartbeat zusammenarbeitet.

Generell denke ich, dass wir mit der Anpassung der Filterlisten (iptables) zum Ziel kommen werden.

schroedinger
2003-04-30, 03:09:19
Hi

okey, langsam verstehe ich Load Balancing unter Linux. Dein Link war da sehr hilfreich.
Soweit ich bis jetzt herausgefunden habe, benötigen wir iptables nicht, portforwarding beherrscht auf ipvsadm. Damit hätten wir uns schon ein bisschen Arbeit erspart.
Um konkreter auf dein Problem eingehen zu können, muss ich mir noch den Heartbeat-Dienst (und seine wechselwirkung mit den ipvsadm regeln) genauer anschauen. Soweit ich bis jetzt gesehen habe, muss man mit Perlskripts herumhantieren.

Ich melde mich spätestens am Donnerstag wieder (Feiertag), ich hoffe bis da ist es nicht zu spät ;-)

MGeee
2003-04-30, 07:07:55
Super, danke!

kein Problem, ich bin sowieso erst wieder am Montag an den Maschinen :)