From 1f9be19a71079cd093bed66798d72aaca88e1e7d Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Wed, 28 Feb 2018 19:24:31 +0100 Subject: 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. --- src/tools/wg-quick.bash | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/src/tools/wg-quick.bash b/src/tools/wg-quick.bash index af72f7d..e93fb80 100755 --- a/src/tools/wg-quick.bash +++ b/src/tools/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' -- cgit v1.2.3-59-g8ed1b