Discussion:
Alle DNS-Anfragen intern transparent umleiten?
(zu alt für eine Antwort)
K. Dreier
2019-02-09 20:06:43 UTC
Permalink
Hallo,

wenn ich das richtig sehe, dann könnte man mittels dem Paket proxy via
OPT_TRANSPROXY eine transparente Umleitung von Anfragen vornehmen.
Was ich aber nicht ganz verstehe ist, was ich tun muß, wenn ich
DNS-Anfragen an einem im gleichen Netz befindlichen Rechner (DNS-Server)
umleiten will. Denn eine Schleife muß ja vermieden werden. WÀre es
also nicht besser, das einfach via einer Firewall-Regel vorzunehmen, in
der hinsichtlich der Umleitung der DNS-Server ausgenommen ist? Wie
wÃŒrde ich so was schreiben?

Konkret habe ich verschiedene Netze, die via fli4l geroutet werden,
insofern allesamt von dieser Umleitung erfasst sein sollen.

Idee dahinter ist, daß ich fÃŒr GerÀte, die einen fixen
DNS-Server-Eintrag haben (z.B. gewisse IoT-GerÀte) deren Anfragen in
jedem Fall doch ÃŒber meinen internen DNS-Server leite, der diese dann
upstream schickt.

Danke fÃŒr euer Input!

Gruß
Klaus
Kay Martinen
2019-02-09 20:37:47 UTC
Permalink
Post by K. Dreier
Hallo,
wenn ich das richtig sehe, dann könnte man mittels dem Paket proxy via
OPT_TRANSPROXY eine transparente Umleitung von Anfragen vornehmen.
Für webtraffic, denke ich doch wohl. Also http und ggf. https (was nicht
unproblematisch ist).
Post by K. Dreier
Was ich aber nicht ganz verstehe ist, was ich tun muß, wenn ich
DNS-Anfragen an einem im gleichen Netz befindlichen Rechner (DNS-Server)
umleiten will. Denn eine Schleife muß ja vermieden werden. Wäre es
also nicht besser, das einfach via einer Firewall-Regel vorzunehmen, in
der hinsichtlich der Umleitung der DNS-Server ausgenommen ist? Wie
würde ich so was schreiben?
Überhaupt nicht. Wenn du einen Internen DNS hast dann kannst du im FLI
anfragen zu dieser Domain an den Server umleiten lassen. Dann fragt der
FLI zu dieser domain deinen Internen DNS ab. Das ist eine der REDIRECT
Optionen bei den DNS Einstellungen.

Das ein webProxy DNS umleiten würde wäre mir neu. Oder sprichst du von
diesem neuen DNS via http?
Post by K. Dreier
Konkret habe ich verschiedene Netze, die via fli4l geroutet werden,
insofern allesamt von dieser Umleitung erfasst sein sollen.
Idee dahinter ist, daß ich für Geräte, die einen fixen
DNS-Server-Eintrag haben (z.B. gewisse IoT-Geräte) deren Anfragen in
jedem Fall doch über meinen internen DNS-Server leite, der diese dann
upstream schickt.
Dann gebe den Geräten nur den internen Server an und gut. Der kann dann
ggf. auch ausfiltern und fragt für alles andere beim fli nach. Der das
an die bei einwahl gegebenen dns des providers weiter reicht.

Dann brauchst du auch keine Umleitung auf dem FLI. Die wirkt dort ja nur
für Geräte die zuerst den FLI nach einem internen namen fragen.


Kay
--
Sent via SN (Eisfair-1)
K. Dreier
2019-02-10 08:15:20 UTC
Permalink
Hallo,
Post by Kay Martinen
Wenn du einen Internen DNS hast dann kannst du im FLI
anfragen zu dieser Domain an den Server umleiten lassen. Dann fragt der
FLI zu dieser domain deinen Internen DNS ab. Das ist eine der
REDIRECT
Optionen bei den DNS Einstellungen.
Und ist eingerichtet.
Post by Kay Martinen
Das ein webProxy DNS umleiten wÌrde wÀre mir neu.
Es ist kein Web-Proxy, sondern ein transparenter Proxy, der Teil vom
Paket "proxy" ist.
Post by Kay Martinen
Dann gebe den GerÀten nur den internen Server an und gut.
Es gibt GerÀte, insb. im IoT-Bereich, die haben einen fest gesetzten
DNS-Server. Denen ist der propagierte DNS-Server des lokalen Routers
egal. Und genau darum geht es: unabhÀngig vom (von wem und wie und wo
und warum) gesetzten DNS-Server diese Port 53-/DNS-Anfrage der lokalen
GerÀte transparent (Deswegen ja auch OPT_TRANSPROXY) auf einen
bestimmten lokalen Rechner umzubiegen.
Beispiel:
fli4l als Router = Gateway hat die 192.168.1.1. Seine Konfig sagt, daß
alle DNS-Anfrage im Netzt an 192.168.1.50 gehen sollen.
Jetzt gibt es aber den client 192.168.1.70, der fÃŒr DNS fix 8.8.8.8
gesetzt hat - den interessiert die Aufforderung des Routers/Gateways,
alle DNS-Anfragen an 192.168.1.50 zu schicken, nicht. Jedenfalls nicht
solange er 8.8.8.8 erreichen kann.
Also braucht es eine Firewall-Regel, die diese Anfragen abfÀngt und auf
191.168.1.50 umbiegt. Das kann OPT-TRANSPROXY.

Problem: der DNS-Server (= .50) ist im gleichen Netzt wie .70. Sagen wir
es ist NET_2. Wenn ich in der Firewall sage, daß alles aus NET_2 fÃŒr
Port 53 auf .50 umgebogen werden soll, dann beinhaltet das eben auch den
DNS-Server selbst. Das gibt doch eine Schleife. Und genau davor warnt
auch die Doku zu transproxy.
Also gibt es zumindest fÌr iptables die Möglichkeit, eine Regel zu
setzten, in der diese Umbiege-Regel einen bestimmten client ausnimmt.
Ein Beispiel ist:

------
iptables -t nat -A PREROUTING -p tcp ! -i "ppp0" -m iprange !
--src-range "10.0.0.1"-"10.0.0.4" ! --dst-range "10.0.0.2"-"10.0.0.3"
--dport 53 -j DNAT --to-destination "10.0.0.2"
iptables -t nat -A PREROUTING -p udp ! -i "ppp0" -m iprange !
--src-range "10.0.0.1"-"10.0.0.4" ! --dst-range "10.0.0.2"-"10.0.0.3"
--dport 53 -j DNAT --to-destination "10.0.0.2"
------

Mit der ErklÀrung:

! -i "ppp0" excludes my routers WAN interface (which prevents me from
becoming an open resolver)
-m iprange ! --src-range "10.0.0.1"-"10.0.0.4" excludes a range of IP
addresses from having their DNS queries redirected (e.g: Router, two
Pi-hole resolvers and a fourth)
! --dst-range "10.0.0.2"-"10.0.0.3" ensures that any DNS query not
matching these IP's are forwarded to --dport 53 --to-destination
"10.0.0.2"
iptables -t nat -A POSTROUTING -j MASQUERADE ensures that this
redirection is done seamlessly

Ich interpretiere das hier so, daß bei ihm 10.0.0.2 der DNS-Server ist
und z.B. 10.0.0.1 sein Router.

Ich möchte nun diese Regel/Logik in der fli4l-Syntax umsetzen, weiß
aber nicht, wie ich das machen muß... Hinzu kommt, daß ich kein
dial-up habe, sondern fli4l als Ethernet-Router an einem Kabelmodem
betreibe.

Gruß
Klaus
Carsten Spieß
2019-02-10 10:48:07 UTC
Permalink
Hallo Klaus,
Post by K. Dreier
Problem: der DNS-Server (= .50) ist im gleichen Netzt wie .70. Sagen
wir es ist NET_2. Wenn ich in der Firewall sage, daß alles aus NET_2
für Port 53 auf .50 umgebogen werden soll, dann beinhaltet das eben
auch den DNS-Server selbst. Das gibt doch eine Schleife. Und genau
davor warnt auch die Doku zu transproxy.
was du brauchst ist z.B. folgendes:

# der DNS server der IMMER erreicht werden soll
HOST[] {
NAME='dns'
IP4='10.0.1.50'
}

PF_PREROUTING[]='tmpl:dns @dns ACCEPT'
PF_PREROUTING[]='tmpl:dns DNAT:@dns'

Wenn der fli4l auch DNS server ist, dann genügt:
PF_PREROUTING[]='tmpl:dns REDIRECT:53'

Gruß

Carsten
K. Dreier
2019-02-16 10:23:56 UTC
Permalink
Hallo,
1) Wie könnte ich hier denn einen bestimmten client von dieser
Umleitung ausnehmen? MÃŒsste ich einfach noch vor die letzte Regel ein
'tmpl:dns @clientX ACCEPT' setzen?

2) Die obigen Regeln sorgen nicht dafÃŒr, daß mein Port 53 nach aussen
geöffnet wird, da dort kein "dynamic" enthalten ist, richig? Ein
Port-Scan hat jedenfalls Port 53 nicht als offen gezeigt.

3) Eine Postrouting-Regel wie in der Doku angegeben brauche ich hier
nicht, da der @dns ein client ist (= der Service nicht auf dem fli4l
lÀuft) und damit dessen Pakete durch die/meine allgmeine Regel
PF_POSTROUTING[]='if:any:IP_NET_1_DEV MASQUERADE' # masquerade traffic
leaving the WAN-NIC
maskiert wird, richtig?

Danke und Gruß
Klaus

Loading...