Re: Source Routing / ipfw

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Wed, 24 Nov 2004 23:31:41 +0100 (CET)

Richard Hirner <richard(at)hirner.at> wrote:
> Konfiguration FreeBSD 5.3:
> xl0: inet 212.186.57.126 netmask 0xffffff00 broadcast 212.186.57.255
> ed0: inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255
> inet 83.64.231.2 netmask 0xffffff00 broadcast 83.64.231.255
>
> 212.186.57.0/24 ist mein ISP #1 (Chello), 83.64.231.0/24 mein ISP #2
> (Inode). Die Gateways sind 212.186.57.1 bzw. 83.64.231.1. Der
> Standardgateway soll 212.186.57.1 sein und ist es auch. Internet von
> Chello wird über natd ins LAN gebracht. So weit, so gut. Jetzt das
> Problem: ich will alles, was über 83.64.231.2 kommt und v.a. von dort
> weggeht, auch über den Inode-GW routen (sonst funktionierts nicht).
>
> Also:
> -------------------
> #ipfw add 1000 fwd 83.64.231.1 all from 83.64.231.2 to any
> #ipfw list
> 00050 1706 206744 divert 8668 ip from any to any via xl0
> 00100 8 576 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
> 01000 0 0 fwd 83.64.231.1 ip from 83.64.231.2 to any
> 65000 6442 741873 allow ip from any to any
> 65535 3 252 deny ip from any to any[code]
> -------------------
>
> Hat also funktioniert. Das Problem dabei ist nur: es tut nichts. Wenn
> ich 83.64.231.2 von außen anpinge, kommt die Antwort von 212.186.57.126,
> TCP geht gar nicht. ipfw list zeigt auch immer 0 als Paketzähler an. Warum?

Weil so IP-Routing funktioniert.

Ob Du 83.64.231.2 oder 212.186.57.126 von außen anpingst,
ist völlig egal. Der Kernel such sich in seinem Routing-
Table das Interface mit der passenden Route zu der Adresse
heraus, wo er seine Ping-Antwort hinschicken soll (also
eine beliebige externe IP), und das ist in diesem Fall die
Default-Route (212.186.57.1). Die Ping-Antwort wird natür-
lich über das zugehörige Interface herausgeschickt (xl0),
und als Absender-IP wird die IP dieses Interfaces genommen
(212.186.57.126). Geht ja nicht anders. Deine fwd-Regel
spricht nie an, weil nie ein Paket mit der Source-Adresse
83.64.231.2 erzeugt wird.

Theoretisch gibt es mehrere Lösungen:

1. Du könntest bestimmte externe Adreßbereiche dem ed0-
   Interface zuordnen und dafür statische Routen eintra-
   gen. Aber das ist in den meisten Fällen keine zu-
   friedenstellende Lösung, da für einige Bereiche dann
   halt nur die eine IP geht, für für einige nur die
   andere.

2. Du kannst bestimmte Dienste (Daemonen) auf die Inode-
   IP binden lassen (durch Konfiguration oder durch Ein-
   sperren in ein jail). Dann gehen sie zwangsläufig mit
   der von Dir festgelegten Source-IP raus. Du würdest
   auf diese Weise also anhand des Dienstes festlegen,
   welche IP verwendet wird. Du kannst z.B. einen sshd
   auf 83.64.231.2:22 und einen auf 212.186.57.126:22
   starten. Für Ping funktioniert dies natürlich nicht.

3. Du kannst die Source-IP für bestimmte Pakete rewriten
   (NAT).

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co KG, Oettingenstr. 2, 80538 München
Any opinions expressed in this message may be personal to the author
and may not necessarily reflect the opinions of secnetix in any way.
With Perl you can manipulate text, interact with programs, talk over
networks, drive Web pages, perform arbitrary precision arithmetic,
and write programs that look like Snoopy swearing.
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Wed 24 Nov 2004 - 23:32:09 CET

search this site