With a minor modification, the suggested patch seems to work correctly for me 
on both IPv4 and IPv6 static configurations.

The modification I have added is to clear the variables DNS, DNS6, DOMAINS, 
DOMAINS6, DEFAULT_ROUTE before importing the state files,
otherwise their previous contents may be carried through. Without this, I was 
getting a search domain of "DOMAINS" configured in resolved.

I have attached a source patch against ifupdown master on Salsa.

I note that the resolved hook script we're working with here seems to be 
derived from the (fairly hacky) dhclient hook scripts being shipped by Ubuntu.
To get DNS working for DHCP cases as well as for static ones, will require a 
corresponding hook script for dhclient in Debian: see bug #1025062.

Note also in ifupdown it is possible to have independent DHCP and/or static 
configurations for IPv4 and IPv6 on the same interface.
I'm not sure how common those cases are, but the hook scripts for ifupdown and 
dhclient would have to use the same protocol and state file for it to work with 
all the possible combinations. I'm going to post a comment and patch against 
bug #1025062 to this effect.

-Ken.
diff --git a/debian/if-up.d/resolved b/debian/if-up.d/resolved
index cb331ca..e79f997 100755
--- a/debian/if-up.d/resolved
+++ b/debian/if-up.d/resolved
@@ -43,11 +43,11 @@ if systemctl is-enabled systemd-resolved > /dev/null 2>&1; then
     fi
     if  [ -n "$NEW_DNS" ]; then
         cat <<EOF >"$mystatedir/ifupdown-${ADDRFAM}-$interface"
-"$DNS"="$NEW_DNS"
+$DNS="$NEW_DNS"
 EOF
         if  [ -n "$NEW_DOMAINS" ]; then
             cat <<EOF >>"$mystatedir/ifupdown-${ADDRFAM}-$interface"
-"$DOMAINS"="$NEW_DOMAINS"
+$DOMAINS="$NEW_DOMAINS"
 EOF
         fi
     fi
@@ -66,7 +66,7 @@ EOF
     # ignore errors due to nonexistent file
     md5sum "$mystatedir/isc-dhcp-v4-$interface" "$mystatedir/isc-dhcp-v6-$interface" "$mystatedir/ifupdown-inet-$interface" "$mystatedir/ifupdown-inet6-$interface" > "$newstate" 2> /dev/null || true
     if ! cmp --silent "$oldstate" "$newstate" 2>/dev/null; then
-        DNS DNS6 DOMAINS DOMAINS6 DEFAULT_ROUTE
+        unset DNS DNS6 DOMAINS DOMAINS6 DEFAULT_ROUTE
         # v4 first
         if [ -e "$mystatedir/isc-dhcp-v4-$interface" ]; then
             . "$mystatedir/isc-dhcp-v4-$interface"

Reply via email to