wg-quick: darwin: set DNS servers after delay on route change
This works around a race condition in macOS's network daemons, while also adding one in the form of possibly calling kill -ALRM on a stale PID; unfortunately bash can't wait from a trap. Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
This commit is contained in:
parent
d532074ef5
commit
206e8f08e2
|
@ -293,7 +293,8 @@ monitor_daemon() {
|
|||
echo "[+] Backgrounding route monitor" >&2
|
||||
(trap 'del_routes; del_dns; exit 0' INT TERM EXIT
|
||||
exec >/dev/null 2>&1
|
||||
local event
|
||||
local event pid=$BASHPID
|
||||
[[ ${#DNS[@]} -gt 0 ]] && trap set_dns ALRM
|
||||
# TODO: this should also check to see if the endpoint actually changes
|
||||
# in response to incoming packets, and then call set_endpoint_direct_route
|
||||
# then too. That function should be able to gracefully cleanup if the
|
||||
|
@ -303,7 +304,10 @@ monitor_daemon() {
|
|||
ifconfig "$REAL_INTERFACE" >/dev/null 2>&1 || break
|
||||
[[ $AUTO_ROUTE4 -eq 1 || $AUTO_ROUTE6 -eq 1 ]] && set_endpoint_direct_route
|
||||
[[ -z $MTU ]] && set_mtu
|
||||
[[ ${#DNS[@]} -gt 0 ]] && set_dns
|
||||
if [[ ${#DNS[@]} -gt 0 ]]; then
|
||||
set_dns
|
||||
sleep 2 && kill -ALRM $pid 2>/dev/null &
|
||||
fi
|
||||
done < <(route -n monitor)) & disown
|
||||
}
|
||||
|
||||
|
|
Reference in New Issue