diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2017-10-26 22:49:46 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2017-10-31 17:25:23 +0100 |
commit | 9bcb48eacd198ae4b0faee462941dda2dd71a4dd (patch) | |
tree | 0e90fac4d3c8ecc93c01890aef3a29b4734305ec /src/wg-quick.bash | |
parent | wg-quick: allow specifiying multiple hooks (diff) | |
download | wireguard-tools-9bcb48eacd198ae4b0faee462941dda2dd71a4dd.tar.xz wireguard-tools-9bcb48eacd198ae4b0faee462941dda2dd71a4dd.zip |
wg-quick: remember to rewind DNS settings on failure
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'src/wg-quick.bash')
-rwxr-xr-x | src/wg-quick.bash | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/src/wg-quick.bash b/src/wg-quick.bash index def78af..b98a18b 100755 --- a/src/wg-quick.bash +++ b/src/wg-quick.bash @@ -83,6 +83,7 @@ add_if() { del_if() { local fwmark + [[ $HAVE_SET_DNS -eq 0 ]] || unset_dns fwmark="$(wg show "$INTERFACE" fwmark)" DEFAULT_TABLE=0 [[ $fwmark != off ]] && DEFAULT_TABLE=$(( fwmark )) @@ -130,12 +131,16 @@ set_mtu() { cmd ip link set mtu $(( mtu - 80 )) dev "$INTERFACE" } +HAVE_SET_DNS=0 set_dns() { - [[ ${#DNS[@]} -eq 0 ]] || printf 'nameserver %s\n' "${DNS[@]}" | cmd resolvconf -a "tun.$INTERFACE" -m 0 -x + [[ ${#DNS[@]} -gt 0 ]] || return 0 + printf 'nameserver %s\n' "${DNS[@]}" | cmd resolvconf -a "tun.$INTERFACE" -m 0 -x + HAVE_SET_DNS=1 } unset_dns() { - [[ ${#DNS[@]} -eq 0 ]] || cmd resolvconf -d "tun.$INTERFACE" + [[ ${#DNS[@]} -gt 0 ]] || return 0 + cmd resolvconf -d "tun.$INTERFACE" } add_route() { @@ -254,8 +259,8 @@ cmd_down() { [[ " $(wg show interfaces) " == *" $INTERFACE "* ]] || die "\`$INTERFACE' is not a WireGuard interface" execute_hooks "${PRE_DOWN[@]}" [[ $SAVE_CONFIG -eq 0 ]] || save_config - unset_dns del_if + unset_dns execute_hooks "${POST_DOWN[@]}" } |