Linux routing profis?

Post Reply
Message
Author
slayer

Linux routing profis?

#1 Post by slayer »

hi
ich hab ein kabelmodem, bei dem ich bis zu 4 ip's kriege, also hab ich mal 2 netzwerkkarten in einen rechner gequetscht und mir per dhcp 2 geholt.
nun hab ich die ip's 217.162.232.222/255.255.248.0 und 217.162.237.150/255.255.248.0.
beide haben den gleichen gateway 217.162.232.1. ich kann aber von ausserhalb nur eine von beiden erreichen!
der routing table sieht etwa so aus:

Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
217.162.232.0 0.0.0.0 255.255.248.0 U 0 0 0 eth1
217.162.232.0 0.0.0.0 255.255.248.0 U 0 0 0 eth0
0.0.0.0 217.162.232.1 0.0.0.0 UG 0 0 0 eth0
0.0.0.0 217.162.232.1 0.0.0.0 UG 0 0 0 eth1

je nach dem welche default route für ein interface zuerst kommt, ist dieses erreichbar. in diesem fall eth0 mit der ip 217.162.232.222.
es funktioniert nicht mal, wenn ich host-routen eintrage:

Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
80.218.93.246 217.162.232.1 255.255.255.255 UGH 0 0 0 eth1
217.162.232.0 0.0.0.0 255.255.248.0 U 0 0 0 eth0
217.162.232.0 0.0.0.0 255.255.248.0 U 0 0 0 eth1
0.0.0.0 217.162.232.1 0.0.0.0 UG 0 0 0 eth0

In diesem fall, kann ich zwar mit meiner ip(80.218.93.246) eth1(217.162.237.150) erreichen, und alle anderen eth0(217.162.232.222). das ist auch dass, was ich eigentlich will, jedoch kommt ich jetzt NICHT mehr auf eth0!
es muss doch irgendwie möglich sein, beide ip's zu ereichen?!

grüsse

ratte

Re: Linux routing profis?

#2 Post by ratte »

Hi

das ist kein Routingproblem, sondern ein Maschienenproblem, denn es ist nicht die Netzwerkkarte, die antwortet, sondern der Kernel der Maschiene.

<b>Vergebe niemals-niemals-niemals einer Maschiene mehr als einer Karte eine IP aus dem gleichen Subnetz.</b>
Wie du schon selbst richtig beobachtet hast, ist es so, dass "je nach dem welche default route für ein interface zuerst kommt, ist dieses erreichbar."

Das liegt an der Kernelroutingtabelle, hier zum bessern Bezug nummeriert:
1: 217.162.232.0 0.0.0.0 255.255.248.0 U 0 0 0 eth1
2: 217.162.232.0 0.0.0.0 255.255.248.0 U 0 0 0 eth0
3: 0.0.0.0 217.162.232.1 0.0.0.0 UG 0 0 0 eth0
4: 0.0.0.0 217.162.232.1 0.0.0.0 UG 0 0 0 eth1

Aufgrund der Interfaces, ohne die man keine default gw Route 3 4 setzen kann, sind diese Netzrouten 1 und 2 in der Kernelroutingtabelle an erster Stelle. Ganz logischerweise muss der Kernel zuerst die bekannten Netze bedienen, und wenn keine Netzroute passt, wird die default gw Route <i>(wovon es pro logischer Maschine nur eine geben darf, bzw. nur die erste benutzt wird)</i> fuer nicht passende Packete verwendet.
Aufgrund der Netzmaske der Interfaces 1 und 2 werden nur die letzten 11 Bits eines eingehenden Packetes betrachtet. Da sich beide Interfaces im gleichen Netz befinden, trifft bereits Regel 1 richtig zu, auch wenn du die eth0 treffen willst und die Regel 2 scheinbar dafuer sorgt.


Da du die IP-Adressen per DHCP beziehst, wirst du dich mit der Situation, dass du immer nur IPs aus dem gleichen Subnetz bekommst, abfinden. Dir bleibt nur die Moeglichkeit, weitere Maschienen mit den DHCP-Adressen zu bedienen.

ratte

slayer

Re: Linux routing profis?

#3 Post by slayer »

hi ratte
überdenk doch deine theorie nochmals, klingt zwar ganz toll, stimmt aber nicht.
der fehler lag nämlich ganz einfach daran, dass mein firewall-script ein "echo 1 > /proc/sys/net/ipv4/conf/all/rp_filter" beinhaltete, was zur folge hatte, dass bestimmte pakete geblockt wurden. den grund dafür kannst du jetzt nachlesen:

CONFIG_IP_ADVANCED_ROUTER
If you intend to run your Linux box mostly as a router
...
...
...
If you turn on IP forwarding, you will also get the rp_filter, which
automatically rejects incoming packets if the routing table entry
for their source address doesn't match the network interface they're
arriving on. This has security advantages because it prevents the
so-called IP spoofing, however it can pose problems if you use
asymmetric routing (packets from you to a host take a different path
than packets from that host to you) or if you operate a non-routing
host which has several IP addresses on different interfaces. To turn
rp_filter off use:

echo 0 > /proc/sys/net/ipv4/conf/<device>/rp_filter
or
echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter



gruss slayer

Post Reply