[fli4l] PF_PREROUTING-Regeln für geroutete IPs auf dem DSL-Anschluss

kay kay at martinen.de
Mi Okt 12 02:50:07 CEST 2016


Am 12.10.2016 um 00:07 schrob Alexander Bahlo:
> Hallo kay, hallo Christoph,
> 
> Am Tue, 11 Oct 2016 02:41:07 +0200 schrub kay <kay at martinen.de>:
> 
>> Am 11.10.2016 um 00:44 schrob Alexander Bahlo:
>>> Der Vollständigkeit halber noch meine Frage, ob beabsichtigt ist, dass
>>> die mit HOST_x_ALIAS_y-vergebenen Alias-Bezeichner nicht in den Routing-
>>> Regeln verwendet werden können. Immerhin funktionieren sie bei der
>>> Namensauflösung.  
>>
>> IMHO löst der paketfilter selbst keine adressen auf. Darum kannst er
>> weder mit alias noch mit domainnamen etwas anfangen.
> 
> Habe ich nicht verstanden. Welche Domainnamen? Wahrscheinlich reden wir
> aneinander vorbei, deshalb ein konkretes Beispiel:

War nur ein beispiel. Ein Domainname ist aus sicht des dns auch nicht
viel anders als ein Hostname, eine IP-Adresse oder ein
CNAME(Alias)-Eintrag. Nur das der CNAME immer nur auf den eigentlichen
Host zeigt -selbst aber keine IP-Adresse hat - und m.W. auch nicht haben
kann und nicht soll.

Wenn du z.B. einen host 'foo.example.com' hast mit der IP 1.2.3.4. und
dazu einen CNAME 'bar.example.com' einträgst der prinzipiell nur auf
'foo' zeigt, und du willst jetzt die IP bekommen wenn du 'bar' eingibst
- dann muss im ersten schritt der dns-server zu 'bar' befragt werden und
gibt dir 'foo' zurück. Dann musst du mit 'foo' noch mal fragen und
bekommst dann erst die 1.2.3.4. geliefert.

Ähnlich "kann" es hier sein wenn du HOST-Eintrage nutzt und es geht, mit
ALIAS-einträgen aber nicht.

> 
> # dns_dhcp.txt
> HOST_x_NAME='nautilus'
> HOST_x_ALIAS_1='www'
> 
> # base.txt
> PF_PREROUTING_2='tmpl:http    dynamic DNAT:@hostname LOG:http'
> 
> => Funktioniert. Ist auch so dokumentiert.

Wenn du irgendwo auch 'hostname' als HOST_x_NAME konfiguriert hast? Oder
auch unter ALIAS?

Oder meintest du oben statt @hostname doch @nautilus?

> 
> # base.txt
> PF_PREROUTING_2='tmpl:http    dynamic DNAT:@www LOG:http'
> 
> => Funktioniert nicht. Ich kann keinen Grund erkennen, warum das nicht
> funktionieren sollte. Da muss keine DNS-Anfrage mehr ausgeführt werden,

Ich weiß jetzt nicht wie fli die Aliasnamen intern umsetzt. Aber denkbar
wäre das sie in seinem dns-server auch als Aliase gesetzt werden. Das
wäre dann ein CNAME Record und der unterscheidet sich schon von einem
hostnamen oder einem A record.

@www scheint mir auch problematisch von der benennung her. Das kann zwar
auch einfach nur ein hostname sein, aber z.B. viele Browser setzen das
automatisch vor einen namen wenn sie ihn sonst nicht finden können.
Und damit mag es noch mehr fallstricke geben. Da es ein interner Alias
ist kannst du es ja mal mit einem anderen namen testen.

> als im Fall davor. Ich gehe vielmehr davon aus, dass zur
> Erstellungszeit des Images die @namen durch die IP-Adresse ersetzt
> werden. Das ist doch in beiden Fällen gleich gut möglich!

Ich hab mich nie damit auseinander gesetzt wie das umgesetzt wird aber
möglicherweise wie o.g. und dann kann es sein das die aliase eben so
nicht funktionieren.

> Die Verwendung des Alias halte ich deshalb für praktisch, wenn ich
> nämlich www von hostname1 auf hostname2 verlegen möchte, brauche ich nur
> den Alias-Eintrag zu verschieben. Anderenfalls müsste ich ja sämtliche
> Regeln suchen und ersetzen, die auf hostname1 lauten.

Schon richtig das es praktisch wäre. Aber ob es praktisch nutzbar ist
musst du jemanden vom FLI Team fragen. Ich kann nur raten - basierend
auf meinen Erfahrungen.

>> Die Gründe sind wohl recht simpel. Wenn das ginge, dann müsste m.E. pro
>> Zutreffender Regel erst eine dns-anfrage ausgeführt werden, egal ob nun
>> gegen eine hosts-datei oder einen dns-server/proxy. Sonst könnte sich
>> die IP zu dem namen geändert haben und dann die Regel auf das falsche
>> Ziel schiessen. Außerdem dauern dns-anfragen sicher deutlich länger als
>> die durchlaufzeit eines pakets durch die filterregeln.
> 
> Ich kann Deinen Ausführungen überhaupt nicht folgen.

Vielleicht half das o.g. ja schon weiter.

Zu dem was Christoph ansprach scheint es nun so zu sein das FLI
hostnamen intern mit IP-Adressen verknüpft und diese Tabelle für den
Paketfilter vorhält so das dort keine dns-abfragen nötig sind. ABER, das
scheint nur DANN zu funktionieren wenn der hostname vom fli schon mal
angefragt wurde.

Beispiel1: Ein PC im Lan fragt deinen fli nach 'nautilus'. FLI merkt
sich die antwort und der paketfilter reagiert auch auf ein @nautilus
richtig.

Beispiel2: KEIN PC im Lan hat den o.g. hostnamen nachgefragt, oder er
benutzte direkt die IP Adresse. Hier hat FLI sich nichts merken können
und darum funktioniert die paketfilter-regel mit @nautilus nicht.

OB und wie das auch auf Aliase zutrifft ist dem genannten nicht zu
entnehmen. Denkbar wäre es.

Mache einen Test. Richte das obige so ein wie du es wolltest, mit
@hostname und @aliasname und teste ob deine paketfilter-regel mit @www
nicht funktioniert. Dann mache von einem internen PC ein 'host www' oder
ein 'ping www'. Dann teste nochmal ob deine paketfilter regel jetzt
funktioniert.

Wenn es dann geht -> Solved.
Wenn es dann nicht geht: Hast du was falsch gemacht oder: es geht nicht!

Kay


Mehr Informationen über die Mailingliste Fli4L