Re: Source Routing / ipfw

From: Richard Hirner <richard(at)hirner.at>
Date: Fri, 26 Nov 2004 16:14:59 +0100

Am Donnerstag, den 25.11.2004, 14:44 +0100 schrieb Oliver Fromme:

> > Aha. Das ist eine Erklärung. Ich dachte, dass bei TCP und eigentlich
> > auch bei ICMP die Zieladresse des 1. Pakets die Quelladresse des 2. sein
> > sollte und der TCP/IP-Stack das auch so sieht.
>
> Nein, das ist beides unabhängig voneinander. Meim Konstru-
> ieren einer passenden Route interessiert sich der Kernel
> nicht dafür, was für andere Pakete vorher auf welchem In-
> terface und für welche Adresse angekommen sind (es ist so-
> zusagen stateless). Der IP-Routing-Code arbeitet auf un-
> terstem Level und weiß auch nichts von TCP-Connections o.ä.
Ja, aber bei meinem Verständnisproblem geht es eigentlich darum, was der
TCP-Stack dem IP-Stack bei einem zu sendenden Paket übergibt. Die
TCP-Verbindung hat ja zwei Endstellen, und jetzt wäre es logisch, wenn
der TCP-Code das TCP-Paket an den IP-Code weitergeben würde, mit der
Info, woher das Paket kommt und wo es hingeroutet werden soll. Der
IP-Code könnte diese Daten dann in den IP-Header einsetzen und das Paket
weiterrouten.

> Darüber könnte man streiten. Man kann genausogut argumen-
> tieren, daß sich der Kernel gefälligst an die Routing-Ta-
> belle zu halten hat. In den allermeisten Fällen ist das
> schließlich das korrekte und erwünschte Verhalten. Und
Das stimmt allerdings, tragisch wäre es, würde sich der Kernel nicht an
die Tabelle halten.

> vor allen Dingen ist es auf diese Weise erheblich einfa-
> cher, ein deterministisches und vorhersagbares Verhalten
> zu haben. Wenn der Kernel bei jedem rausgehenden Paket
> erstmal erraten müßte, zu welcher Verbindung es wohl ge-
> hören könnte, bzw. welche Pakete, die irgendwann vorher
> empfangen wurden, das Herausschicken dieses Pakets ver-
> ursacht haben mögen und somit das Source-Interface und
> die Source-IP bestimmen, dann wird der ganze Routing-Code
> um ein paar Dimensionen komplexer und unüberschaubarer.
Ja ganz genau. Deshalb dachte ich, dass der TCP-Code dem IP-Code Quell-
und Zieladresse mitgibt, damit IP nicht raten muss. Und wenn der
IP-Code die Quelladresse (bei mir 83.64.231.2) vom TCP-Stack bekommt,
müsste ich eigentlich eine Regel erstellen können, die auf genau diese
Quelladresse zutrifft, oder?

[Dienste an IP binden - Etwas spezielles beachten?]
> Eigentlich nicht. Du brauchst natürlich trotzdem noch die
> fwd-Regel. Schau mal mit »ipfw show« nach, ob dort Pakete
> aufschlagen. Wenn das nicht hilft, guck mal mit tcpdump
> nach, was wohin geht und woher kommt. Möglicherweise ist
Gute Idee, mach ich gleich mal :)

1. SYN kommt über ed0 von 80.108.7.10 an:
-------------------------------
16:08:13.445951 IP (tos 0x0, ttl 53, id 7522, offset 0, flags [DF],
length: 60) 80.108.7.10.62625 > 83.64.231.2.80: S [tcp sum ok]
3268712828:3268712828(0) win 65535 <mss 1460,nop,wscale
1,nop,nop,timestamp 517061288 0>
-------------------------------

2. Antwort-SYN wird von der richtigen IP (83.64.231.2) an die richtige
Adresse (80.108.7.10), aber über xl0 (warum?) geschickt:
-------------------------------
16:08:38.081258 IP (tos 0x0, ttl 64, id 12196, offset 0, flags [DF],
length: 60) 83.64.231.2.80 > 80.108.7.10.64871: S [tcp sum ok]
4279957684:4279957684(0) ack 2317784470 win 65535 <mss 1460,nop,wscale
1,nop,nop,timestamp 8344094 517063751>
-------------------------------

ipfw zeigt aber, jeweils sobald das SYN kommt, eine Erhöhung des Zählers
an:
-------------------------------
#ipfw show
00001 124 7108 fwd 83.64.231.1 ip from 83.64.231.2 to any
00050 268598 161557340 divert 8668 ip from any to any via xl0
00100 106 14860 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
65000 538808 324335225 allow ip from any to any
65535 3 220 deny ip from any to any
-------------------------------

Die Route für 83.64.231.2 ist richtig gesetzt (ed0, nicht xl0!):
-------------------------------
# route get 83.64.231.2
   route to: 83-64-231-2.klausgasse.xdsl-line.inode.at
destination: 83.64.231.0
       mask: 255.255.255.0
  interface: ed0
      flags: <UP,DONE,CLONING>
-------------------------------

> bei Dir an anderer Stelle noch etwas falsch konfiguriert.
> Ich habe selbst schon Source-Routing auf genau diese Weise
> gemacht; das funktioniert.
Wunderbar, danke für die Infos. Jetzt muss ich nur noch herausfinden,
was ich vergessen habe ;)

MfG
Richard Hirner

To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Fri 26 Nov 2004 - 16:14:51 CET

search this site