From 99264cb88f6752ee4c07121f6ed1120544d32e5f Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Wed, 28 Feb 2018 19:24:31 +0100 Subject: [PATCH] wg-quick: if resolvconf/interface-order exists, use it Some older broken resolvconf implementations ignore -m, but do have an interface-order list. It's better to use this list dynamically, in case it changes, or in case it's not used by the OS's resolvconf implementation, such as in the case of systemd or openresolv. Signed-off-by: Jason A. Donenfeld --- src/wg-quick.bash | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/wg-quick.bash b/src/wg-quick.bash index af72f7d..e93fb80 100755 --- a/src/wg-quick.bash +++ b/src/wg-quick.bash @@ -136,16 +136,25 @@ set_mtu() { cmd ip link set mtu $(( mtu - 80 )) dev "$INTERFACE" } +resolvconf_iface_prefix() { + [[ -f /etc/resolvconf/interface-order ]] || return 0 + local iface + while read -r iface; do + [[ $iface =~ ^([A-Za-z0-9-]+)\*$ ]] || continue + echo "${BASH_REMATCH[1]}." && return 0 + done < /etc/resolvconf/interface-order +} + HAVE_SET_DNS=0 set_dns() { [[ ${#DNS[@]} -gt 0 ]] || return 0 - printf 'nameserver %s\n' "${DNS[@]}" | cmd resolvconf -a "tun.$INTERFACE" -m 0 -x + printf 'nameserver %s\n' "${DNS[@]}" | cmd resolvconf -a "$(resolvconf_iface_prefix)$INTERFACE" -m 0 -x HAVE_SET_DNS=1 } unset_dns() { [[ ${#DNS[@]} -gt 0 ]] || return 0 - cmd resolvconf -d "tun.$INTERFACE" + cmd resolvconf -d "$(resolvconf_iface_prefix)$INTERFACE" } add_route() { @@ -194,7 +203,7 @@ save_config() { done while read -r address; do [[ $address =~ ^nameserver\ ([a-zA-Z0-9_=+:%.-]+)$ ]] && new_config+="DNS = ${BASH_REMATCH[1]}"$'\n' - done < <(resolvconf -l "tun.$INTERFACE" 2>/dev/null) + done < <(resolvconf -l "$(resolvconf_iface_prefix)$INTERFACE" 2>/dev/null) [[ -n $MTU && $(ip link show dev "$INTERFACE") =~ mtu\ ([0-9]+) ]] && new_config+="MTU = ${BASH_REMATCH[1]}"$'\n' [[ -n $TABLE ]] && new_config+="Table = $TABLE"$'\n' [[ $SAVE_CONFIG -eq 0 ]] || new_config+=$'SaveConfig = true\n'