3 # Usage: run to trust or untrust dns. public wifi sometimes needs to
4 # trust dns initially to log in.
7 [[ $EUID == 0 ]] ||
exec sudo
-E "${BASH_SOURCE[0]}" "$@"
9 source /a
/bin
/errhandle
/err
11 readonly this_file
=$
(readlink
-f -- "${BASH_SOURCE[0]}")
12 readonly this_dir
="${this_file%/*}"
13 script_name
="${BASH_SOURCE[0]}"
14 script_name
="${script_name##*/}"
16 # removes malware and adult content
17 servers
=(1.1.1.3 1.0.0.3 2606:4700:4700::1113 2606:4700:4700::1003)
19 servers
=(1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001)
22 servers
=(8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844)
26 m
() { printf "%s\n" "$*"; "$@"; }
27 e
() { printf "%s\n" "$@"; }
29 local tmp tmpdir dest
="$1"
30 local base
="${dest##*/}"
35 tmp
=$
(rsync
-ic $tmpdir/"$base" "$dest")
46 # i symlinked the script to another name to make it work different
56 if [[ -e /etc
/NetworkManager
/conf.d
/dns.conf
]]; then
57 rm -fv /etc
/NetworkManager
/conf.d
/dns.conf
58 if [[ $
(systemctl is-active NetworkManager
) == active
]]; then
59 m systemctl restart NetworkManager
63 rm -fv /etc
/systemd
/resolved.conf.d
/untrusted-network.conf
65 # https://wiki.archlinux.org/index.php/Systemd-resolved#Manually
66 cat >/etc
/systemd
/resolved.conf.d
/untrusted-network.conf
<<EOF
73 i
/etc
/NetworkManager
/conf.d
/dns.conf
<<'EOF'
76 systemd-resolved=false
79 if $ir && [[ $
(systemctl is-active NetworkManager
) == active
]]; then
80 m systemctl restart NetworkManager
84 dhclient_restart
=false
86 if ! grep -qP '\bdomain-name-servers\b' /etc
/dhcp
/dhclient.conf
; then
87 sed -i 's/^ *request/request domain-name-servers,/' /etc
/dhcp
/dhclient.conf
89 e
$0: dhclient_restart
=true
93 # wait for networkmanager to come back
95 if read -r _ _ _ _ gateway_if _
< <(ip route get
8.8.8.8); then
102 if [[ $gateway_if ]]; then
103 # we could do this, but dhclient is still running and will use its old settings
104 # from dependencies of ifupdown,
105 # from man dhclient-script
106 # from /etc/dhcp/dhclient-enter-hooks.d/resolved
107 # rm -f /run/systemd/resolved.conf.d/*$gateway_if*
110 if $dhclient_restart && grep -Pq "^ *auto ($gateway_if|.* $gateway_if( |$))" /etc
/network
/interfaces
; then
115 # at least on systemd 237 ifupdown it sets a global and this is not needed
116 systemd-resolve
--interface=$gateway_if --revert
118 e
$0: no gateway_if found
121 m systemctl restart systemd-resolved
125 # just for curiosity i did a
126 # wrapper around dhclient, then ifdown eth0; ifup eth0:
128 # Tue Mar 9 18:29:05 EST 2021
129 # args -4 -v -r -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases -I -df /var/lib/dhcp/dhclient6.eth0.leases eth0
140 # PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
141 # IFUPDOWN_eth0=pre-down
143 # Tue Mar 9 18:29:07 EST 2021
144 # args -1 -4 -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases -I -df /var/lib/dhcp/dhclient6.eth0.leases eth0
155 # PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
156 # IFUPDOWN_eth0=post-up