lots of updates, some t11 stuff
[distro-setup] / trusted-network
1 #!/bin/bash
2
3 # Usage: run to trust or untrust dns. public wifi sometimes needs to
4 # trust dns initially to log in.
5
6
7 [[ $EUID == 0 ]] || exec sudo -E "${BASH_SOURCE[0]}" "$@"
8
9 source /a/bin/errhandle/err
10
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##*/}"
15
16 # removes malware and adult content
17 servers=(1.1.1.3 1.0.0.3 2606:4700:4700::1113 2606:4700:4700::1003)
18
19 servers=(1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001)
20
21 ## trying out google
22 servers=(8.8.8.8 8.8.4.4 2001:4860:4860::8888 2001:4860:4860::8844)
23
24
25
26 m() { printf "%s\n" "$*"; "$@"; }
27 e() { printf "%s\n" "$@"; }
28 i() { # install file
29 local tmp tmpdir dest="$1"
30 local base="${dest##*/}"
31 mkdir -p ${dest%/*}
32 ir=false # i result
33 tmpdir=$(mktemp -d)
34 cat >$tmpdir/"$base"
35 tmp=$(rsync -ic $tmpdir/"$base" "$dest")
36 if [[ $tmp ]]; then
37 printf "%s\n" "$tmp"
38 ir=true
39 fi
40 rm -rf $tmpdir
41 }
42
43 e $script_name
44 exit 0
45
46 # i symlinked the script to another name to make it work different
47 trust=true
48 case $script_name in
49 untrusted-network)
50 trust=false
51 ;;
52 esac
53
54
55 if $trust; then
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
60 fi
61 fi
62
63 rm -fv /etc/systemd/resolved.conf.d/untrusted-network.conf
64 else #untrusted
65 # https://wiki.archlinux.org/index.php/Systemd-resolved#Manually
66 cat >/etc/systemd/resolved.conf.d/untrusted-network.conf <<EOF
67 [Resolve]
68 DNS=${servers[@]}
69 Domains=b8.nz
70 DNSOverTLS=yes
71 EOF
72
73 i /etc/NetworkManager/conf.d/dns.conf <<'EOF'
74 [main]
75 dns=none
76 systemd-resolved=false
77 EOF
78
79 if $ir && [[ $(systemctl is-active NetworkManager) == active ]]; then
80 m systemctl restart NetworkManager
81 fi
82 fi
83
84 dhclient_restart=false
85 # man dhclient.conf
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
88 dhclient_restart=true
89 e $0: dhclient_restart=true
90 fi
91
92
93 # wait for networkmanager to come back
94 for f in {1..20}; do
95 if read -r _ _ _ _ gateway_if _ < <(ip route get 8.8.8.8); then
96 break
97 fi
98 m sleep 2
99 done
100
101
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*
108
109
110 if $dhclient_restart && grep -Pq "^ *auto ($gateway_if|.* $gateway_if( |$))" /etc/network/interfaces; then
111 m ifdown $gateway_if
112 m ifup $gateway_if
113 fi
114
115 # at least on systemd 237 ifupdown it sets a global and this is not needed
116 systemd-resolve --interface=$gateway_if --revert
117 else
118 e $0: no gateway_if found
119 fi
120
121 m systemctl restart systemd-resolved
122
123
124
125 # just for curiosity i did a
126 # wrapper around dhclient, then ifdown eth0; ifup eth0:
127
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
130 # env
131 # ADDRFAM=inet
132 # PHASE=pre-down
133 # VERBOSITY=0
134 # PWD=/sbin
135 # IFACE=eth0
136 # METHOD=dhcp
137 # SHLVL=1
138 # LOGICAL=eth0
139 # MODE=stop
140 # PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
141 # IFUPDOWN_eth0=pre-down
142 # _=/usr/bin/env
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
145 # env
146 # ADDRFAM=inet
147 # PHASE=post-up
148 # VERBOSITY=0
149 # PWD=/sbin
150 # IFACE=eth0
151 # METHOD=dhcp
152 # SHLVL=1
153 # LOGICAL=eth0
154 # MODE=start
155 # PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
156 # IFUPDOWN_eth0=post-up
157 # _=/usr/bin/env