aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2018-02-28 19:24:31 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2018-03-04 18:50:25 +0100
commit1f9be19a71079cd093bed66798d72aaca88e1e7d (patch)
treeb46f28811611619942f1cfb2eabd6deacc423fc5 /src
parentnoise: align static_identity keys (diff)
downloadwireguard-monolithic-historical-1f9be19a71079cd093bed66798d72aaca88e1e7d.tar.xz
wireguard-monolithic-historical-1f9be19a71079cd093bed66798d72aaca88e1e7d.zip
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.
Diffstat (limited to 'src')
-rwxr-xr-xsrc/tools/wg-quick.bash15
1 files 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'