https://dev.kronoz.win/r/awesome-scripts.git
1#!/bin/bash
2DNS_SERVER="127.0.0.1"
3LOG_FILE="/tmp/dnsleak-guard.log"
4
5exec 2>>"$LOG_FILE"
6
7if [ "$EUID" -ne 0 ]; then
8 echo "[$(date)] ERROR: must run as root" >> "$LOG_FILE"
9 exit 1
10fi
11
12log() {
13 echo "[$(date)] $1" >> "$LOG_FILE"
14}
15
16log "dnsleak-guard started"
17
18while true; do
19 CHANGED=0
20
21 while IFS= read -r service; do
22 [[ "$service" == "An asterisk"* ]] && continue
23 [[ -z "$service" ]] && continue
24 [[ "$service" == "*"* ]] && continue
25
26 current=$(networksetup -getdnsservers "$service" 2>/dev/null)
27 [ -z "$current" ] && continue
28 [[ "$current" == *"aren't any"* ]] && continue
29
30 current_flat=$(echo "$current" | tr '\n' ' ' | sed 's/[[:space:]]*$//')
31
32 if [ "$current_flat" != "$DNS_SERVER" ]; then
33 if networksetup -setdnsservers "$service" "$DNS_SERVER" 2>/dev/null; then
34 CHANGED=1
35 log "[$service] DNS reset: '$current_flat' -> $DNS_SERVER"
36 fi
37 fi
38 done < <(networksetup -listallnetworkservices 2>/dev/null)
39
40 if [ "$CHANGED" -eq 1 ]; then
41 dscacheutil -flushcache 2>/dev/null
42 killall -HUP mDNSResponder 2>/dev/null
43 log "DNS cache flushed"
44 fi
45
46 sleep 10
47done