Add DNS over TLS option inside the Freifunk backbone

Submitted by Christian Dresel on April 3, 2020, 5:29 p.m.

Details

Message ID 20200403172952.6008-1-fff@chrisi01.de
State Superseded
Headers show

Commit Message

Christian Dresel April 3, 2020, 5:29 p.m.
With this option it is possible to make DoT (DNS over TLS) from the layer3
router to the DoT DNS Server.

The DNS traffic from Client to the layer3 router is still uncryptet.

On the layer 3 router, dnsmasq forward the DNS to stubby.
Stubby use DoT to ask a resolver inside or outside the Freifunk backbone

For documentation for the options is here:
https://wiki.freifunk-franken.de/w/Gatewayfirmware_Config/mit_stubby#dns_mit_DoT_.C3.BCber_stubby

Signed-off-by: Christian Dresel <fff@chrisi01.de>
---
 src/packages/fff/fff-dhcp/Makefile                 |  3 +-
 .../fff/fff-dhcp/files/etc/gateway.d/35-dns        | 34 +++++++++++++++++-----
 2 files changed, 29 insertions(+), 8 deletions(-)

Patch hide | download patch | download mbox

diff --git a/src/packages/fff/fff-dhcp/Makefile b/src/packages/fff/fff-dhcp/Makefile
index c481d82..fed1a2b 100644
--- a/src/packages/fff/fff-dhcp/Makefile
+++ b/src/packages/fff/fff-dhcp/Makefile
@@ -12,7 +12,8 @@  define Package/fff-dhcp
 	CATEGORY:=Freifunk
 	TITLE:=Freifunk-Franken dhcp
 	URL:=http://www.freifunk-franken.de
-	DEPENDS:=+dnsmasq
+	DEPENDS:=+dnsmasq \
+	         +stubby
 endef
 
 define Package/fff-dhcp/description
diff --git a/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns b/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns
index ad9f1cd..20503bf 100644
--- a/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns
+++ b/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns
@@ -1,21 +1,41 @@ 
 configure() {
 	## dns
 	uci -q del dhcp.@dnsmasq[0].server
-	if dnsservers=$(uci -q get gateway.@dns[0].server); then
-		for f in $dnsservers; do
-			uci add_list dhcp.@dnsmasq[0].server=$f
-			uci add_list dhcp.@dnsmasq[0].server="/in-addr.arpa/$f"
-			uci add_list dhcp.@dnsmasq[0].server="/ip6.arpa/$f"
-		done
+	if [ $(uci -q get gateway.@dns[0].dnsdot) == 1 ]; then
+		uci add_list dhcp.@dnsmasq[0].server="::1#5453"
+		uci add_list dhcp.@dnsmasq[0].server="127.0.0.1#5453"
+		uci set dhcp.@dnsmasq[0].noresolv="1"
+		while uci -q delete stubby.@resolver[0]; do :; done
+		if dnsservers=$(uci -q get gateway.@dns[0].server); then 
+			for f in $dnsservers; do
+				type="$(echo $f | cut -d "@" -f 1)"
+				uci set stubby.$type="resolver"
+				uci set stubby.$type.address=""$(echo $f | cut -d "@" -f 2)""
+				uci set stubby.$type.tls_auth_name=""$(echo $f | cut -d "@" -f 3)""
+			done
+		else
+			echo "WARNING: No DNS servers set!"
+		fi
+		
 	else
-		echo "WARNING: No DNS servers set!"
+		if dnsservers=$(uci -q get gateway.@dns[0].server); then
+			for f in $dnsservers; do
+				uci add_list dhcp.@dnsmasq[0].server=$f
+				uci add_list dhcp.@dnsmasq[0].server="/in-addr.arpa/$f"
+				uci add_list dhcp.@dnsmasq[0].server="/ip6.arpa/$f"
+			done
+		else
+			echo "WARNING: No DNS servers set!"
+		fi
 	fi
 }
 
 apply() {
 	uci commit dhcp
+	uci commit stubby
 }
 
 revert() {
 	uci revert dhcp
+	uci revert stubby
 }

Comments

Robert Langhammer April 3, 2020, 7:31 p.m.
hallo Christian,

find ich gut, das rein zu nehmen.

Zur Syntax hab ich noch was: s.u.

Am 03.04.20 um 19:29 schrieb Christian Dresel:
> With this option it is possible to make DoT (DNS over TLS) from the layer3
> router to the DoT DNS Server.
>
> The DNS traffic from Client to the layer3 router is still uncryptet.
>
> On the layer 3 router, dnsmasq forward the DNS to stubby.
> Stubby use DoT to ask a resolver inside or outside the Freifunk backbone
>
> For documentation for the options is here:
> https://wiki.freifunk-franken.de/w/Gatewayfirmware_Config/mit_stubby#dns_mit_DoT_.C3.BCber_stubby
>
> Signed-off-by: Christian Dresel <fff@chrisi01.de>
> ---
>  src/packages/fff/fff-dhcp/Makefile                 |  3 +-
>  .../fff/fff-dhcp/files/etc/gateway.d/35-dns        | 34 +++++++++++++++++-----
>  2 files changed, 29 insertions(+), 8 deletions(-)
>
> diff --git a/src/packages/fff/fff-dhcp/Makefile b/src/packages/fff/fff-dhcp/Makefile
> index c481d82..fed1a2b 100644
> --- a/src/packages/fff/fff-dhcp/Makefile
> +++ b/src/packages/fff/fff-dhcp/Makefile
> @@ -12,7 +12,8 @@ define Package/fff-dhcp
>  	CATEGORY:=Freifunk
>  	TITLE:=Freifunk-Franken dhcp
>  	URL:=http://www.freifunk-franken.de
> -	DEPENDS:=+dnsmasq
> +	DEPENDS:=+dnsmasq \
> +	         +stubby
>  endef
>  
>  define Package/fff-dhcp/description
> diff --git a/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns b/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns
> index ad9f1cd..20503bf 100644
> --- a/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns
> +++ b/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns
> @@ -1,21 +1,41 @@
>  configure() {
>  	## dns
>  	uci -q del dhcp.@dnsmasq[0].server
> -	if dnsservers=$(uci -q get gateway.@dns[0].server); then
> -		for f in $dnsservers; do
> -			uci add_list dhcp.@dnsmasq[0].server=$f
> -			uci add_list dhcp.@dnsmasq[0].server="/in-addr.arpa/$f"
> -			uci add_list dhcp.@dnsmasq[0].server="/ip6.arpa/$f"
> -		done
> +	if [ $(uci -q get gateway.@dns[0].dnsdot) == 1 ]; then
hier keine doppelten == ist nicht bash.
> +		uci add_list dhcp.@dnsmasq[0].server="::1#5453"
> +		uci add_list dhcp.@dnsmasq[0].server="127.0.0.1#5453"
> +		uci set dhcp.@dnsmasq[0].noresolv="1"
> +		while uci -q delete stubby.@resolver[0]; do :; done
> +		if dnsservers=$(uci -q get gateway.@dns[0].server); then
Hier braucht es " um die Substitution sonst wordsplitting wenn mehrere
dns und die Var-zuweisung kracht.
>  
> +			for f in $dnsservers; do
> +				type="$(echo $f | cut -d "@" -f 1)"
> +				uci set stubby.$type="resolver"
> +				uci set stubby.$type.address=""$(echo $f | cut -d "@" -f 2)""
> +				uci set stubby.$type.tls_auth_name=""$(echo $f | cut -d "@" -f 3)""
Doppelte "" willst du nicht das 2. schaltet das erste wieder aus. Dann
kannst du die auch weglassen. Das @ ist ein normales Zeichen und
bräuchte die " nicht. aber egal.
> +			done
> +		else
> +			echo "WARNING: No DNS servers set!"
> +		fi
> +		
>  	else
> -		echo "WARNING: No DNS servers set!"
> +		if dnsservers=$(uci -q get gateway.@dns[0].server); then
> +			for f in $dnsservers; do
> +				uci add_list dhcp.@dnsmasq[0].server=$f

Hier auch "$f"

Viele Grüße
Robert

> +				uci add_list dhcp.@dnsmasq[0].server="/in-addr.arpa/$f"
> +				uci add_list dhcp.@dnsmasq[0].server="/ip6.arpa/$f"
> +			done
> +		else
> +			echo "WARNING: No DNS servers set!"
> +		fi
>  	fi
>  }
>  
>  apply() {
>  	uci commit dhcp
> +	uci commit stubby
>  }
>  
>  revert() {
>  	uci revert dhcp
> +	uci revert stubby
>  }
Christian Dresel April 4, 2020, 11:03 a.m.
Hallo Robert

Danke paar Sachen inline:

On 03.04.20 21:31, Robert Langhammer wrote:
> hallo Christian,
> 
> find ich gut, das rein zu nehmen.
> 
> Zur Syntax hab ich noch was: s.u.
> 
> Am 03.04.20 um 19:29 schrieb Christian Dresel:
>> With this option it is possible to make DoT (DNS over TLS) from the layer3
>> router to the DoT DNS Server.
>>
>> The DNS traffic from Client to the layer3 router is still uncryptet.
>>
>> On the layer 3 router, dnsmasq forward the DNS to stubby.
>> Stubby use DoT to ask a resolver inside or outside the Freifunk backbone
>>
>> For documentation for the options is here:
>> https://wiki.freifunk-franken.de/w/Gatewayfirmware_Config/mit_stubby#dns_mit_DoT_.C3.BCber_stubby
>>
>> Signed-off-by: Christian Dresel <fff@chrisi01.de>
>> ---
>>  src/packages/fff/fff-dhcp/Makefile                 |  3 +-
>>  .../fff/fff-dhcp/files/etc/gateway.d/35-dns        | 34 +++++++++++++++++-----
>>  2 files changed, 29 insertions(+), 8 deletions(-)
>>
>> diff --git a/src/packages/fff/fff-dhcp/Makefile b/src/packages/fff/fff-dhcp/Makefile
>> index c481d82..fed1a2b 100644
>> --- a/src/packages/fff/fff-dhcp/Makefile
>> +++ b/src/packages/fff/fff-dhcp/Makefile
>> @@ -12,7 +12,8 @@ define Package/fff-dhcp
>>  	CATEGORY:=Freifunk
>>  	TITLE:=Freifunk-Franken dhcp
>>  	URL:=http://www.freifunk-franken.de
>> -	DEPENDS:=+dnsmasq
>> +	DEPENDS:=+dnsmasq \
>> +	         +stubby
>>  endef
>>  
>>  define Package/fff-dhcp/description
>> diff --git a/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns b/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns
>> index ad9f1cd..20503bf 100644
>> --- a/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns
>> +++ b/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns
>> @@ -1,21 +1,41 @@
>>  configure() {
>>  	## dns
>>  	uci -q del dhcp.@dnsmasq[0].server
>> -	if dnsservers=$(uci -q get gateway.@dns[0].server); then
>> -		for f in $dnsservers; do
>> -			uci add_list dhcp.@dnsmasq[0].server=$f
>> -			uci add_list dhcp.@dnsmasq[0].server="/in-addr.arpa/$f"
>> -			uci add_list dhcp.@dnsmasq[0].server="/ip6.arpa/$f"
>> -		done
>> +	if [ $(uci -q get gateway.@dns[0].dnsdot) == 1 ]; then
> hier keine doppelten == ist nicht bash.

ack

>> +		uci add_list dhcp.@dnsmasq[0].server="::1#5453"
>> +		uci add_list dhcp.@dnsmasq[0].server="127.0.0.1#5453"
>> +		uci set dhcp.@dnsmasq[0].noresolv="1"
>> +		while uci -q delete stubby.@resolver[0]; do :; done
>> +		if dnsservers=$(uci -q get gateway.@dns[0].server); then
> Hier braucht es " um die Substitution sonst wordsplitting wenn mehrere
> dns und die Var-zuweisung kracht.

Ist genau dieser Code den ich eigentlich gar nicht angefasst habe nur
verschoben:

https://github.com/FreifunkFranken/firmware/blob/master/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns#L4

würde ich hier jetzt nicht anfassen sondern lieber in einem eigenen
Patch dann korrigieren. Es funktioniert auf jeden Fall auch ohne, gerade
getestet.

>>  
>> +			for f in $dnsservers; do
>> +				type="$(echo $f | cut -d "@" -f 1)"
>> +				uci set stubby.$type="resolver"
>> +				uci set stubby.$type.address=""$(echo $f | cut -d "@" -f 2)""
>> +				uci set stubby.$type.tls_auth_name=""$(echo $f | cut -d "@" -f 3)""
> Doppelte "" willst du nicht das 2. schaltet das erste wieder aus. Dann
> kannst du die auch weglassen. Das @ ist ein normales Zeichen und
> bräuchte die " nicht. aber egal.

wo auch immer die "" herkommen... Fallen im v2 dann weg ;)
Wegen dem "@" das ist PHP Gewohnheit, alles was kein Integer ist bekommt
"x" drum herum (deshalb haben auch die Zahlen nach dem -f keine "") ;)
Keine Ahnung was die "schönere" Lösung ist, mir soll es egal sein und
wegen mir können die "" dann im v2 weg, funktionieren tut beides (eben
getestet).

>> +			done
>> +		else
>> +			echo "WARNING: No DNS servers set!"
>> +		fi
>> +		
>>  	else
>> -		echo "WARNING: No DNS servers set!"
>> +		if dnsservers=$(uci -q get gateway.@dns[0].server); then
>> +			for f in $dnsservers; do
>> +				uci add_list dhcp.@dnsmasq[0].server=$f
> 
> Hier auch "$f"

selbe wie oben nur dieser:

https://github.com/FreifunkFranken/firmware/blob/master/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns#L6

Gruß

Christian

> 
> Viele Grüße
> Robert
> 
>> +				uci add_list dhcp.@dnsmasq[0].server="/in-addr.arpa/$f"
>> +				uci add_list dhcp.@dnsmasq[0].server="/ip6.arpa/$f"
>> +			done
>> +		else
>> +			echo "WARNING: No DNS servers set!"
>> +		fi
>>  	fi
>>  }
>>  
>>  apply() {
>>  	uci commit dhcp
>> +	uci commit stubby
>>  }
>>  
>>  revert() {
>>  	uci revert dhcp
>> +	uci revert stubby
>>  }
>
Robert Langhammer April 4, 2020, 8:21 p.m.
Hallo Christian,

ja, mach das so.

Die $(..) kann auch so bleiben. Da bekommt man das Quoting gratis dazu.

Da hab ich auch wieder was gelernt :-)

Viele Grüße
Robert

Am 04.04.20 um 13:03 schrieb Christian Dresel:
> Hallo Robert
>
> Danke paar Sachen inline:
>
> On 03.04.20 21:31, Robert Langhammer wrote:
>> hallo Christian,
>>
>> find ich gut, das rein zu nehmen.
>>
>> Zur Syntax hab ich noch was: s.u.
>>
>> Am 03.04.20 um 19:29 schrieb Christian Dresel:
>>> With this option it is possible to make DoT (DNS over TLS) from the layer3
>>> router to the DoT DNS Server.
>>>
>>> The DNS traffic from Client to the layer3 router is still uncryptet.
>>>
>>> On the layer 3 router, dnsmasq forward the DNS to stubby.
>>> Stubby use DoT to ask a resolver inside or outside the Freifunk backbone
>>>
>>> For documentation for the options is here:
>>> https://wiki.freifunk-franken.de/w/Gatewayfirmware_Config/mit_stubby#dns_mit_DoT_.C3.BCber_stubby
>>>
>>> Signed-off-by: Christian Dresel <fff@chrisi01.de>
>>> ---
>>>  src/packages/fff/fff-dhcp/Makefile                 |  3 +-
>>>  .../fff/fff-dhcp/files/etc/gateway.d/35-dns        | 34 +++++++++++++++++-----
>>>  2 files changed, 29 insertions(+), 8 deletions(-)
>>>
>>> diff --git a/src/packages/fff/fff-dhcp/Makefile b/src/packages/fff/fff-dhcp/Makefile
>>> index c481d82..fed1a2b 100644
>>> --- a/src/packages/fff/fff-dhcp/Makefile
>>> +++ b/src/packages/fff/fff-dhcp/Makefile
>>> @@ -12,7 +12,8 @@ define Package/fff-dhcp
>>>  	CATEGORY:=Freifunk
>>>  	TITLE:=Freifunk-Franken dhcp
>>>  	URL:=http://www.freifunk-franken.de
>>> -	DEPENDS:=+dnsmasq
>>> +	DEPENDS:=+dnsmasq \
>>> +	         +stubby
>>>  endef
>>>  
>>>  define Package/fff-dhcp/description
>>> diff --git a/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns b/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns
>>> index ad9f1cd..20503bf 100644
>>> --- a/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns
>>> +++ b/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns
>>> @@ -1,21 +1,41 @@
>>>  configure() {
>>>  	## dns
>>>  	uci -q del dhcp.@dnsmasq[0].server
>>> -	if dnsservers=$(uci -q get gateway.@dns[0].server); then
>>> -		for f in $dnsservers; do
>>> -			uci add_list dhcp.@dnsmasq[0].server=$f
>>> -			uci add_list dhcp.@dnsmasq[0].server="/in-addr.arpa/$f"
>>> -			uci add_list dhcp.@dnsmasq[0].server="/ip6.arpa/$f"
>>> -		done
>>> +	if [ $(uci -q get gateway.@dns[0].dnsdot) == 1 ]; then
>> hier keine doppelten == ist nicht bash.
> ack
>
>>> +		uci add_list dhcp.@dnsmasq[0].server="::1#5453"
>>> +		uci add_list dhcp.@dnsmasq[0].server="127.0.0.1#5453"
>>> +		uci set dhcp.@dnsmasq[0].noresolv="1"
>>> +		while uci -q delete stubby.@resolver[0]; do :; done
>>> +		if dnsservers=$(uci -q get gateway.@dns[0].server); then
>> Hier braucht es " um die Substitution sonst wordsplitting wenn mehrere
>> dns und die Var-zuweisung kracht.
> Ist genau dieser Code den ich eigentlich gar nicht angefasst habe nur
> verschoben:
>
> https://github.com/FreifunkFranken/firmware/blob/master/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns#L4
>
> würde ich hier jetzt nicht anfassen sondern lieber in einem eigenen
> Patch dann korrigieren. Es funktioniert auf jeden Fall auch ohne, gerade
> getestet.
>
>>>  
>>> +			for f in $dnsservers; do
>>> +				type="$(echo $f | cut -d "@" -f 1)"
>>> +				uci set stubby.$type="resolver"
>>> +				uci set stubby.$type.address=""$(echo $f | cut -d "@" -f 2)""
>>> +				uci set stubby.$type.tls_auth_name=""$(echo $f | cut -d "@" -f 3)""
>> Doppelte "" willst du nicht das 2. schaltet das erste wieder aus. Dann
>> kannst du die auch weglassen. Das @ ist ein normales Zeichen und
>> bräuchte die " nicht. aber egal.
> wo auch immer die "" herkommen... Fallen im v2 dann weg ;)
> Wegen dem "@" das ist PHP Gewohnheit, alles was kein Integer ist bekommt
> "x" drum herum (deshalb haben auch die Zahlen nach dem -f keine "") ;)
> Keine Ahnung was die "schönere" Lösung ist, mir soll es egal sein und
> wegen mir können die "" dann im v2 weg, funktionieren tut beides (eben
> getestet).
>
>>> +			done
>>> +		else
>>> +			echo "WARNING: No DNS servers set!"
>>> +		fi
>>> +		
>>>  	else
>>> -		echo "WARNING: No DNS servers set!"
>>> +		if dnsservers=$(uci -q get gateway.@dns[0].server); then
>>> +			for f in $dnsservers; do
>>> +				uci add_list dhcp.@dnsmasq[0].server=$f
>> Hier auch "$f"
> selbe wie oben nur dieser:
>
> https://github.com/FreifunkFranken/firmware/blob/master/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns#L6
>
> Gruß
>
> Christian
>
>> Viele Grüße
>> Robert
>>
>>> +				uci add_list dhcp.@dnsmasq[0].server="/in-addr.arpa/$f"
>>> +				uci add_list dhcp.@dnsmasq[0].server="/ip6.arpa/$f"
>>> +			done
>>> +		else
>>> +			echo "WARNING: No DNS servers set!"
>>> +		fi
>>>  	fi
>>>  }
>>>  
>>>  apply() {
>>>  	uci commit dhcp
>>> +	uci commit stubby
>>>  }
>>>  
>>>  revert() {
>>>  	uci revert dhcp
>>> +	uci revert stubby
>>>  }
Christian Dresel April 4, 2020, 9:44 p.m.
Hi Robert

On 04.04.20 22:21, Robert Langhammer wrote:
> Hallo Christian,
> 
> ja, mach das so.
> 
> Die $(..) kann auch so bleiben. Da bekommt man das Quoting gratis dazu.

wenn dem so ist:

> 
> Da hab ich auch wieder was gelernt :-)
> 
> Viele Grüße
> Robert
> 
> Am 04.04.20 um 13:03 schrieb Christian Dresel:
>> Hallo Robert
>>
>> Danke paar Sachen inline:
>>
>> On 03.04.20 21:31, Robert Langhammer wrote:
>>> hallo Christian,
>>>
>>> find ich gut, das rein zu nehmen.
>>>
>>> Zur Syntax hab ich noch was: s.u.
>>>
>>> Am 03.04.20 um 19:29 schrieb Christian Dresel:
>>>> With this option it is possible to make DoT (DNS over TLS) from the layer3
>>>> router to the DoT DNS Server.
>>>>
>>>> The DNS traffic from Client to the layer3 router is still uncryptet.
>>>>
>>>> On the layer 3 router, dnsmasq forward the DNS to stubby.
>>>> Stubby use DoT to ask a resolver inside or outside the Freifunk backbone
>>>>
>>>> For documentation for the options is here:
>>>> https://wiki.freifunk-franken.de/w/Gatewayfirmware_Config/mit_stubby#dns_mit_DoT_.C3.BCber_stubby
>>>>
>>>> Signed-off-by: Christian Dresel <fff@chrisi01.de>
>>>> ---
>>>>  src/packages/fff/fff-dhcp/Makefile                 |  3 +-
>>>>  .../fff/fff-dhcp/files/etc/gateway.d/35-dns        | 34 +++++++++++++++++-----
>>>>  2 files changed, 29 insertions(+), 8 deletions(-)
>>>>
>>>> diff --git a/src/packages/fff/fff-dhcp/Makefile b/src/packages/fff/fff-dhcp/Makefile
>>>> index c481d82..fed1a2b 100644
>>>> --- a/src/packages/fff/fff-dhcp/Makefile
>>>> +++ b/src/packages/fff/fff-dhcp/Makefile
>>>> @@ -12,7 +12,8 @@ define Package/fff-dhcp
>>>>  	CATEGORY:=Freifunk
>>>>  	TITLE:=Freifunk-Franken dhcp
>>>>  	URL:=http://www.freifunk-franken.de
>>>> -	DEPENDS:=+dnsmasq
>>>> +	DEPENDS:=+dnsmasq \
>>>> +	         +stubby
>>>>  endef
>>>>  
>>>>  define Package/fff-dhcp/description
>>>> diff --git a/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns b/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns
>>>> index ad9f1cd..20503bf 100644
>>>> --- a/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns
>>>> +++ b/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns
>>>> @@ -1,21 +1,41 @@
>>>>  configure() {
>>>>  	## dns
>>>>  	uci -q del dhcp.@dnsmasq[0].server
>>>> -	if dnsservers=$(uci -q get gateway.@dns[0].server); then
>>>> -		for f in $dnsservers; do
>>>> -			uci add_list dhcp.@dnsmasq[0].server=$f
>>>> -			uci add_list dhcp.@dnsmasq[0].server="/in-addr.arpa/$f"
>>>> -			uci add_list dhcp.@dnsmasq[0].server="/ip6.arpa/$f"
>>>> -		done
>>>> +	if [ $(uci -q get gateway.@dns[0].dnsdot) == 1 ]; then
>>> hier keine doppelten == ist nicht bash.
>> ack
>>
>>>> +		uci add_list dhcp.@dnsmasq[0].server="::1#5453"
>>>> +		uci add_list dhcp.@dnsmasq[0].server="127.0.0.1#5453"
>>>> +		uci set dhcp.@dnsmasq[0].noresolv="1"
>>>> +		while uci -q delete stubby.@resolver[0]; do :; done
>>>> +		if dnsservers=$(uci -q get gateway.@dns[0].server); then
>>> Hier braucht es " um die Substitution sonst wordsplitting wenn mehrere
>>> dns und die Var-zuweisung kracht.
>> Ist genau dieser Code den ich eigentlich gar nicht angefasst habe nur
>> verschoben:
>>
>> https://github.com/FreifunkFranken/firmware/blob/master/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns#L4
>>
>> würde ich hier jetzt nicht anfassen sondern lieber in einem eigenen
>> Patch dann korrigieren. Es funktioniert auf jeden Fall auch ohne, gerade
>> getestet.
>>
>>>>  
>>>> +			for f in $dnsservers; do
>>>> +				type="$(echo $f | cut -d "@" -f 1)"
>>>> +				uci set stubby.$type="resolver"
>>>> +				uci set stubby.$type.address=""$(echo $f | cut -d "@" -f 2)""
>>>> +				uci set stubby.$type.tls_auth_name=""$(echo $f | cut -d "@" -f 3)""
>>> Doppelte "" willst du nicht das 2. schaltet das erste wieder aus. Dann
>>> kannst du die auch weglassen. Das @ ist ein normales Zeichen und
>>> bräuchte die " nicht. aber egal.
>> wo auch immer die "" herkommen... Fallen im v2 dann weg ;)
>> Wegen dem "@" das ist PHP Gewohnheit, alles was kein Integer ist bekommt
>> "x" drum herum (deshalb haben auch die Zahlen nach dem -f keine "") ;)
>> Keine Ahnung was die "schönere" Lösung ist, mir soll es egal sein und
>> wegen mir können die "" dann im v2 weg, funktionieren tut beides (eben
>> getestet).

dann ist es hier auch unnötig und man kann
uci set stubby.$type.address=$(echo $f | cut -d @ -f 2)
machen?

Gruß

Christian

>>
>>>> +			done
>>>> +		else
>>>> +			echo "WARNING: No DNS servers set!"
>>>> +		fi
>>>> +		
>>>>  	else
>>>> -		echo "WARNING: No DNS servers set!"
>>>> +		if dnsservers=$(uci -q get gateway.@dns[0].server); then
>>>> +			for f in $dnsservers; do
>>>> +				uci add_list dhcp.@dnsmasq[0].server=$f
>>> Hier auch "$f"
>> selbe wie oben nur dieser:
>>
>> https://github.com/FreifunkFranken/firmware/blob/master/src/packages/fff/fff-dhcp/files/etc/gateway.d/35-dns#L6
>>
>> Gruß
>>
>> Christian
>>
>>> Viele Grüße
>>> Robert
>>>
>>>> +				uci add_list dhcp.@dnsmasq[0].server="/in-addr.arpa/$f"
>>>> +				uci add_list dhcp.@dnsmasq[0].server="/ip6.arpa/$f"
>>>> +			done
>>>> +		else
>>>> +			echo "WARNING: No DNS servers set!"
>>>> +		fi
>>>>  	fi
>>>>  }
>>>>  
>>>>  apply() {
>>>>  	uci commit dhcp
>>>> +	uci commit stubby
>>>>  }
>>>>  
>>>>  revert() {
>>>>  	uci revert dhcp
>>>> +	uci revert stubby
>>>>  }
>
Robert Langhammer April 5, 2020, 9:51 a.m.
Hallo Christian,

Am 04.04.20 um 23:44 schrieb Christian Dresel:
> dann ist es hier auch unnötig und man kann
> uci set stubby.$type.address=$(echo $f | cut -d @ -f 2)
> machen?

es ist wohl nicht nötig bei einer Variablenzuweisung eine $(..) zu quoten.

ein name=$(echo robert langhammer) funktioniert tatsächlich. Sieht aber
schon übel aus. Denn ein name=robert langhammer alleine funktioniert ja
nicht. Es sieht so aus, als würde daraus ein name="robert langhammer"

Das ist auch nicht konsistent. Wenn man das hier testet.

mkdir $(echo robert langhammer)  != mkdir "$(echo robert langhammer)"

Also ja, bei einer Variablenzuweisung darf man es wohl weg lassen,
obwohl shellcheck mault:

uci set stubby.$type.address=$(echo $f | cut -d @ -f 2)
               ^-- SC2086: Double quote to prevent globbing and word
splitting.
                             ^-- SC2046: Quote this to prevent word
splitting.
                                    ^-- SC2086: Double quote to prevent
globbing and word splitting.

Das war mir neu, darum hab ich die " bisher gerne drum rum gemacht und
werde auch dabei bleiben.

-> mach wie du meinst.

Viele Grüße
Robert