zwei ethernetkarten -> keine internetverbindung

Einrichten des lokalen Netzes, Verbindung zu anderen Computern und Diensten.
Antworten
Benutzeravatar
johnbecker
Beiträge: 323
Registriert: 07.08.2004 13:43:13

zwei ethernetkarten -> keine internetverbindung

Beitrag von johnbecker » 17.05.2005 13:47:38

hi,

habe einen netgear-router, auf dem ein dhcp-client (cable) und ein -server läuft und einen rechner, der zwei ethernetkarten hat. eine (eth0) wird über dhcp-client über den router konfiguriert und bekommt die ip 192.168.0.2, die andere (eth1) halt normal mit ip 192.168.0.10 -> internet-verbindung über eth0 über router klappt so nicht (obwohl debian die ip an eth0 per dhcp-client vergibt)

nach einem ifdown eth1 -> internet-verbindung über eth0 über router klappt.

beide karten haben die maske 255.255.255.0;
router selbst hat 192.168.0.1 und die selbe maske.

leider weiss ich von netzwerken im prinzip nur so viel, dass ich weiss, welche kabel ich bestellen muss ( ;) ), von daher kann ich mir das phänomen nicht erklären...

Benutzeravatar
bluestar
Beiträge: 2419
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Beitrag von bluestar » 17.05.2005 13:49:42

Stell auf der zweiten Netzwerkkarte (eth1) mal eine IP ein, die nicht im 192.168.0.0/24 Netz liegt, also z.B. 192.168.1.1


Gruß
Jens

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 17.05.2005 13:51:02

du hast zwei Netzwerkkarten an einem Rechner und sie sind beide an den gleichen Switch angeschlossen und haben Adressen aus dem gleichen Netz?

Dann musst du mal unbedingt deine Routingtabelle zeigen

Code: Alles auswählen

route
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
johnbecker
Beiträge: 323
Registriert: 07.08.2004 13:43:13

Beitrag von johnbecker » 17.05.2005 14:04:26

@blue: klappt! (aber, ehm, wieso eigentlich?)

@Savar

Code: Alles auswählen

Kernel IP Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0
192.168.0.0     *               255.255.255.0   U     0      0        0 eth1
default         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
btw: nach dem ich eth1 auf 192.168.1.1 stellte, habe ich mal nochmal auf 192.168.0.10 gestellt, um die ausgabe von route zu bekommen, die Savar wollte. komischer weise klappt das jetzt auch so...

btw2: gibt's für so probleme eigentlich einiger maßen verständliche anleitungen im netz, oder muss ich schon ne ausbildung zum systeminteragtor machen? *g

Benutzeravatar
bluestar
Beiträge: 2419
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Beitrag von bluestar » 17.05.2005 14:50:58

okay für dich mal ein kleiner schneller ausflug ins routing. Also ne IP-Adresse und ne Subnetzmaske kennst du.

In deinem Fall hast du zu Hause das Netz 192.168.0.0 / 255.255.255.0 d.h. zu deinem Netz gehören alle Rechner von 192.168.0.1 bis 192.168.0.254, die Adresse 192.168.0.255 ist die Broadcast-Adresse damit erreichst du alle PC's gleichzeitig.

Nun brauchst du aber noch irgendweine Zuordnung, welche Wege die Pakete gehen sollen - et volià die Routingtabelle, diese wird fleißig von oben nach unten abgearbeitet und es gilt, sobald ein passender Eintrag gefunden wird, hört die Suche auf. Bei zwei gleichen Einträgen wird natürlich immer nur der 1. Eintrag gefunden, d.h. die zweite Route wird nicht verwendet und liegt brach.

Jetzt hast du allerdings einen Rechner mit zwei Netzwerkkarten an das gleiche Netzwerk angebunden, d.h. du hast auch zwei Einträge in der Routingtabelle für das gleiche Netz. Sowas verursacht, einfach mal so dahingesagt - ein kleinwenig Chaos, weil wie willst du einem PC - oder gar einem Programm sagen, das es zwei Wege ins Internet hat?

Das Problem sieht etwa so aus, du startest Firefox der schickt über eth1 eine Anfrage an den Router, das er gerne ins Internet will, dein Router antwortet auch brav, aber die Antwort kommt bei eth0 an und da die Netzwerkkarte keine Verbindung in die Welt aufbauen wollte, wie die Bestätigung das eine Verbindung ins Netz steht dort abgelehnt und deine zweite Netzwerkkarte wartet sich dumm und dämlich und natürlich bekommt sie keine Antwort aus dem Internet.

Mal ne Frage am Rande, wofür hast du zwei Netzwerkkarten in einem PC?

Gruß
Jens

Benutzeravatar
johnbecker
Beiträge: 323
Registriert: 07.08.2004 13:43:13

Beitrag von johnbecker » 17.05.2005 15:15:56

bluestar hat geschrieben:Mal ne Frage am Rande, wofür hast du zwei Netzwerkkarten in einem PC?
habe früher mal mit iptables geroutet, die scripte dafür habe ich allerdings nicht selbst geschrieben - so viel dürfte klar sein *g

also danke für die erklärung!

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 17.05.2005 15:31:40

hmm.. ich möcht hier nicht böses Blut machen, aber bist du dir sicher bluestar? Ich denke eher, dass wenn eine Anfrage über ein Interface rausgeht, die entsprechende MAC und IP Adresse im Paket ist und auch auf diesem Interface die Antwort logischerweise zurückkommt?!!
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
bluestar
Beiträge: 2419
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Beitrag von bluestar » 17.05.2005 18:54:07

Ähm da beide Netzwerkkarten im gleichen Netz liegen, kann der Rechner jedes Interface beliebig nutzen um eine Verbindung mit anderen Rechnern im gleichen Netz eine Verbindung aufbauen.

Aber ich geb dir schon Recht so ganz 100% genau ist das nicht, wäre auch zu kompliziert gewesen das im Detail zu erklären. Was deine Anmerkung angeht, aber innerhalb von Ethernet-Paketen gibt es nur die MAC-Adresse als Empfänger-/Absenderkennung, die Zuordnung MAC <-> IP erfolgt am IP Protokoll vorbei mit Hilfe von ARP bzw. RARP.

Aber ich glaub es macht keinen Sinn sich über die genaue Funktionsweise eines IP-Stacks zu diskutieren, oder?

Gruß
Jens

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 18.05.2005 08:20:44

sicher nicht.. zumindest nicht, bevor wir die Socket Funktionen genau erklärt haben :D

aber trotzdem nochmal (interessiert mich ja auch :twisted: ):

Code: Alles auswählen

Kernel IP Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0
das ist ja der erste Eintrag der Routingtabelle.. und daher wird er eth0 verwenden und somit die MAC Adresse von dieser verwenden und dadurch auch dessen IP..

der Rechner der Antworten soll, antwortet also auch auf diese IP und diese MAC..

nichtsdestotrotz bringt es einen Rechner manchmal durcheinander wenn man mit zwei Netzwerkkarten im gleichen Netz ist. (aber funktionieren tuts bei mir trotzdem)..

also komisch ist es schon.. ich hätt am liebsten ein ethereal mitschnitt gehabt
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
bluestar
Beiträge: 2419
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Beitrag von bluestar » 18.05.2005 11:57:41

Okay provozieren wir den Fehler mal:

Zwei Netzwerkkarten:
eth0 über DHCP
eth1 über statische Einstellungen

Wenn sich dann folgendes Bild (von der Routingtabelle her zeigt)

Code: Alles auswählen

Kernel IP Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     0      0        0 eth1
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0
default         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
So nun werden ausgehende Connections mit der IP von eth0 gebildet, laut
Routingtabelle gehen alle I-Net Anfragen an den Default gw über eth1 raus.

Logischerweise kommt die Antwort an eth0 an, aber eth0 ist nicht zuständig, weil die IP-Adresse nicht stimmt.

Benutzeravatar
DynaBlaster
Beiträge: 958
Registriert: 25.03.2004 18:18:57
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: DF0://dynablaster.adf

Beitrag von DynaBlaster » 18.05.2005 12:08:05

@bluestar

Nachvollziehbar. Gibt es denn eine Möglichkeit, die Routingtabelle zu manipulieren, damit der 2. Eintrag an erster Stelle steht und umgekehrt? In dem Fall, wäre das Problem nämlich beseitigt. Obwohl eth1 dann vom Kernel gar nicht mehr "benutzt" werden würde - also könnte man die Karte auch gleich in ein anderes Subnetz einbinden ...

Benutzeravatar
Savar
Beiträge: 7174
Registriert: 30.07.2004 09:28:58
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Berlin

Beitrag von Savar » 18.05.2005 12:22:18

bluestar hat geschrieben:Okay provozieren wir den Fehler mal:

Zwei Netzwerkkarten:
eth0 über DHCP
eth1 über statische Einstellungen

Wenn sich dann folgendes Bild (von der Routingtabelle her zeigt)

Code: Alles auswählen

Kernel IP Routentabelle
Ziel            Router          Genmask         Flags Metric Ref    Use Iface
192.168.0.0     *               255.255.255.0   U     0      0        0 eth1
192.168.0.0     *               255.255.255.0   U     0      0        0 eth0
default         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
So nun werden ausgehende Connections mit der IP von eth0 gebildet, laut
Routingtabelle gehen alle I-Net Anfragen an den Default gw über eth1 raus.

Logischerweise kommt die Antwort an eth0 an, aber eth0 ist nicht zuständig, weil die IP-Adresse nicht stimmt.
äh Default GW => eth0

Außerdem stellt sich die Frage wie die Socket Programmierung es nun wirklich macht.. weil wenn ich mir eine IP Adresse nehme, dann dürfte der Kernel es auch nur über die Schnittstelle rausschicken, die diese IP hat.

Ich muss zugeben, dass ich keine eindeutige Antwort weiß, aber einfach zu sagen er nimmt sich die IP X.X.X.X und schickt es aber über das Interface Y was aber die IP Adresse X.X.X.Z hat raus, find ich zu leicht und auch nicht logisch. Wo steht das?
MODVOICE/MYVOICE
Debianforum Verhaltensregeln
Log Dateien? -> NoPaste

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 18.05.2005 14:36:50

@bluestar
In deinem Fall hast du zu Hause das Netz 192.168.0.0 / 255.255.255.0 d.h. zu deinem Netz gehören alle Rechner von 192.168.0.1 bis 192.168.0.254,
das ist falsch - richtig:192.168.0.0 to 192.168.0.255
die Adresse 192.168.0.255 ist die Broadcast-Adresse
sie kann vielmehr dazu benutzt werden - wie auch jede andere IPv4 Adresse im 192.168.0.0/24 range
Das Problem sieht etwa so aus, du startest Firefox der schickt über eth1 eine Anfrage an den Router, das er gerne ins Internet will, dein Router antwortet auch brav, aber die Antwort kommt bei eth0 an und da die Netzwerkkarte keine Verbindung in die Welt aufbauen wollte
?? - du vermischt da viele sachen - eine IP ist eindeutig einem Interface zugeordnet - verlässt ein IP packet ein interface wird auch wieder GENAU auf diesem eine response erfolgen (annahme das paket wird nirgends gedroppt usw.) - was soll das heißen "ein router antwortet"? - ein router routet! - ein browser schickt keine anfrage! zumindest nicht an einen router - wenn dann ein IP packet mit gesetztem SYN flag an die IP adresse wo eine website liegt ...
aber innerhalb von Ethernet-Paketen gibt es nur die MAC-Adresse als Empfänger-/Absenderkennung,
äh - dass würde bedeuten, dass es KEIN Kommunikationsnetz geben könnte das auf ethernet aufsetzt und auf höheren Layern routing informationen nutz - so ist es aber nicht!!
die Zuordnung MAC <-> IP erfolgt am IP Protokoll vorbei mit Hilfe von ARP bzw. RARP.
das stimmt



@ savar
die entsprechende MAC und IP Adresse im Paket ist und auch auf diesem Interface die Antwort logischerweise zurückkommt?!!
du hast eher verstanden was passiert - wir sind auf OSI layer drei - die ip adressen sind signifikant - MAC ist zwar im Frame drinnen schaut sich aber kein teilnehmer auf Layer 3 an
das ist ja der erste Eintrag der Routingtabelle.. und daher wird er eth0 verwenden und somit die MAC Adresse von dieser verwenden und dadurch auch dessen IP..

der Rechner der Antworten soll, antwortet also auch auf diese IP und diese MAC..
immer IP - siehe oben - MAC adressen sind nur deshalb notwendig damit eine eindeutige zuordnung einer IP zu einem interface stattfinden kann - IP addressen können umziehen - (gut es gibt für die paranoia gys auch möglichkeiten die MAC von NIC´s zu ändern aber das lassen wir nun außen vor)
Außerdem stellt sich die Frage wie die Socket Programmierung es nun wirklich macht.. weil wenn ich mir eine IP Adresse nehme, dann dürfte der Kernel es auch nur über die Schnittstelle rausschicken, die diese IP hat.
interessant könnte sein

Code: Alles auswählen

man tc
oder

Code: Alles auswählen

man ip

@ dynablaster
Gibt es denn eine Möglichkeit, die Routingtabelle zu manipulieren, damit der 2. Eintrag an erster Stelle steht und umgekehrt?
die reihenfolge in der routen eingetragen werden ist signifikant

markus

Benutzeravatar
bluestar
Beiträge: 2419
Registriert: 26.10.2004 11:16:34
Wohnort: Rhein-Main-Gebiet

Beitrag von bluestar » 18.05.2005 15:56:56

richtig:192.168.0.0 to 192.168.0.255
Also da stimm ich aber eindeutig dagegen, wir reden ja über ein /24 Netz und per Definition ist die erste Adresse die Netzwerkadresse und die letzte Adresse ist immer die Broadcastadresse, zumindest ist es standardmäßig so!
?? - du vermischt da viele sachen - eine IP ist eindeutig einem Interface zugeordnet - verlässt ein IP packet ein interface wird auch wieder GENAU auf diesem eine response erfolgen (annahme das paket wird nirgends gedroppt usw.) - was soll das heißen "ein router antwortet"? - ein router routet! -
Erwartest du detailierte Abhandlung über das gesamte OSI Modell,es geht im wesentlichen um die Klärung warum es problematisch ist zwei Netzwerkkarten mit dem gleichen Netz zu verbinden. Natürlich ist eine IP einem Interface zugeordnet, aber es bedeutet noch lange nicht das aller Traffic über das Interface abläuft. Dazu gibt es aber ganz nette Hinweise im Advanced Routing Howto und da findest du auch genau erklärt, wie man genau erreicht was du hier beschreibst.

Code: Alles auswählen

#!/bin/sh
#
# 2 Routingtabellen anlegen, jeweils eine für eth0 und eine für eth1
#
ip route add default dev eth0 table 1
ip route add default dev eth1 table 2
#
# Traffic anhand der ausgehenden IP in die Routingtabellen werfen
#
ip rule add from 192.168.0.1 prio 32765 lookup 1
ip rule add from 192.168.0.2 prio 32765 lookup 2

Ansonsten bleibt ein Interface arbeitslos.

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 18.05.2005 16:34:14

bluestar hat geschrieben: richtig:192.168.0.0 to 192.168.0.255

Also da stimm ich aber eindeutig dagegen, wir reden ja über ein /24 Netz und per Definition ist die erste Adresse die Netzwerkadresse und die letzte Adresse ist immer die Broadcastadresse, zumindest ist es standardmäßig so!
absolut genau so ist es - per standart so festgelegt - die tech. umsetzung auf die darunter liegende OSI schicht implementiert das - MUSS aber nicht so sein :idea: - ich denke wir haben aneinander vorbei geredet
wir reden ja über ein /24 Netz
ist egal - auch bei classless netzen ist der "standart" so
geht im wesentlichen um die Klärung warum es problematisch ist zwei Netzwerkkarten mit dem gleichen Netz zu verbinden. Natürlich ist eine IP einem Interface zugeordnet, aber es bedeutet noch lange nicht das aller Traffic über das Interface abläuft.
da redet ihr ja schon eine weile aneinander vorbei - die NIC von der ein request gestartet wird sieht von dem ganzen routing zeug nichts - muss sie auch nicht - NIC´s in einem router routen entweder in oder durch ein netz (siehe dynamische routing protokolle alle BGP und AS´s)- d.h. zu einem anderen router bzw. zu der NIC im eigenen AS/netz wenn sie diese kennen bzw. für dieses netz zuständig sind

markus

Antworten