Routing-Problem
Routing-Problem
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?
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
Nano
- 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
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
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)
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)
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.
Wenn ich etwas mit DNAT machen würde, würde die "echte" Destination sowieso verloren gehen, falls du den outgoing traffic meinst.
MfG,
Nano
Nano
- 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
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
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)
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)
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:
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.
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
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
Nano
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.
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.
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.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. .
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
Nano
ein kleiner workaround gefällig:Nano hat geschrieben:McClane hat geschrieben:Weil man eben nur für eine anscheinend einen Standard Gateway angeben kann.
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 ...
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.
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
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....
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
Nano
- 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
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
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)
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)
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:
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:. 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.
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
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
MfG,
Nano
Nano
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
Eine Regel für eine spezielle LAN - IP für diesen Table hinzufügen.
Jetzt den Table mit dem standardgateway für diese LAN IP generieren und den route cache flushen.
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.
Fertig. Funktioniert soweit ohne Probleme.
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
Code: Alles auswählen
ip rule add from 192.168.0.XXX table neuerTable
Code: Alles auswählen
ip route add default via <gateway> dev <gewünschte netzwerkkarte> table neuerTable
ip route flush cache
Code: Alles auswählen
/sbin/iptables -t nat -I POSTROUTING -s <LAN-IP> -j SNAT --to-source <IP der gewünschten "äusseren" NIC>
MfG,
Nano
Nano