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