Routing-Problem

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Nano
Beiträge: 66
Registriert: 21.04.2004 17:46:34

Routing-Problem

Beitrag von Nano » 28.12.2004 00:45:40

Hallo leute,

Ich habe folgendes problem:
Ich habe einen debian router, der eine Hand voll Rechner ins Internet routet. Es gibt 3 öffentliche IP's und eine private (192.168...). Es sind also 4 Netzwerkkarten drinnen.

Das Problem ist, dass die 3 NICs mit den öffentlichen IP's ins gleiche Netz (Internet) über den gleichen standard-gateway geroutet werden. Das erscheint am ersten blick unsinning, ist es aber nicht. Denn mein Provider authentifiziert (und verrechnet) per MAC/IP Adresse hinsichtlich Traffic usw.

So, jetzt will ich dass 1 der Rechner im LAN mit NAT über die eine öffentliche IP geroutet wird. Der nächste soll über die zweite, und alle restlichen Rechner über die dritte IP ge-NAT-ed werden.

Mein Problem: Wenn ich mehr als 1 Standard-gateway angebe, funktioniert nichts mehr, nichtmal mehr ein ping. Wenn ich nur 1 Standard gateway angebe, dann geht alles über die gleiche NIC und die anderen bleiben quasi unbenutzt.

Wie hättet ihr das gemacht?
MfG,
Nano

Benutzeravatar
McAldo
Moderator
Beiträge: 2069
Registriert: 26.11.2003 11:43:36
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Terra / Sol-System / Milchstraße

Beitrag von McAldo » 28.12.2004 09:33:36

Vielleicht solltes du das mal mit DNAT versuchen. Die interne IP des Gateways ist das Ziel der der Rechner in deinem LAN.
Dein Server leitet dann die Anfragen der internen Rechner an die jeweilige Adresse ins Internet.
Hab jetzt leider die nötige iptables Regel zur Hand, kann aber am Abend mal nachschauen.

McAldo
Achte auf deine Gedanken, denn sie werden Worte.
Achte auf deine Worte, denn sie werden Handlungen.
Achte auf deine Handlungen, denn sie werden Gewohnheiten.
Achte auf deine Gewohnheiten, denn sie werden dein Charakter.
Achte auf deinen Charakter, denn er wird dein Schicksal.
(Talmud)

Nano
Beiträge: 66
Registriert: 21.04.2004 17:46:34

Beitrag von Nano » 28.12.2004 10:51:43

Hmm, weiss nicht genau was du meinst. Der Gateway ist immer der gleiche, egal welche der 3 äusseren IPs ich benutze. So soll es auch sein. Der (Standard)Gateway X.X.X.1 , wird von meinem Provider bereitgestellt und ich habe keine Kontrolle darüber.
Wenn ich etwas mit DNAT machen würde, würde die "echte" Destination sowieso verloren gehen, falls du den outgoing traffic meinst.
MfG,
Nano

Benutzeravatar
McAldo
Moderator
Beiträge: 2069
Registriert: 26.11.2003 11:43:36
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Terra / Sol-System / Milchstraße

Beitrag von McAldo » 28.12.2004 10:57:06

Ok, dann nochmal zum nachvollziehen. Du hast einen Rechner (dein Gateway), der mit 4 Netzwerkkarten ausgestattet ist. Eine davon zeigt ins LAN die anderen ins Internet.
Mit iptables kann du sagen, dass wenn ein Paket von der IP 192.168.xxx.xx1 komm nach öffentl.IP.xxx.xxx1 geroutet wird. Dazu dann noch eine Regel, die das wieder von außen nach innen routet.
Wenn ein Paket von 192.168.xxx.xx2 kommt, dann soll es nach öffentl.IP.xxx.xx2 geroutet werden. Und so weiter.
Die Regeln dafür weiß ich wie gesagt nicht auswendig, kann aber am Abend mal schauen, wie sowas aussehen könnte.

McAldo
Achte auf deine Gedanken, denn sie werden Worte.
Achte auf deine Worte, denn sie werden Handlungen.
Achte auf deine Handlungen, denn sie werden Gewohnheiten.
Achte auf deine Gewohnheiten, denn sie werden dein Charakter.
Achte auf deinen Charakter, denn er wird dein Schicksal.
(Talmud)

Nano
Beiträge: 66
Registriert: 21.04.2004 17:46:34

Beitrag von Nano » 28.12.2004 12:20:51

Ja, das ist mir klar. Nur dass dann eben nichts passiert. Weil es anscheinend immer nur EINEN default gateway geben kann. Hab es schon ausprobiert. hmm....

Das problem ist, es funktioniert immer nur mit EINER IP adresse.
Wenn ich folgendes zB. mache:

Code: Alles auswählen

 route add default gw 84.113.194.1 eth3 
Dann funktioniert ausschliesslich alles über eth3 mit genau der IP von eth3. Alle Verbindungen und IPs die über die anderen öffentlichen IPs geroutet werden, werden ignoriert. Die anderen Netzwerkkarten sind quasi tot. Die Verbindungen mit iptables und NAT auf die anderen karten/IP's zu dirigieren hilft auch nichts (geht nicht, keine verbindung).

Die Frage lässt sich doch einfacher formulieren: Wie kann ich mehrere Interfaces benutzen anstatt nur eines, die alle ins gleiche Netz führen (Internet). Wenn ich mehr als einen "default gateway" angebe, funktioniert scheinbar gar nichts mehr.
MfG,
Nano

McClane
Beiträge: 154
Registriert: 28.12.2003 14:00:51

Beitrag von McClane » 28.12.2004 16:18:56

Ich denke was du brauchst ist ein 1to1 NAT oder auch Static NAT genannt.
Allerdings kannst du eine feste IP dann nur einem Rechner zuordnen. Aber ich glaube in deinem Fall würde dir das ja sogar reichen.
Damit erreichst du das einegehender Traffic über eine bestimmte IP (Alias) wie beim Portforwarding auf einen bestimmten Rechner geht aber auch der ausgehende Traffic von diesem einen Rechner diese eine IP als Absender hat.
Aber frag mich jetzt nicht wieder das geht :)
Aber ich vermute mit IPtables und source und destination nat.

Nano
Beiträge: 66
Registriert: 21.04.2004 17:46:34

Beitrag von Nano » 28.12.2004 21:28:46

McClane hat geschrieben:... einegehender Traffic über eine bestimmte IP (Alias) wie beim Portforwarding auf einen bestimmten Rechner geht aber auch der ausgehende Traffic von diesem einen Rechner diese eine IP als Absender hat. .
Der Gedanke ist mir auch schon gekommen. Aber auch das ist keine Lösung: Denn mein Provider "authentifiziert" die Rechner (IP's) per MAC Adresse. Die LAN Karte mit der IP xxx.xx.xxx.xxx kommt also nur ins Netz, wenn die dazugehörige MAC Adresse damit übereinstimmt. Das heisst ich bräuchte 3 MAC Adressen. Bei virtuellen (alias) IP's ist die MAC aber bei allen gleich. Nämlich immer die vom physischen Interface. Zumindest hab ich nicht herausgefunden wie man die ändert.

Abgesehen davon, selbst WENN ich es schaffe 3 virtuelle Interfaces mit verschiedenen MACs einzurichten. Dann habe ich noch immer das Problem , dass nur über eine einzige geroutet wird. Weil man eben nur für eine anscheinend einen Standard Gateway angeben kann.

Hmm, jetzt steh ich schön blöd da...
MfG,
Nano

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 28.12.2004 21:36:37

Nano hat geschrieben:
McClane hat geschrieben:Weil man eben nur für eine anscheinend einen Standard Gateway angeben kann.
ein kleiner workaround gefällig:

Code: Alles auswählen


auto eth0 
iface eth0 inet static 
   address ...
   netmask 255.255.255.0 
   network ...
   broadcast ...
   up route add -net ... netmask 255.255.255.0 gw ... dev eth0 
   down route del -net ... netmask 255.255.255.0 gw ... dev eth0 
        
auto eth1 
iface eth1 inet static 
   address ...
   netmask 255.255.255.0 
   network ...
   broadcast ...
   gateway ...


McClane
Beiträge: 154
Registriert: 28.12.2003 14:00:51

Beitrag von McClane » 28.12.2004 21:39:41

Streich das Alias...
aber so ganz verstehen tu ich das immer noch nicht.
Wo hängen denn die 3 Netzwerkkarten dran?
So wie du es beschreibst müssen sie, damit abgerechnet werden kann, alle zusammen an einem HUB hängen, an dem auch die Schnittstelle zum Standardgateway sitzt.
Sonst ist es ja unmöglich das die MAC Adresse mit der IP übereinstimmt.

Code: Alles auswählen

               GW zum Provider
                        |
                        |
                   [--------]  HUB
                    |   |   |
                   /    |   \
                eth0   eth1  eth2

Nano
Beiträge: 66
Registriert: 21.04.2004 17:46:34

Beitrag von Nano » 30.12.2004 04:42:04

Wow, danke gms! Das hat hingehaut!
Fettes dankeschön, ebenfalls aus Wien :D
MfG,
Nano

Nano
Beiträge: 66
Registriert: 21.04.2004 17:46:34

Beitrag von Nano » 30.12.2004 12:23:02

Verdammt. Es hat nur auf den ersten Blick so ausgesehen als ob es funktioniert. Es wird trotzdem immer übers gleiche Interface geroutet.

Wenn ich mit IPtables eine Regel angebe, mit der zB "-s 192.168.0.3 -j SNAT --to-source .... " auf eine andere der öffentlichen IPs ge-nat-ed wird, dann funktionierts nicht, aber nur von dem einen Host.

Ich hab bereits wirklich alles überprüft. Die Netzwerkkarten sind vollkommen in Ordung und funktionern perfekt, wenn man mit "ifdown" die anderen beiden abschaltet. Die Kabeln hab ich auch überprüft. Ich hab auch alle netfilter regeln auf accept gestellt und mit einer minimalen nicht-firewall versucht. Alles vergeblich.
Das ist ein reines Routing problem. Wenn mehr als 1 Default gateway da ist, geht nix mehr.

Sagt mal, kann es sein, dass es unter Linux nicht möglich ist, mit mehreren Interfaces ins gleiche Netz zu verbinden. Es sieht nämlich ganz danach aus....
MfG,
Nano

Benutzeravatar
McAldo
Moderator
Beiträge: 2069
Registriert: 26.11.2003 11:43:36
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Terra / Sol-System / Milchstraße

Beitrag von McAldo » 30.12.2004 12:48:07

Sicher geht das.
Was du suchst ist, denke ich DNAT.

Hatte leider bisher keine Zeit zum nachschauen, auch dachte ich nun, dein Problem ist gelöst. Such mal bei google.de/linux nach DNAT. Da findet man ne Menge drüber.

McAldo
Achte auf deine Gedanken, denn sie werden Worte.
Achte auf deine Worte, denn sie werden Handlungen.
Achte auf deine Handlungen, denn sie werden Gewohnheiten.
Achte auf deine Gewohnheiten, denn sie werden dein Charakter.
Achte auf deinen Charakter, denn er wird dein Schicksal.
(Talmud)

Nano
Beiträge: 66
Registriert: 21.04.2004 17:46:34

Beitrag von Nano » 30.12.2004 14:14:25

Ich kenne DNAT.
Allerdings hilft es hier nicht wirklich was. Denn wenn schon das routing nicht funktioniert kann nat auch nichts mehr machen. Es funktioniert ja nichteinmal SNAT nach aussen hin.

Die pings gehen ins Leere. Hab bereits SNAT und DNAT versucht, ohne erfolg:

Code: Alles auswählen

iptables -t nat -A POSTROUTING -s <private IP 1> -j SNAT --to-source <öffentliche IP 1>
iptables -t nat -A POSTROUTING -s <private IP 2> -j SNAT --to-source <öffentliche IP 2>
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
Die letzte regel besagt dass bestehende verbindungen immer akzeptiert werden. Da braucht man DNAT dann auch nicht mehr, ausser fürs port forwarden oder so.

Lösche ich die 2. Regel, so funktioniert alles ganz normal und ohne Probleme. Allerdings nur über das erste Interface. Ich will aber mehrere benutzen. Also gebe ich ein:

Code: Alles auswählen

route add default gw <standardgateway-IP> eth2
. Jetzt hab ich auch für die 2. Netzwerkkarte den gateway. Dann füge ich die Regel, die ich oben als 2. geschrieben habe hinzu, und schon funktioniert gar nix mehr.
MfG,
Nano

Nano
Beiträge: 66
Registriert: 21.04.2004 17:46:34

Beitrag von Nano » 04.01.2005 05:40:44

Habe das Problem soeben gelöst.

Die Antwort lautet iproute ! (siehe http://www.lartc.org )

apt-get install iproute

Dann alle normalen default gateways löschen.
Dann einen einen neuen Routing table hinzufügen

Code: Alles auswählen

echo 200  neuerTable >> /etc/iproute2/rt_tables
Eine Regel für eine spezielle LAN - IP für diesen Table hinzufügen.

Code: Alles auswählen

ip rule add from 192.168.0.XXX table neuerTable
Jetzt den Table mit dem standardgateway für diese LAN IP generieren und den route cache flushen.

Code: Alles auswählen

ip route add default via <gateway> dev <gewünschte netzwerkkarte> table neuerTable
ip route flush cache
Jetzt eine Netfilter Regel dafür hinzufügen. Mit -I und nicht mit -A, sonst kommt die generelle Regel vor der speziellen und gilt für alle Verbindungen. Das wollen wir ja nicht.

Code: Alles auswählen

/sbin/iptables -t nat -I POSTROUTING -s <LAN-IP> -j SNAT --to-source <IP der gewünschten "äusseren" NIC>
Fertig. Funktioniert soweit ohne Probleme.
MfG,
Nano

Antworten