├── LICENSE ├── README.md ├── network.sh └── network.sh.unbound.sh /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 2-Clause License 2 | 3 | Copyright (c) 2020, vermaden 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 17 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 18 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 19 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 20 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 22 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 23 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 25 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # network 2 | 3 | Manage FreeBSD network connectivity using **`network.sh`** script. 4 | 5 | ``` 6 | ___ ___ ___ 7 | ____ __\ \__ __ __ __ __\_ \ __ _____/ / 8 | / \/ \_ _\\ \ \/ \ \ \/ / / __/ \ 9 | \ \ \ '__\ \_ \ \ \ \ \ \ \__\__ \ / / 10 | \__\__\__/ \___\______/____/\__\_/\_\_/____//__/ 11 | 12 | ``` 13 | 14 | Read more here: 15 | 16 | [FreeBSD Network Management with `network.sh` Script](https://vermaden.wordpress.com/2018/03/24/freebsd-network-management-with-network-sh-script/) 17 | 18 | -------------------------------------------------------------------------------- /network.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | # Copyright (c) 2017-2023 Slawomir Wojciech Wojtczak (vermaden) 4 | # All rights reserved. 5 | # 6 | # THIS SOFTWARE USES FREEBSD LICENSE (ALSO KNOWN AS 2-CLAUSE BSD LICENSE) 7 | # https://www.freebsd.org/copyright/freebsd-license.html 8 | # 9 | # Redistribution and use in source and binary forms, with or without 10 | # modification, are permitted provided that following conditions are met: 11 | # 1. Redistributions of source code must retain the above copyright 12 | # notice, this list of conditions and the following disclaimer. 13 | # 2. Redistributions in binary form must reproduce the above copyright 14 | # notice, this list of conditions and the following disclaimer in the 15 | # documentation and/or other materials provided with the distribution. 16 | # 17 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS 'AS IS' AND ANY 18 | # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY 21 | # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 | # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 | # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 | # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 | # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 | # 28 | # ------------------------------ 29 | # NETWORK MANAGEMENT network.sh 30 | # ------------------------------ 31 | # vermaden [AT] interia [DOT] pl 32 | # https://vermaden.wordpress.com 33 | 34 | # SETTINGS 35 | UNBOUND=0 36 | LAN_IF=em0 37 | LAN_RANDOM_MAC=0 38 | LAN_MAC_FROM_WLAN=1 39 | WLAN_IF=wlan0 40 | WLAN_PH=iwn0 41 | WLAN_RANDOM_MAC=0 42 | WLAN_COUNTRY=PL 43 | WLAN_REGDOMAIN=FCC4 44 | WWAN_IF=tun0 45 | WWAN_PROFILE=WWAN 46 | NAME=${0##*/} 47 | NETFS="nfs,smbfs,fusefs.sshfs" 48 | TIMEOUT=48 49 | DELAY=0.5 50 | SUDO_WHICH=0 51 | SUDO=0 52 | DOAS_WHICH=0 53 | DOAS=1 54 | ROOT=0 55 | IP_REGEX='[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' 56 | 57 | # DISPLAY VERSION 58 | if [ "${1}" = "--version" -o \ 59 | "${1}" = "-version" -o \ 60 | "${1}" = "version" ] 61 | then 62 | 63 | echo " ___ ___ ___ " 64 | echo " ____ __\ \__ __ __ __ __\_ \ __ _____/ / " 65 | echo " / \/ \_ _\\\ \ \/ \ \ \/ / / __/ \ " 66 | echo " \ \ \ '__\ \_ \ \ \ \ \ \ \__\__ \ / / " 67 | echo " \__\__\__/ \___\______/____/\__\_/\_\_/____//__/ " 68 | echo 69 | echo "network.sh 0.9 2024/09/18" 70 | echo 71 | exit 0 72 | fi 73 | 74 | # CHECK doas(8) WITH which(1) 75 | if which doas 1> /dev/null 2> /dev/null 76 | then 77 | DOAS_WHICH=1 78 | else 79 | DOAS_WHICH=0 80 | fi 81 | 82 | # CHECK sudo(8) WITH which(1) 83 | if which sudo 1> /dev/null 2> /dev/null 84 | then 85 | SUDO_WHICH=1 86 | else 87 | SUDO_WHICH=0 88 | fi 89 | 90 | # CHECK USER WITH whoami(1) 91 | if [ "$( whoami )" = "root" ] 92 | then 93 | ROOT=1 94 | fi 95 | 96 | # CHOOSE ONE FROM doas(8) AND sudo(8) 97 | if [ ${DOAS_WHICH} -eq 1 -o ${SUDO_WHICH} -eq 1 ] 98 | then 99 | if [ ${DOAS} -eq 0 -a ${SUDO} -eq 1 -a ${SUDO_WHICH} -eq 1 ] 100 | then 101 | CMD=sudo 102 | elif [ ${DOAS} -eq 1 -a ${SUDO} -eq 0 -a ${DOAS_WHICH} -eq 1 ] 103 | then 104 | CMD=doas 105 | elif [ ${DOAS} -eq 1 -a ${SUDO} -eq 1 -a ${DOAS_WHICH} -eq 1 ] 106 | then 107 | CMD=doas 108 | fi 109 | elif [ ${ROOT} -eq 1 ] 110 | then 111 | CMD='' 112 | else 113 | echo "NOPE: This script needs doas(1) or sudo(1) to work properly." 114 | exit 1 115 | fi 116 | 117 | unset SUDO_WHICH 118 | unset DOAS_WHICH 119 | unset ROOT 120 | 121 | # random_mac() ---------------------------------------------------------------- 122 | __random_mac() { # 1=INTERFACE 123 | # DO NOT PUT echo '__random_mac()' HERE 124 | 125 | MAC_OUI=$( ifconfig ${1} | awk '/hwaddr/ {print $2}' | awk -F ':' '{print $1 ":" $2 ":" $3}' ) 126 | MAC_RAN=$( env LC_ALL=C tr -c -d '0-9a-f' < /dev/random | head -c 6 | sed -e 's|\(..\)|\1:|g' -e 's|:$||' ) 127 | echo ${MAC_OUI}:${MAC_RAN} 128 | } 129 | 130 | # wlan_wait_associated() ------------------------------------------------------ 131 | __wlan_wait_associated() { 132 | echo '__wlan_wait_associated()' 133 | 134 | local COUNT=0 135 | while : 136 | do 137 | local STATUS=$( ifconfig ${WLAN_IF} | awk '/status/ {print $2}' ) 138 | if [ "${STATUS}" = "associated" ] 139 | then 140 | break 141 | fi 142 | local COUNT=$(( ${COUNT} + 1 )) 143 | if [ ${COUNT} -gt ${TIMEOUT} ] 144 | then 145 | echo "NOPE: Could not associate with WLAN network." 146 | __network_reset 147 | exit 1 148 | fi 149 | sleep ${DELAY} 150 | done 151 | } 152 | 153 | # net_shares_umount() --------------------------------------------------------- 154 | __net_shares_umount() { 155 | echo '__net_shares_umount()' 156 | 157 | #DOAS# permit nopass :network as root cmd killall 158 | #SUDO# %network ALL = NOPASSWD: /usr/bin/killall * 159 | ${CMD} killall -9 sshfs 1> /dev/null 2> /dev/null & 160 | echo ${CMD} killall -9 sshfs 161 | 162 | mount -t ${NETFS} -p \ 163 | | awk '{print $2}' \ 164 | | while read MNT 165 | do 166 | 167 | #DOAS# permit nopass :network as root cmd umount 168 | #SUDO# %network ALL = NOPASSWD: /sbin/umount -f * 169 | ${CMD} umount -f "${MNT}" & 170 | echo ${CMD} umount -f "${MNT}" 171 | 172 | done 173 | } 174 | 175 | # bhyve_networking() ---------------------------------------------------------- 176 | __bhyve_networking() { 177 | # WHEN bhyve(8) IS USED RESTART ITS vm-bhyve NETWORKING 178 | if ! kldstat -m vmm 1> /dev/null 2> /dev/null 179 | then 180 | return 0 181 | fi 182 | # ADD IP ADDRESS TO EACH vm-bhyve SWITCH 183 | doas vm switch list \ 184 | | sed 1d \ 185 | | while read NAME TYPE IFACE ADDRESS PRIVATE MTU VLAN PORTS 186 | do 187 | #DOAS# permit nopass :network as root cmd vm args switch address 188 | #SUDO# %network ALL = NOPASSWD: /usr/local/sbin/vm switch address * 189 | ${CMD} vm switch address ${NAME} ${ADDRESS} 1> /dev/null 2> /dev/null 190 | echo ${CMD} vm switch address ${NAME} ${ADDRESS} 191 | done 192 | # SET TO 'up' ALL vm-bhyve SWITCH MEMBERS 193 | doas vm switch list \ 194 | | sed 1d \ 195 | | awk '{print $1}' \ 196 | | while read SWITCH 197 | do 198 | ifconfig vm-${SWITCH} \ 199 | | awk '/member:/ {print $2}' \ 200 | | while read INTERFACE 201 | do 202 | #DOAS# permit nopass :network as root cmd ifconfig 203 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * up 204 | ${CMD} ifconfig ${INTERFACE} up 1> /dev/null 2> /dev/null 205 | echo ${CMD} ifconfig ${INTERFACE} up 206 | done 207 | done 208 | 209 | } 210 | 211 | 212 | # network_status() ------------------------------------------------------------ 213 | __network_status() { 214 | 215 | local COL1='\033[38;05;1m' 216 | local COL2='\033[38;05;2m' 217 | local COL3='\033[38;05;3m' 218 | local COL4='\033[38;05;4m' 219 | local COL5='\033[38;05;5m' 220 | local COLe='\033[0m' 221 | local DNS=$( grep -m 1 nameserver /etc/resolv.conf | awk '{print $NF}' ) 222 | local ROUTE=$( route -n show default 2> /dev/null ) 223 | local DGW=$( echo "${ROUTE}" | awk '/gateway:/ {print $NF}' ) 224 | local GREP_COLOR=34 225 | 226 | if [ "$( ifconfig -u -l )" = "lo0" ] 227 | then 228 | echo 'NOPE: Network is down.' 229 | exit 0 230 | fi 231 | 232 | echo -e "${COL1}// Print Network Interfaces with netstat(1)${COLe}" 233 | echo -e "# ${COL2}netstat -Win -f inet${COLe}" 234 | netstat -Win -f inet | grep --color -C 256 -E "${IP_REGEX}" 235 | echo 236 | 237 | echo -e "${COL1}// Print Network Interfaces with ifconfig(8)${COLe}" 238 | echo -e "# ${COL2}ifconfig -u -f inet:cidr,inet6:cidr${COLe}" 239 | ifconfig -u -f inet:cidr,inet6:cidr | grep --color -C 256 -E "${IP_REGEX}" 240 | echo 241 | 242 | echo -e "${COL1}// Print Default Gateway with route(8)${COLe}" 243 | echo -e "# ${COL2}route -n show default${COLe}" 244 | echo "${ROUTE}" | grep --color -C 256 -E "${IP_REGEX}" 245 | echo 246 | 247 | if [ "${ROUTE}" != "" ] 248 | then 249 | return 250 | fi 251 | 252 | echo -e "${COL1}// ping(8) GW/Default Gateway${COLe}" 253 | echo -e "# ${COL2}ping -q -c 1 -t 3 -s 1 ${DGW}${COLe}" 254 | ping -q -c 1 -t 3 -s 1 ${DGW} | sed 2,3d | grep --color -C 256 -E "${IP_REGEX}" 255 | echo 256 | 257 | echo -e "${COL1}// ping(8) DNS/Domain Name Server${COLe}" 258 | echo -e "# ${COL2}ping -q -c 1 -t 3 -s 1 ${DNS}${COLe}" 259 | ping -q -c 1 -t 3 -s 1 ${DNS} | sed 2,3d | grep --color -C 256 -E "${IP_REGEX}" 260 | echo 261 | 262 | echo -e "${COL1}// Check DNS Resolution with ping(8)${COLe}" 263 | echo -e "# ${COL2}ping -q -c 1 -t 3 -s 1 freebsd.org${COLe}" 264 | ping -q -c 1 -t 3 -s 1 freebsd.org | sed 2,3d | grep --color -C 256 -E "${IP_REGEX}" 265 | echo 266 | 267 | } 268 | 269 | # network_reset() ------------------------------------------------------------- 270 | __network_reset() { 271 | echo '__network_reset()' 272 | 273 | __net_shares_umount & 274 | 275 | #DOAS# permit nopass :network as root cmd killall args -9 wpa_supplicant 276 | #SUDO# %network ALL = NOPASSWD: /usr/bin/killall -9 wpa_supplicant 277 | ${CMD} killall -9 wpa_supplicant 1> /dev/null 2> /dev/null 278 | echo ${CMD} killall -9 wpa_supplicant 279 | 280 | #DOAS# permit nopass :network as root cmd killall args -9 ppp 281 | #SUDO# %network ALL = NOPASSWD: /usr/bin/killall -9 ppp 282 | ${CMD} killall -9 ppp 1> /dev/null 2> /dev/null 283 | echo ${CMD} killall -9 ppp 284 | 285 | #DOAS# permit nopass :network as root cmd killall args -9 dhclient 286 | #SUDO# %network ALL = NOPASSWD: /usr/bin/killall -9 dhclient 287 | ${CMD} killall -9 dhclient 1> /dev/null 2> /dev/null 288 | echo ${CMD} killall -9 dhclient 289 | 290 | #DOAS# permit nopass :network as root cmd ifconfig 291 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 292 | ${CMD} ifconfig ${LAN_IF} down 1> /dev/null 2> /dev/null 293 | echo ${CMD} ifconfig ${LAN_IF} down 294 | 295 | #DOAS# permit nopass :network as root cmd ifconfig 296 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 297 | ${CMD} ifconfig ${WLAN_IF} down 1> /dev/null 2> /dev/null 298 | echo ${CMD} ifconfig ${WLAN_IF} down 299 | 300 | # ${CMD} ifconfig ${WLAN_IF} destroy 2> /dev/null # INSTANT KERNEL PANIC 301 | # echo ${CMD} ifconfig ${WLAN_IF} destroy # INSTANT KERNEL PANIC 302 | # #DOAS# permit nopass :network as root cmd ifconfig # INSTANT KERNEL PANIC 303 | # #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * # INSTANT KERNEL PANIC 304 | 305 | if [ "${UNBOUND}" != "1" ] 306 | then 307 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 308 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 309 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 310 | echo "echo | ${CMD} tee /etc/resolv.conf" 311 | fi 312 | 313 | #DOAS# permit nopass :network as root cmd /etc/rc.d/netif args onerestart 314 | #SUDO# %network ALL = NOPASSWD: /etc/rc.d/netif onerestart 315 | ${CMD} /etc/rc.d/netif restart 1> /dev/null 2> /dev/null 316 | echo ${CMD} /etc/rc.d/netif restart 317 | 318 | #DOAS# permit nopass :network as root cmd /etc/rc.d/routing args onerestart 319 | #SUDO# %network ALL = NOPASSWD: /etc/rc.d/routing onerestart 320 | ${CMD} /etc/rc.d/routing restart 1> /dev/null 2> /dev/null 321 | echo ${CMD} /etc/rc.d/routing restart 322 | } 323 | 324 | # wwan_check() ---------------------------------------------------------------- 325 | __wwan_check() { # 1=PROFILE 326 | echo 'wwan_check()' 327 | 328 | #DOAS# permit nopass :network as root cmd /bin/cat args /etc/ppp/ppp.conf 329 | #SUDO# %network ALL = NOPASSWD: /bin/cat /etc/ppp/ppp.conf 330 | if ! ${CMD} cat /etc/ppp/ppp.conf | grep -q "^${1}:$" 331 | then 332 | echo "NOPE: WWAN '${1}' profile is absent in '/etc/ppp/ppp.conf' file." 333 | exit 1 334 | fi 335 | } 336 | 337 | # dns_check_gateway() ------------------------------------------------------------- 338 | __dns_check_gateway() { 339 | echo '__dns_check_gateway()' 340 | if [ "${UNBOUND}" != "1" ] 341 | then 342 | if ! grep -q nameserver /etc/resolv.conf 343 | then 344 | "${0}" dns gw 345 | fi 346 | fi 347 | } 348 | 349 | # dns_check() ------------------------------------------------------------- 350 | __dns_check() { 351 | echo '__dns_check()' 352 | if [ "${UNBOUND}" != "1" ] 353 | then 354 | local DNS=$( awk '/^nameserver/ {print $2; exit}' /etc/resolv.conf ) 355 | if [ "${DNS}" = "0.0.0.0" ] 356 | then 357 | "${0}" dns 1.1.1.1 358 | fi 359 | fi 360 | } 361 | 362 | # squid_restart() ------------------------------------------------------------- 363 | __squid_restart() { 364 | if pgrep squid 1> /dev/null 2> /dev/null 365 | then 366 | return 0 367 | fi 368 | echo '__squid_restart()' 369 | #DOAS# permit nopass :network as root cmd /usr/sbin/service args squid onerestart 370 | #SUDO# %network ALL = NOPASSWD: /usr/sbin/service squid onerestart 371 | ${CMD} service squid onerestart 1> /dev/null 2> /dev/null 372 | echo ${CMD} service squid onerestart 373 | 374 | } 375 | 376 | # usage() --------------------------------------------------------------------- 377 | __usage() { 378 | echo "USAGE:" 379 | echo " ${NAME} TYPE [OPTIONS]" 380 | echo 381 | echo "TYPES:" 382 | echo " lan" 383 | echo " wlan" 384 | echo " wwan" 385 | echo " dns" 386 | echo " status" 387 | echo 388 | echo "OPTIONS:" 389 | echo " scan" 390 | echo " start" 391 | echo " start SSID|PROFILE" 392 | echo " stop" 393 | echo " example" 394 | echo 395 | echo "EXAMPLES:" 396 | echo " ${NAME} lan start" 397 | echo " ${NAME} lan start IP.IP.IP.IP/MASK" 398 | echo " ${NAME} lan start IP.IP.IP.IP/MASK GW.GW.GW.GW" 399 | echo " ${NAME} lan restart" 400 | echo " ${NAME} wlan scan" 401 | echo " ${NAME} wlan start" 402 | echo " ${NAME} wlan start HOME-NETWORK-SSID" 403 | echo " ${NAME} wlan restart" 404 | echo " ${NAME} wwan example" 405 | echo " ${NAME} dns onic" 406 | echo " ${NAME} dns udns" 407 | echo " ${NAME} dns nextdns" 408 | echo " ${NAME} dns cloudflare" 409 | echo " ${NAME} dns ibm" 410 | echo " ${NAME} dns random" 411 | echo " ${NAME} dns IP.IP.IP.IP" 412 | echo " ${NAME} doas" 413 | echo " ${NAME} sudo" 414 | echo " ${NAME} status" 415 | echo 416 | exit 1 417 | } 418 | 419 | # usage_lan() ----------------------------------------------------------------- 420 | __usage_lan() { 421 | echo "USAGE:" 422 | echo " ${NAME} lan [OPTIONS]" 423 | echo 424 | echo "EXAMPLES:" 425 | echo " ${NAME} lan start" 426 | echo " ${NAME} lan start IP.IP.IP.IP/MASK" 427 | echo " ${NAME} lan start IP.IP.IP.IP/MASK GW.GW.GW.GW" 428 | echo " ${NAME} lan example" 429 | echo " ${NAME} status" 430 | echo " ${NAME} stop" 431 | echo 432 | echo "CONFIG:" 433 | echo " /etc/rc.conf" 434 | echo 435 | echo "EXAMPLE CONFIG:" 436 | echo " \$ cat /etc/rc.conf" 437 | echo " ifconfig_em0=\"DHCP\"" 438 | echo 439 | exit 1 440 | } 441 | 442 | # usage_wlan() ---------------------------------------------------------------- 443 | __usage_wlan() { 444 | echo "USAGE:" 445 | echo " ${NAME} wlan [OPTIONS]" 446 | echo 447 | echo "EXAMPLES:" 448 | echo " ${NAME} wlan scan" 449 | echo " ${NAME} wlan start" 450 | echo " ${NAME} wlan start NETWORK" 451 | echo " ${NAME} wlan start NETWORK 192.168.0.100/24 192.168.0.1" 452 | echo " ${NAME} wlan example" 453 | echo " ${NAME} status" 454 | echo " ${NAME} stop" 455 | echo 456 | echo "CONFIG:" 457 | echo " /etc/wpa_supplicant.conf" 458 | echo 459 | echo "EXAMPLE CONFIG:" 460 | echo 461 | echo "\$ cat /etc/wpa_supplicant.conf" 462 | echo 463 | echo " network={" 464 | echo " key_mgmt=NONE" 465 | echo " priority=0" 466 | echo " }" 467 | echo 468 | echo " network={" 469 | echo " ssid=\"network\"" 470 | echo " psk=\"PASSWORD\"" 471 | echo " }" 472 | echo 473 | echo " network={" 474 | echo " ssid=\"C001P\"" 475 | echo " scan_ssid=1" 476 | echo " key_mgmt=WPA-EAP" 477 | echo " identity=\"1234\"" 478 | echo " password=\"PASSWORD\"" 479 | echo " eap=PEAP" 480 | echo " phase1=\"peaplabel=0\"" 481 | echo " phase2=\"auth=MSCHAPV2\"" 482 | echo " }" 483 | echo 484 | exit 1 485 | } 486 | 487 | # usage_wwan() ---------------------------------------------------------------- 488 | __usage_wwan() { 489 | echo "USAGE:" 490 | echo " ${NAME} wwan [OPTIONS]" 491 | echo 492 | echo "EXAMPLES:" 493 | echo " ${NAME} wwan start" 494 | echo " ${NAME} wwan start profile" 495 | echo " ${NAME} wwan example" 496 | echo " ${NAME} status" 497 | echo " ${NAME} stop" 498 | echo 499 | echo "CONFIG:" 500 | echo " /etc/ppp/ppp" 501 | echo 502 | echo "EXAMPLE CONFIG:" 503 | echo 504 | echo "\$ cat /etc/ppp/ppp" 505 | echo 506 | echo "default:" 507 | echo " set log Phase Chat LCP IPCP CCP tun command" 508 | echo 509 | echo "${WWAN_PROFILE}:" 510 | echo ' set device /dev/cuaU0' 511 | echo ' set speed 921600' 512 | echo ' set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \' 513 | echo ' \"\" AT OK-AT-OK \' 514 | echo ' AT+CFUN=1 OK \' 515 | echo ' AT+COPS=0 OK \' 516 | echo ' AT+CGDCONT=1,\\\"IP\\\",\\\"www.plusgsm.pl\\\" OK \' 517 | echo ' \dATDT\\T TIMEOUT 80 CONNECT"' 518 | echo ' set logout "ABORT BUSY ABORT ERROR TIMEOUT 60 \"\" +++ATH O ATH OK"' 519 | echo ' set phone *99\#' 520 | echo ' set timeout 300' 521 | echo ' set ifaddr 10.64.32.16/0 10.64.32.16/0 255.255.255.255 0.0.0.0' 522 | echo ' add default HISADDR' 523 | echo ' enable dns' 524 | echo ' disable ipv6cp' 525 | echo 526 | exit 1 527 | } 528 | 529 | # usage_dns() ----------------------------------------------------------------- 530 | __usage_dns() { 531 | echo "USAGE:" 532 | echo " ${NAME} dns [OPTIONS]" 533 | echo 534 | echo "EXAMPLES:" 535 | echo " ${NAME} dns onic" 536 | echo " ${NAME} dns udns" 537 | echo " ${NAME} dns nextdns" 538 | echo " ${NAME} dns cloudflare" 539 | echo " ${NAME} dns ibm" 540 | echo " ${NAME} dns random" 541 | echo " ${NAME} dns IP.IP.IP.IP" 542 | echo 543 | echo "CONFIG:" 544 | echo " /etc/resolv.conf" 545 | echo 546 | echo "EXAMPLE CONFIG:" 547 | echo " \$ cat resolv.conf" 548 | echo " nameserver 87.98.175.85" 549 | echo " nameserver 193.183.98.66" 550 | echo 551 | cat << __EOF 552 | NOLOGGING DNS SERVERS: 553 | 554 | OpenNIC https://servers.opennicproject.org/ 555 | 87.98.175.85 556 | 193.183.98.66 557 | 558 | UncensoredDNS https://blog.uncensoreddns.org/ 559 | 91.239.100.100 (anycast) 560 | 89.233.43.71 (unicast) 561 | 562 | Swiss Privacy Foundation http://privacyfoundation.ch/de/service/server.html 563 | 185.95.218.42 564 | 185.95.218.43 565 | 566 | CCC http://www.ccc.de/censorship/dns-howto 567 | 85.214.20.141 568 | 204.152.184.76 569 | 194.150.168.168 570 | 213.73.91.35 571 | 572 | Comodo Secure DNS https://www.comodo.com/secure-dns/ 573 | 8.26.56.26 574 | 8.20.247.20 575 | 576 | DNS Watch https://dns.watch/index 577 | 84.200.69.80 578 | 84.200.70.40 579 | 580 | Fool DNS http://www.fooldns.com/fooldns-community/ 581 | 87.118.111.215 582 | 213.187.11.62 583 | 584 | Free DNS http://freedns.zone/ 585 | 37.235.1.174 586 | 37.235.1.177 587 | 588 | __EOF 589 | exit 1 590 | } 591 | 592 | 593 | 594 | if [ "${UNBOUND}" != "1" ] 595 | then 596 | echo '__unbound_enabled_DNS_changes_disabled()' 597 | fi 598 | 599 | case ${1} in 600 | 601 | # LAN ======================================================================= 602 | (lan) # LAN BEGIN 603 | case ${2} in 604 | (start|restart) # LAN (RE)START 605 | 606 | __network_reset 607 | 608 | if [ "${LAN_RANDOM_MAC}" = "1" ] 609 | then 610 | #DOAS# permit nopass :network as root cmd ifconfig 611 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 612 | echo '__random_mac()' 613 | MAC=$( __random_mac ) 614 | ${CMD} ifconfig ${LAN_IF} ether ${MAC} 1> /dev/null 2> /dev/null 615 | echo ${CMD} ifconfig ${LAN_IF} ether ${MAC} 616 | unset MAC 617 | fi 618 | 619 | if [ "${LAN_MAC_FROM_WLAN}" = "1" ] 620 | then 621 | #DOAS# permit nopass :network as root cmd ifconfig 622 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 623 | echo '__lan_mac_from_wlan()' 624 | MAC=$( ifconfig wlan0 | awk '/ether/ {print $2}' ) 625 | ${CMD} ifconfig ${LAN_IF} ether ${MAC} 1> /dev/null 2> /dev/null 626 | echo ${CMD} ifconfig ${LAN_IF} ether ${MAC} 627 | unset MAC 628 | fi 629 | 630 | #DOAS# permit nopass :network as root cmd ifconfig 631 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 632 | ${CMD} ifconfig ${LAN_IF} up 1> /dev/null 2> /dev/null 633 | echo ${CMD} ifconfig ${LAN_IF} up 634 | 635 | # IP ADDRESS AND GATEWAY SPECIFIED 636 | if [ ${3} ] 637 | then # STATIC 638 | 639 | IP=${3} 640 | if ! echo ${IP} | grep -E "${IP_REGEX}" 1> /dev/null 2> /dev/null 641 | then 642 | echo "NOPE: The '${IP}' is not a valid IP address." 643 | exit 1 644 | fi 645 | 646 | #DOAS# permit nopass :network as root cmd ifconfig 647 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 648 | ${CMD} ifconfig ${LAN_IF} inet ${IP} 1> /dev/null 2> /dev/null 649 | echo ${CMD} ifconfig ${LAN_IF} inet ${IP} 650 | 651 | if [ ${4} ] 652 | then # GATEWAY 653 | 654 | if ! echo ${4} | grep -E "${IP_REGEX}" 1> /dev/null 2> /dev/null 655 | then 656 | echo "NOPE: The '${4}' is not a valid IP address." 657 | exit 1 658 | fi 659 | 660 | #DOAS# permit nopass :network as root cmd route 661 | #SUDO# %network ALL = NOPASSWD: /sbin/route * 662 | ${CMD} route add default ${4} 1> /dev/null 2> /dev/null 663 | echo ${CMD} route add default ${4} 664 | 665 | #DOAS# permit nopass :network as root cmd route 666 | #SUDO# %network ALL = NOPASSWD: /sbin/route * 667 | ${CMD} route change default ${4} 1> /dev/null 2> /dev/null 668 | echo ${CMD} route change default ${4} 669 | 670 | fi 671 | 672 | else # DHCP 673 | 674 | #DOAS# permit nopass :network as root cmd dhclient 675 | #SUDO# %network ALL = NOPASSWD: /sbin/dhclient * 676 | ${CMD} dhclient -q ${LAN_IF} 1> /dev/null 2> /dev/null 677 | echo ${CMD} dhclient -q ${LAN_IF} 678 | 679 | fi 680 | 681 | __dns_check_gateway 682 | 683 | __dns_check 684 | 685 | __bhyve_networking 686 | 687 | __squid_restart 688 | 689 | ;; 690 | 691 | (example) # LAN USAGE 692 | 693 | __usage_lan 694 | 695 | ;; 696 | 697 | (*) # USAGE 698 | 699 | __usage 700 | 701 | ;; 702 | 703 | esac # LAN END 704 | ;; 705 | 706 | # WLAN ====================================================================== 707 | (wlan) # WLAN BEGIN 708 | case ${2} in 709 | (scan) 710 | 711 | #DOAS# permit nopass :network as root cmd ifconfig 712 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 713 | ${CMD} ifconfig ${WLAN_IF} create wlandev ${WLAN_PH} 1> /dev/null 2> /dev/null 714 | echo ${CMD} ifconfig ${WLAN_IF} create wlandev ${WLAN_PH} 715 | 716 | #DOAS# permit nopass :network as root cmd ifconfig 717 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 718 | ${CMD} ifconfig ${WLAN_IF} country ${WLAN_COUNTRY} regdomain ${WLAN_REGDOMAIN} 1> /dev/null 2> /dev/null 719 | echo ${CMD} ifconfig ${WLAN_IF} country ${WLAN_COUNTRY} regdomain ${WLAN_REGDOMAIN} 720 | 721 | #DOAS# permit nopass :network as root cmd ifconfig 722 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 723 | ${CMD} ifconfig ${WLAN_IF} up 1> /dev/null 2> /dev/null 724 | echo ${CMD} ifconfig ${WLAN_IF} up 725 | 726 | #DOAS# permit nopass :network as root cmd ifconfig 727 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 728 | ifconfig ${WLAN_IF} scan 1> /dev/null 2> /dev/null & 729 | echo ifconfig ${WLAN_IF} scan 730 | 731 | sleep 3 732 | 733 | #DOAS# permit nopass :network as root cmd ifconfig 734 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 735 | ifconfig ${WLAN_IF} list scan 736 | echo ifconfig ${WLAN_IF} list scan 737 | 738 | ;; 739 | 740 | (start) # WLAN (RE)START 741 | 742 | __network_reset 743 | 744 | if ! ifconfig ${WLAN_IF} 1> /dev/null 2> /dev/null 745 | then 746 | #DOAS# permit nopass :network as root cmd ifconfig 747 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 748 | ${CMD} ifconfig ${WLAN_IF} create wlandev ${WLAN_PH} 1> /dev/null 2> /dev/null 749 | echo ${CMD} ifconfig ${WLAN_IF} create wlandev ${WLAN_PH} 750 | fi 751 | 752 | if [ "${WLAN_RANDOM_MAC}" = "1" ] 753 | then 754 | #DOAS# permit nopass :network as root cmd ifconfig 755 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 756 | echo '__random_mac()' 757 | MAC=$( __random_mac ) 758 | ${CMD} ifconfig ${WLAN_IF} ether ${MAC} 1> /dev/null 2> /dev/null 759 | echo ${CMD} ifconfig ${WLAN_IF} ether ${MAC} 760 | MAC=0 761 | fi 762 | 763 | #DOAS# permit nopass :network as root cmd ifconfig 764 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 765 | ${CMD} ifconfig ${WLAN_IF} up 1> /dev/null 2> /dev/null 766 | echo ${CMD} ifconfig ${WLAN_IF} up 767 | 768 | #DOAS# permit nopass :network as root cmd ifconfig 769 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 770 | ${CMD} ifconfig ${WLAN_IF} scan 1> /dev/null 2> /dev/null & 771 | echo ${CMD} ifconfig ${WLAN_IF} scan 772 | 773 | #DOAS# permit nopass :network as root cmd ifconfig 774 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 775 | ${CMD} ifconfig ${WLAN_IF} ssid - 1> /dev/null 2> /dev/null 776 | echo ${CMD} ifconfig ${WLAN_IF} ssid - 777 | 778 | # WIFI NETWORK/SSID SPECIFIED AS ARGUMENT 779 | if [ "${3}" ] 780 | then 781 | 782 | #DOAS# permit nopass :network as root cmd ifconfig 783 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 784 | ${CMD} ifconfig ${WLAN_IF} ssid "${3}" 1> /dev/null 2> /dev/null 785 | echo ${CMD} ifconfig ${WLAN_IF} ssid "${3}" 786 | 787 | fi 788 | 789 | #DOAS# permit nopass :network as root cmd wpa_supplicant 790 | #SUDO# %network ALL = NOPASSWD: /usr/sbin/wpa_supplicant * 791 | ${CMD} wpa_supplicant -i ${WLAN_IF} -c /etc/wpa_supplicant.conf -s -B 1> /dev/null 2> /dev/null 792 | echo ${CMD} wpa_supplicant -i ${WLAN_IF} -c /etc/wpa_supplicant.conf -s -B 793 | 794 | __wlan_wait_associated 795 | 796 | # IP ADDRESS AND GATEWAY SPECIFIED AS ARGUMENTS 797 | if [ "${4}" -a "${5}" ] 798 | then 799 | 800 | #DOAS# permit nopass :network as root cmd ifconfig 801 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 802 | ${CMD} ifconfig ${WLAN_IF} inet ${4} up 803 | echo ${CMD} ifconfig ${WLAN_IF} inet ${4} up 804 | 805 | #DOAS# permit nopass :network as root cmd route 806 | #SUDO# %network ALL = NOPASSWD: /sbin/route * 807 | ${CMD} route add default ${5} 808 | echo ${CMD} route add default ${5} 809 | 810 | #DOAS# permit nopass :network as root cmd route 811 | #SUDO# %network ALL = NOPASSWD: /sbin/route * 812 | ${CMD} route change default ${5} 813 | echo ${CMD} route change default ${5} 814 | 815 | else 816 | # JUST USE dhclient(8) TO SET IP AND GATEWAY 817 | 818 | #DOAS# permit nopass :network as root cmd dhclient 819 | #SUDO# %network ALL = NOPASSWD: /sbin/dhclient * 820 | ${CMD} dhclient -q ${WLAN_IF} 1> /dev/null 2> /dev/null 821 | echo ${CMD} dhclient -q ${WLAN_IF} 822 | 823 | fi 824 | 825 | __dns_check_gateway 826 | 827 | __dns_check 828 | 829 | __squid_restart 830 | 831 | #DOAS# permit nopass :network as root cmd ifconfig 832 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 833 | ${CMD} ifconfig ${WLAN_IF} powersave 1> /dev/null 2> /dev/null 834 | echo ${CMD} ifconfig ${WLAN_IF} powersave 835 | 836 | __bhyve_networking 837 | 838 | ;; 839 | 840 | (restart) # WLAN RESTART 841 | 842 | #DOAS# permit nopass :network as root cmd killall args -9 dhclient 843 | #SUDO# %network ALL = NOPASSWD: /usr/bin/killall -9 dhclient 844 | ${CMD} killall -9 dhclient 1> /dev/null 2> /dev/null 845 | echo ${CMD} killall -9 dhclient 846 | 847 | #DOAS# permit nopass :network as root cmd killall args -9 wpa_supplicant 848 | #SUDO# %network ALL = NOPASSWD: /usr/bin/killall -9 wpa_supplicant 849 | ${CMD} killall -9 wpa_supplicant 1> /dev/null 2> /dev/null 850 | echo ${CMD} killall -9 wpa_supplicant 851 | 852 | #DOAS# permit nopass :network as root cmd wpa_supplicant 853 | #SUDO# %network ALL = NOPASSWD: /usr/sbin/wpa_supplicant * 854 | ${CMD} wpa_supplicant -i ${WLAN_IF} -c /etc/wpa_supplicant.conf -s -B 1> /dev/null 2> /dev/null 855 | echo ${CMD} wpa_supplicant -i ${WLAN_IF} -c /etc/wpa_supplicant.conf -s -B 856 | 857 | __wlan_wait_associated 858 | 859 | #DOAS# permit nopass :network as root cmd dhclient 860 | #SUDO# %network ALL = NOPASSWD: /sbin/dhclient * 861 | ${CMD} dhclient -q ${WLAN_IF} 1> /dev/null 2> /dev/null 862 | echo ${CMD} dhclient -q ${WLAN_IF} 863 | 864 | #DOAS# permit nopass :network as root cmd ifconfig 865 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 866 | ${CMD} ifconfig ${WLAN_IF} powersave 1> /dev/null 2> /dev/null 867 | echo ${CMD} ifconfig ${WLAN_IF} powersave 868 | 869 | __bhyve_networking 870 | 871 | ;; 872 | 873 | (example) # WLAN USAGE 874 | 875 | __usage_wlan 876 | 877 | ;; 878 | 879 | (*) # USAGE 880 | 881 | __usage 882 | 883 | ;; 884 | 885 | esac # WLAN END 886 | ;; 887 | 888 | # WWAN ====================================================================== 889 | (wwan) # WWAN BEGIN 890 | case ${2} in 891 | (start|restart) # WWAN (RE)START 892 | 893 | if [ ${3} ] 894 | then 895 | __wwan_check "${3}" 896 | WWAN_PROFILE="${3}" 897 | else 898 | __wwan_check "${WWAN_PROFILE}" 899 | fi 900 | 901 | __network_reset 902 | 903 | #DOAS# permit nopass :network as root cmd ppp 904 | #SUDO# %network ALL = NOPASSWD: /usr/sbin/ppp * 905 | ${CMD} ppp -ddial ${WWAN_PROFILE} 1> /dev/null 2> /dev/null 906 | echo ${CMD} ppp -ddial ${WWAN_PROFILE} 907 | 908 | __dns_check 909 | 910 | __bhyve_networking 911 | 912 | __squid_restart 913 | 914 | ;; 915 | 916 | (example) # WWAN USAGE 917 | 918 | __usage_wwan 919 | 920 | ;; 921 | 922 | (*) # USAGE 923 | 924 | __usage 925 | 926 | ;; 927 | 928 | esac 929 | ;; 930 | 931 | # DNS ======================================================================= 932 | (dns) # DNS BEGIN 933 | case ${2} in 934 | (gw) # DNS SAME AS GATEWAY 935 | 936 | if [ "${UNBOUND}" != "1" ] 937 | then 938 | 939 | GW=$( route -n -4 -v get default 2> /dev/null | awk '/gateway:/ {print $NF}' ) 940 | 941 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 942 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 943 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 2> /dev/null 944 | echo "echo | ${CMD} tee /etc/resolv.conf" 945 | 946 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 947 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 948 | echo nameserver ${GW} | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 2> /dev/null 949 | echo "echo nameserver ${GW} | ${CMD} tee -a /etc/resolv.conf" 950 | 951 | fi 952 | 953 | ;; 954 | 955 | (onic) # DNS OpenNIC 956 | 957 | if [ "${UNBOUND}" != "1" ] 958 | then 959 | 960 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 961 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 962 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 2> /dev/null 963 | echo "echo | ${CMD} tee /etc/resolv.conf" 964 | 965 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 966 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 967 | echo nameserver 87.98.175.85 | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 2> /dev/null 968 | echo "echo nameserver 87.98.175.85 | ${CMD} tee -a /etc/resolv.conf" 969 | 970 | fi 971 | 972 | ;; 973 | 974 | (udns) # DNS UncensoredDNS 975 | 976 | if [ "${UNBOUND}" != "1" ] 977 | then 978 | 979 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 980 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 981 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 2> /dev/null 982 | echo "echo | ${CMD} tee /etc/resolv.conf" 983 | 984 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 985 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 986 | echo nameserver 91.239.100.100 | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 2> /dev/null 987 | echo "echo nameserver 91.239.100.100 | ${CMD} tee -a /etc/resolv.conf" 988 | 989 | fi 990 | 991 | ;; 992 | 993 | (cloudflare) # DNS CloudFlare 994 | 995 | if [ "${UNBOUND}" != "1" ] 996 | then 997 | 998 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 999 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 1000 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 2> /dev/null 1001 | echo "echo | ${CMD} tee /etc/resolv.conf" 1002 | 1003 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 1004 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 1005 | echo nameserver 1.1.1.1 | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 2> /dev/null 1006 | echo "echo nameserver 1.1.1.1 | ${CMD} tee -a /etc/resolv.conf" 1007 | 1008 | fi 1009 | 1010 | ;; 1011 | 1012 | (ibm) # DNS IBM 1013 | 1014 | if [ "${UNBOUND}" != "1" ] 1015 | then 1016 | 1017 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 1018 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 1019 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 2> /dev/null 1020 | echo "echo | ${CMD} tee /etc/resolv.conf" 1021 | 1022 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 1023 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 1024 | echo nameserver 9.9.9.9 | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 2> /dev/null 1025 | echo "echo nameserver 9.9.9.9 | ${CMD} tee -a /etc/resolv.conf" 1026 | 1027 | fi 1028 | 1029 | ;; 1030 | 1031 | (nextdns) # DNS NextDNS 1032 | 1033 | if [ "${UNBOUND}" != "1" ] 1034 | then 1035 | 1036 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 1037 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 1038 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 1039 | echo "echo | ${CMD} tee /etc/resolv.conf" 1040 | 1041 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 1042 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 1043 | echo nameserver 45.90.30.114 | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 2> /dev/null 1044 | echo "echo nameserver 45.90.30.114 | ${CMD} tee -a /etc/resolv.conf" 1045 | 1046 | fi 1047 | 1048 | ;; 1049 | 1050 | (random) 1051 | 1052 | if [ "${UNBOUND}" != "1" ] 1053 | then 1054 | 1055 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 1056 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 1057 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 2> /dev/null 1058 | echo "echo | ${CMD} tee /etc/resolv.conf" 1059 | 1060 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 1061 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 1062 | cat << __EOF | sort -R | head -1 | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 2> /dev/null 1063 | nameserver 1.1.1.1 1064 | nameserver 9.9.9.9 1065 | nameserver 87.98.175.85 1066 | nameserver 193.183.98.66 1067 | nameserver 91.239.100.100 1068 | nameserver 89.233.43.71 1069 | nameserver 185.95.218.42 1070 | nameserver 185.95.218.43 1071 | nameserver 85.214.20.141 1072 | nameserver 204.152.184.76 1073 | nameserver 194.150.168.168 1074 | nameserver 213.73.91.35 1075 | nameserver 8.26.56.26 1076 | nameserver 8.20.247.20 1077 | nameserver 84.200.69.80 1078 | nameserver 84.200.70.40 1079 | nameserver 87.118.111.215 1080 | nameserver 213.187.11.62 1081 | nameserver 37.235.1.174 1082 | nameserver 37.235.1.177 1083 | nameserver 45.90.28.114 1084 | nameserver 45.90.30.114 1085 | __EOF 1086 | echo "cat << __EOF | sort -R | head -1 | ${CMD} tee -a /etc/resolv.conf" 1087 | 1088 | fi 1089 | 1090 | ;; 1091 | 1092 | (example) 1093 | 1094 | __usage_dns 1095 | 1096 | ;; 1097 | 1098 | (*) 1099 | 1100 | if [ "${UNBOUND}" != "1" ] 1101 | then 1102 | 1103 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 1104 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 1105 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 2> /dev/null 1106 | echo "echo | ${CMD} tee /etc/resolv.conf" 1107 | 1108 | if ! echo ${2} | grep -E "${IP_REGEX}" 1> /dev/null 2> /dev/null 1109 | then 1110 | echo "NOPE: The '${2}' is not a valid IP address." 1111 | exit 1 1112 | fi 1113 | 1114 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 1115 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 1116 | echo nameserver ${2} | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 2> /dev/null 1117 | echo "echo nameserver ${2} | ${CMD} tee -a /etc/resolv.conf" 1118 | 1119 | fi 1120 | 1121 | ;; 1122 | 1123 | esac 1124 | ;; 1125 | 1126 | # STOP ====================================================================== 1127 | (stop) 1128 | 1129 | __network_reset 1130 | 1131 | ;; 1132 | 1133 | # STATUS ==================================================================== 1134 | (status) 1135 | 1136 | __network_status 1137 | 1138 | ;; 1139 | 1140 | # DOAS ====================================================================== 1141 | (doas) 1142 | echo " # pw groupmod network -m YOURUSERNAME" 1143 | echo " # cat /usr/local/etc/doas.conf" 1144 | grep -E "^[\ \n\t]+#DOAS#" "${0}" | awk '{$1=" "}1' | sort -u | sed 1d 1145 | ;; 1146 | 1147 | # SUDO ====================================================================== 1148 | (sudo) 1149 | echo " # pw groupmod network -m YOURUSERNAME" 1150 | echo " # cat /usr/local/etc/sudoers" 1151 | grep -E "^[\ \n\t]+#SUDO#" "${0}" | awk '{$1=" "}1' | sort -u | sed 1d 1152 | ;; 1153 | 1154 | # USAGE ===================================================================== 1155 | (*) # USAGE 1156 | __usage 1157 | ;; 1158 | 1159 | esac 1160 | -------------------------------------------------------------------------------- /network.sh.unbound.sh: -------------------------------------------------------------------------------- 1 | #! /bin/sh 2 | 3 | # Copyright (c) 2020 Slawomir Wojciech Wojtczak (vermaden) 4 | # All rights reserved. 5 | # 6 | # THIS SOFTWARE USES FREEBSD LICENSE (ALSO KNOWN AS 2-CLAUSE BSD LICENSE) 7 | # https://www.freebsd.org/copyright/freebsd-license.html 8 | # 9 | # Redistribution and use in source and binary forms, with or without 10 | # modification, are permitted provided that following conditions are met: 11 | # 1. Redistributions of source code must retain the above copyright 12 | # notice, this list of conditions and the following disclaimer. 13 | # 2. Redistributions in binary form must reproduce the above copyright 14 | # notice, this list of conditions and the following disclaimer in the 15 | # documentation and/or other materials provided with the distribution. 16 | # 17 | # THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS 'AS IS' AND ANY 18 | # EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 | # WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 | # DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY 21 | # DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 | # (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 | # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 | # ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 | # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 | # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 | # 28 | # ------------------------------ 29 | # NETWORK MANAGEMENT network.sh 30 | # ------------------------------ 31 | # vermaden [AT] interia [DOT] pl 32 | # https://vermaden.wordpress.com 33 | 34 | # SETTINGS 35 | UNBOUND=1 36 | LAN_IF=em0 37 | LAN_RANDOM_MAC=0 38 | WLAN_IF=wlan0 39 | WLAN_PH=iwn0 40 | WLAN_RANDOM_MAC=0 41 | WLAN_COUNTRY=PL 42 | WLAN_REGDOMAIN=NONE 43 | WWAN_IF=tun0 44 | WWAN_PROFILE=WWAN 45 | NAME=${0##*/} 46 | NETFS="nfs,smbfs,fusefs.sshfs" 47 | TIMEOUT=16 48 | DELAY=0.5 49 | SUDO_WHICH=0 50 | SUDO=0 51 | DOAS_WHICH=0 52 | DOAS=1 53 | ROOT=0 54 | IP_REGEX='[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' 55 | 56 | # CHECK doas(8) WITH which(1) 57 | if which doas 1> /dev/null 2> /dev/null 58 | then 59 | DOAS_WHICH=1 60 | else 61 | DOAS_WHICH=0 62 | fi 63 | 64 | # CHECK sudo(8) WITH which(1) 65 | if which sudo 1> /dev/null 2> /dev/null 66 | then 67 | SUDO_WHICH=1 68 | else 69 | SUDO_WHICH=0 70 | fi 71 | 72 | # CHECK USER WITH whoami(1) 73 | if [ "$( whoami )" = "root" ] 74 | then 75 | ROOT=1 76 | fi 77 | 78 | # CHOOSE ONE FROM doas(8) AND sudo(8) 79 | if [ ${DOAS_WHICH} -eq 1 -o ${SUDO_WHICH} -eq 1 ] 80 | then 81 | if [ ${DOAS} -eq 0 -a ${SUDO} -eq 1 -a ${SUDO_WHICH} -eq 1 ] 82 | then 83 | CMD=sudo 84 | elif [ ${DOAS} -eq 1 -a ${SUDO} -eq 0 -a ${DOAS_WHICH} -eq 1 ] 85 | then 86 | CMD=doas 87 | elif [ ${DOAS} -eq 1 -a ${SUDO} -eq 1 -a ${DOAS_WHICH} -eq 1 ] 88 | then 89 | CMD=doas 90 | fi 91 | elif [ ${ROOT} -eq 1 ] 92 | then 93 | CMD='' 94 | else 95 | echo "NOPE: This script needs doas(1) or sudo(1) to work properly." 96 | exit 1 97 | fi 98 | 99 | unset SUDO_WHICH 100 | unset DOAS_WHICH 101 | unset ROOT 102 | 103 | # random_mac() ---------------------------------------------------------------- 104 | __random_mac() { # 1=INTERFACE 105 | # DO NOT PUT echo '__random_mac()' HERE 106 | 107 | MAC_OUI=$( ifconfig ${1} | awk '/hwaddr/ {print $2}' | awk -F ':' '{print $1 ":" $2 ":" $3}' ) 108 | MAC_RAN=$( env LC_ALL=C tr -c -d '0-9a-f' < /dev/random | head -c 6 | sed -e 's|\(..\)|\1:|g' -e 's|:$||' ) 109 | echo ${MAC_OUI}:${MAC_RAN} 110 | } 111 | 112 | # wlan_wait_associated() ------------------------------------------------------ 113 | __wlan_wait_associated() { 114 | echo '__wlan_wait_associated()' 115 | 116 | local COUNT=0 117 | while : 118 | do 119 | local STATUS=$( ifconfig ${WLAN_IF} | awk '/status/ {print $2}' ) 120 | if [ "${STATUS}" = "associated" ] 121 | then 122 | break 123 | fi 124 | local COUNT=$(( ${COUNT} + 1 )) 125 | if [ ${COUNT} -gt ${TIMEOUT} ] 126 | then 127 | echo "NOPE: Could not associate with WLAN network." 128 | __network_reset 129 | exit 1 130 | fi 131 | sleep ${DELAY} 132 | done 133 | } 134 | 135 | # net_shares_umount() --------------------------------------------------------- 136 | __net_shares_umount() { 137 | echo '__net_shares_umount()' 138 | 139 | mount -t ${NETFS} -p \ 140 | | awk '{print $2}' \ 141 | | while read MNT 142 | do 143 | 144 | #DOAS# permit nopass :network as root cmd umount 145 | #SUDO# %network ALL = NOPASSWD: /sbin/umount -f * 146 | ${CMD} umount -f "${MNT}" & 147 | echo ${CMD} umount -f "${MNT}" 148 | 149 | done 150 | } 151 | 152 | # network_status() ------------------------------------------------------------ 153 | __network_status() { 154 | 155 | local COL1='\033[38;05;1m' 156 | local COL2='\033[38;05;2m' 157 | local COL3='\033[38;05;3m' 158 | local COL4='\033[38;05;4m' 159 | local COL5='\033[38;05;5m' 160 | local COLe='\033[0m' 161 | local DNS=$( grep -m 1 nameserver /etc/resolv.conf | awk '{print $NF}' ) 162 | local ROUTE=$( route -n show default 2> /dev/null ) 163 | local DGW=$( echo "${ROUTE}" | awk '/gateway:/ {print $NF}' ) 164 | local GREP_COLOR=34 165 | 166 | if [ "$( ifconfig -u -l )" = "lo0" ] 167 | then 168 | echo 'NOPE: Network is down.' 169 | exit 0 170 | fi 171 | 172 | echo -e "${COL1}// Print Network Interfaces with netstat(1)${COLe}" 173 | echo -e "# ${COL2}netstat -W -i -f inet${COLe}" 174 | netstat -W -i -f inet | grep --color -C 256 -E "${IP_REGEX}" 175 | echo 176 | 177 | echo -e "${COL1}// Print Network Interfaces with ifconfig(8)${COLe}" 178 | echo -e "# ${COL2}ifconfig -u -f inet:cidr,inet6:cidr${COLe}" 179 | ifconfig -u -f inet:cidr,inet6:cidr | grep --color -C 256 -E "${IP_REGEX}" 180 | echo 181 | 182 | echo -e "${COL1}// Print Default Gateway with route(8)${COLe}" 183 | echo -e "# ${COL2}route -n show default${COLe}" 184 | echo "${ROUTE}" | grep --color -C 256 -E "${IP_REGEX}" 185 | echo 186 | 187 | if [ "${ROUTE}" != "" ] 188 | then 189 | return 190 | fi 191 | 192 | echo -e "${COL1}// ping(8) GW/Default Gateway${COLe}" 193 | echo -e "# ${COL2}ping -q -c 1 -t 3 -s 1 ${DGW}${COLe}" 194 | ping -q -c 1 -t 3 -s 1 ${DGW} | sed 2,3d | grep --color -C 256 -E "${IP_REGEX}" 195 | echo 196 | 197 | echo -e "${COL1}// ping(8) DNS/Domain Name Server${COLe}" 198 | echo -e "# ${COL2}ping -q -c 1 -t 3 -s 1 ${DNS}${COLe}" 199 | ping -q -c 1 -t 3 -s 1 ${DNS} | sed 2,3d | grep --color -C 256 -E "${IP_REGEX}" 200 | echo 201 | 202 | echo -e "${COL1}// Check DNS Resolution with ping(8)${COLe}" 203 | echo -e "# ${COL2}ping -q -c 1 -t 3 -s 1 freebsd.org${COLe}" 204 | ping -q -c 1 -t 3 -s 1 freebsd.org | sed 2,3d | grep --color -C 256 -E "${IP_REGEX}" 205 | echo 206 | 207 | } 208 | 209 | # network_reset() ------------------------------------------------------------- 210 | __network_reset() { 211 | echo '__network_reset()' 212 | 213 | __net_shares_umount 214 | 215 | #DOAS# permit nopass :network as root cmd killall args -9 wpa_supplicant 216 | #SUDO# %network ALL = NOPASSWD: /usr/bin/killall -9 wpa_supplicant 217 | ${CMD} killall -9 wpa_supplicant 1> /dev/null 2> /dev/null 218 | echo ${CMD} killall -9 wpa_supplicant 219 | 220 | #DOAS# permit nopass :network as root cmd killall args -9 ppp 221 | #SUDO# %network ALL = NOPASSWD: /usr/bin/killall -9 ppp 222 | ${CMD} killall -9 ppp 1> /dev/null 2> /dev/null 223 | echo ${CMD} killall -9 ppp 224 | 225 | #DOAS# permit nopass :network as root cmd killall args -9 dhclient 226 | #SUDO# %network ALL = NOPASSWD: /usr/bin/killall -9 dhclient 227 | ${CMD} killall -9 dhclient 1> /dev/null 2> /dev/null 228 | echo ${CMD} killall -9 dhclient 229 | 230 | #DOAS# permit nopass :network as root cmd ifconfig 231 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 232 | ${CMD} ifconfig ${LAN_IF} down 233 | echo ${CMD} ifconfig ${LAN_IF} down 234 | 235 | #DOAS# permit nopass :network as root cmd ifconfig 236 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 237 | ${CMD} ifconfig ${WLAN_IF} down 238 | echo ${CMD} ifconfig ${WLAN_IF} down 239 | 240 | # ${CMD} ifconfig ${WLAN_IF} destroy 2> /dev/null # INSTANT KERNEL PANIC 241 | # echo ${CMD} ifconfig ${WLAN_IF} destroy # INSTANT KERNEL PANIC 242 | # #DOAS# permit nopass :network as root cmd ifconfig # INSTANT KERNEL PANIC 243 | # #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * # INSTANT KERNEL PANIC 244 | 245 | if [ "${UNBOUND}" != "1" ] 246 | then 247 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 248 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 249 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 250 | echo "echo | ${CMD} tee /etc/resolv.conf" 251 | fi 252 | 253 | #DOAS# permit nopass :network as root cmd /etc/rc.d/netif args onerestart 254 | #SUDO# %network ALL = NOPASSWD: /etc/rc.d/netif onerestart 255 | ${CMD} /etc/rc.d/netif restart 1> /dev/null 2> /dev/null 256 | echo ${CMD} /etc/rc.d/netif restart 257 | } 258 | 259 | # wwan_check() ---------------------------------------------------------------- 260 | __wwan_check() { # 1=PROFILE 261 | echo 'wwan_check()' 262 | 263 | #DOAS# permit nopass :network as root cmd /bin/cat args /etc/ppp/ppp.conf 264 | #SUDO# %network ALL = NOPASSWD: /bin/cat /etc/ppp/ppp.conf 265 | if ! ${CMD} cat /etc/ppp/ppp.conf | grep -q "^${1}:$" 266 | then 267 | echo "NOPE: WWAN '${1}' profile is absent in '/etc/ppp/ppp.conf' file." 268 | exit 1 269 | fi 270 | } 271 | 272 | # dns_check_gateway() ------------------------------------------------------------- 273 | __dns_check_gateway() { 274 | echo '__dns_check_gateway()' 275 | if [ "${UNBOUND}" != "1" ] 276 | then 277 | if ! grep -q nameserver /etc/resolv.conf 278 | then 279 | "${0}" dns gw 280 | fi 281 | fi 282 | } 283 | 284 | # dns_check() ------------------------------------------------------------- 285 | __dns_check() { 286 | echo '__dns_check()' 287 | if [ "${UNBOUND}" != "1" ] 288 | then 289 | local DNS=$( awk '/^nameserver/ {print $2; exit}' /etc/resolv.conf ) 290 | if [ "${DNS}" = "0.0.0.0" ] 291 | then 292 | "${0}" dns 1.1.1.1 293 | fi 294 | fi 295 | } 296 | 297 | # squid_restart() ------------------------------------------------------------- 298 | __squid_restart() { 299 | echo '__squid_restart()' 300 | if pgrep squid 1> /dev/null 2> /dev/null 301 | then 302 | 303 | #DOAS# permit nopass :network as root cmd /usr/sbin/service args squid onerestart 304 | #SUDO# %network ALL = NOPASSWD: /usr/sbin/service squid onerestart 305 | doas service squid onerestart 1> /dev/null 2> /dev/null 306 | echo '__squid_restart()' 307 | 308 | fi 309 | } 310 | 311 | # usage() --------------------------------------------------------------------- 312 | __usage() { 313 | echo "USAGE:" 314 | echo " ${NAME} TYPE [OPTIONS]" 315 | echo 316 | echo "TYPES:" 317 | echo " lan" 318 | echo " wlan" 319 | echo " wwan" 320 | echo " dns" 321 | echo " status" 322 | echo 323 | echo "OPTIONS:" 324 | echo " scan" 325 | echo " start" 326 | echo " start SSID|PROFILE" 327 | echo " stop" 328 | echo " example" 329 | echo 330 | echo "EXAMPLES:" 331 | echo " ${NAME} lan start" 332 | echo " ${NAME} lan start IP.IP.IP.IP/MASK" 333 | echo " ${NAME} lan start IP.IP.IP.IP/MASK GW.GW.GW.GW" 334 | echo " ${NAME} lan restart" 335 | echo " ${NAME} wlan scan" 336 | echo " ${NAME} wlan start" 337 | echo " ${NAME} wlan start HOME-NETWORK-SSID" 338 | echo " ${NAME} wlan restart" 339 | echo " ${NAME} wwan example" 340 | echo " ${NAME} dns onic" 341 | echo " ${NAME} dns udns" 342 | echo " ${NAME} dns nextdns" 343 | echo " ${NAME} dns cloudflare" 344 | echo " ${NAME} dns ibm" 345 | echo " ${NAME} dns random" 346 | echo " ${NAME} dns IP.IP.IP.IP" 347 | echo " ${NAME} doas" 348 | echo " ${NAME} sudo" 349 | echo " ${NAME} status" 350 | echo 351 | exit 1 352 | } 353 | 354 | # usage_lan() ----------------------------------------------------------------- 355 | __usage_lan() { 356 | echo "USAGE:" 357 | echo " ${NAME} lan [OPTIONS]" 358 | echo 359 | echo "EXAMPLES:" 360 | echo " ${NAME} lan start" 361 | echo " ${NAME} lan start IP.IP.IP.IP/MASK" 362 | echo " ${NAME} lan start IP.IP.IP.IP/MASK GW.GW.GW.GW" 363 | echo " ${NAME} lan example" 364 | echo " ${NAME} status" 365 | echo " ${NAME} stop" 366 | echo 367 | echo "CONFIG:" 368 | echo " /etc/rc.conf" 369 | echo 370 | echo "EXAMPLE CONFIG:" 371 | echo " \$ cat /etc/rc.conf" 372 | echo " ifconfig_em0=\"DHCP\"" 373 | echo 374 | exit 1 375 | } 376 | 377 | # usage_wlan() ---------------------------------------------------------------- 378 | __usage_wlan() { 379 | echo "USAGE:" 380 | echo " ${NAME} wlan [OPTIONS]" 381 | echo 382 | echo "EXAMPLES:" 383 | echo " ${NAME} wlan scan" 384 | echo " ${NAME} wlan start" 385 | echo " ${NAME} wlan start HOME-NETWORK-SSID" 386 | echo " ${NAME} wlan example" 387 | echo " ${NAME} status" 388 | echo " ${NAME} stop" 389 | echo 390 | echo "CONFIG:" 391 | echo " /etc/wpa_supplicant.conf" 392 | echo 393 | echo "EXAMPLE CONFIG:" 394 | echo 395 | echo "\$ cat /etc/wpa_supplicant.conf" 396 | echo 397 | echo " network={" 398 | echo " key_mgmt=NONE" 399 | echo " priority=0" 400 | echo " }" 401 | echo 402 | echo " network={" 403 | echo " ssid=\"network\"" 404 | echo " psk=\"PASSWORD\"" 405 | echo " }" 406 | echo 407 | echo " network={" 408 | echo " ssid=\"C001P\"" 409 | echo " scan_ssid=1" 410 | echo " key_mgmt=WPA-EAP" 411 | echo " identity=\"1234\"" 412 | echo " password=\"PASSWORD\"" 413 | echo " eap=PEAP" 414 | echo " phase1=\"peaplabel=0\"" 415 | echo " phase2=\"auth=MSCHAPV2\"" 416 | echo " }" 417 | echo 418 | exit 1 419 | } 420 | 421 | # usage_wwan() ---------------------------------------------------------------- 422 | __usage_wwan() { 423 | echo "USAGE:" 424 | echo " ${NAME} wwan [OPTIONS]" 425 | echo 426 | echo "EXAMPLES:" 427 | echo " ${NAME} wwan start" 428 | echo " ${NAME} wwan start profile" 429 | echo " ${NAME} wwan example" 430 | echo " ${NAME} status" 431 | echo " ${NAME} stop" 432 | echo 433 | echo "CONFIG:" 434 | echo " /etc/ppp/ppp" 435 | echo 436 | echo "EXAMPLE CONFIG:" 437 | echo 438 | echo "\$ cat /etc/ppp/ppp" 439 | echo 440 | echo "default:" 441 | echo " set log Phase Chat LCP IPCP CCP tun command" 442 | echo 443 | echo "${WWAN_PROFILE}:" 444 | echo ' set device /dev/cuaU0' 445 | echo ' set speed 921600' 446 | echo ' set dial "ABORT BUSY ABORT NO\\sCARRIER TIMEOUT 5 \' 447 | echo ' \"\" AT OK-AT-OK \' 448 | echo ' AT+CFUN=1 OK \' 449 | echo ' AT+COPS=0 OK \' 450 | echo ' AT+CGDCONT=1,\\\"IP\\\",\\\"www.plusgsm.pl\\\" OK \' 451 | echo ' \dATDT\\T TIMEOUT 80 CONNECT"' 452 | echo ' set logout "ABORT BUSY ABORT ERROR TIMEOUT 60 \"\" +++ATH O ATH OK"' 453 | echo ' set phone *99\#' 454 | echo ' set timeout 300' 455 | echo ' set ifaddr 10.64.32.16/0 10.64.32.16/0 255.255.255.255 0.0.0.0' 456 | echo ' add default HISADDR' 457 | echo ' enable dns' 458 | echo ' disable ipv6cp' 459 | echo 460 | exit 1 461 | } 462 | 463 | # usage_dns() ----------------------------------------------------------------- 464 | __usage_dns() { 465 | echo "USAGE:" 466 | echo " ${NAME} dns [OPTIONS]" 467 | echo 468 | echo "EXAMPLES:" 469 | echo " ${NAME} dns onic" 470 | echo " ${NAME} dns udns" 471 | echo " ${NAME} dns nextdns" 472 | echo " ${NAME} dns cloudflare" 473 | echo " ${NAME} dns ibm" 474 | echo " ${NAME} dns random" 475 | echo " ${NAME} dns IP.IP.IP.IP" 476 | echo 477 | echo "CONFIG:" 478 | echo " /etc/resolv.conf" 479 | echo 480 | echo "EXAMPLE CONFIG:" 481 | echo " \$ cat resolv.conf" 482 | echo " nameserver 87.98.175.85" 483 | echo " nameserver 193.183.98.66" 484 | echo 485 | cat << __EOF 486 | NOLOGGING DNS SERVERS: 487 | 488 | OpenNIC https://servers.opennicproject.org/ 489 | 87.98.175.85 490 | 193.183.98.66 491 | 492 | UncensoredDNS https://blog.uncensoreddns.org/ 493 | 91.239.100.100 (anycast) 494 | 89.233.43.71 (unicast) 495 | 496 | Swiss Privacy Foundation http://privacyfoundation.ch/de/service/server.html 497 | 77.109.138.45 498 | 77.109.139.29 499 | 500 | CCC http://www.ccc.de/censorship/dns-howto 501 | 85.214.20.141 502 | 204.152.184.76 503 | 194.150.168.168 504 | 213.73.91.35 505 | 506 | Comodo Secure DNS https://www.comodo.com/secure-dns/ 507 | 8.26.56.26 508 | 8.20.247.20 509 | 510 | DNS Watch https://dns.watch/index 511 | 84.200.69.80 512 | 84.200.70.40 513 | 514 | Fool DNS http://www.fooldns.com/fooldns-community/ 515 | 87.118.111.215 516 | 213.187.11.62 517 | 518 | Free DNS http://freedns.zone/ 519 | 37.235.1.174 520 | 37.235.1.177 521 | 522 | __EOF 523 | exit 1 524 | } 525 | 526 | 527 | 528 | case ${1} in 529 | 530 | # LAN ======================================================================= 531 | (lan) # LAN BEGIN 532 | case ${2} in 533 | (start|restart) # LAN (RE)START 534 | 535 | __network_reset 536 | 537 | if [ "${LAN_RANDOM_MAC}" = "1" ] 538 | then 539 | #DOAS# permit nopass :network as root cmd ifconfig 540 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 541 | echo '__random_mac()' 542 | MAC=$( __random_mac ) 543 | ${CMD} ifconfig ${LAN_IF} ether ${MAC} 544 | echo ${CMD} ifconfig ${LAN_IF} ether ${MAC} 545 | unset MAC 546 | fi 547 | 548 | #DOAS# permit nopass :network as root cmd ifconfig 549 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 550 | ${CMD} ifconfig ${LAN_IF} up 551 | echo ${CMD} ifconfig ${LAN_IF} up 552 | 553 | if [ ${3} ] 554 | then # STATIC 555 | 556 | IP=${3} 557 | if ! echo ${IP} | grep -E "${IP_REGEX}" 1> /dev/null 2> /dev/null 558 | then 559 | echo "NOPE: The '${IP}' is not a valid IP address." 560 | exit 1 561 | fi 562 | 563 | #DOAS# permit nopass :network as root cmd ifconfig 564 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 565 | ${CMD} ifconfig ${LAN_IF} inet ${IP} 566 | echo ${CMD} ifconfig ${LAN_IF} inet ${IP} 567 | 568 | if [ ${4} ] 569 | then # GATEWAY 570 | 571 | if ! echo ${4} | grep -E "${IP_REGEX}" 1> /dev/null 2> /dev/null 572 | then 573 | echo "NOPE: The '${4}' is not a valid IP address." 574 | exit 1 575 | fi 576 | 577 | #DOAS# permit nopass :network as root cmd route 578 | #SUDO# %network ALL = NOPASSWD: /sbin/route * 579 | ${CMD} route add default ${4} 1> /dev/null 2> /dev/null 580 | echo ${CMD} route add default ${4} 581 | 582 | #DOAS# permit nopass :network as root cmd route 583 | #SUDO# %network ALL = NOPASSWD: /sbin/route * 584 | ${CMD} route change default ${4} 1> /dev/null 2> /dev/null 585 | echo ${CMD} route change default ${4} 586 | 587 | fi 588 | 589 | else # DHCP 590 | 591 | #DOAS# permit nopass :network as root cmd dhclient 592 | #SUDO# %network ALL = NOPASSWD: /sbin/dhclient * 593 | ${CMD} dhclient -q ${LAN_IF} 1> /dev/null 2> /dev/null 594 | echo ${CMD} dhclient -q ${LAN_IF} 595 | 596 | __dns_check_gateway 597 | 598 | __dns_check 599 | 600 | __squid_restart 601 | 602 | fi 603 | 604 | ;; 605 | 606 | (example) # LAN USAGE 607 | 608 | __usage_lan 609 | 610 | ;; 611 | 612 | (*) # USAGE 613 | 614 | __usage 615 | 616 | ;; 617 | 618 | esac # LAN END 619 | ;; 620 | 621 | # WLAN ====================================================================== 622 | (wlan) # WLAN BEGIN 623 | case ${2} in 624 | (scan) 625 | 626 | #DOAS# permit nopass :network as root cmd ifconfig 627 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 628 | ${CMD} ifconfig ${WLAN_IF} create wlandev ${WLAN_PH} 2> /dev/null 629 | echo ${CMD} ifconfig ${WLAN_IF} create wlandev ${WLAN_PH} 630 | 631 | #DOAS# permit nopass :network as root cmd ifconfig 632 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 633 | ${CMD} ifconfig ${WLAN_IF} country ${WLAN_COUNTRY} regdomain ${WLAN_REGDOMAIN} 634 | echo ${CMD} ifconfig ${WLAN_IF} country ${WLAN_COUNTRY} regdomain ${WLAN_REGDOMAIN} 635 | 636 | #DOAS# permit nopass :network as root cmd ifconfig 637 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 638 | ${CMD} ifconfig ${WLAN_IF} up 639 | echo ${CMD} ifconfig ${WLAN_IF} up 640 | 641 | #DOAS# permit nopass :network as root cmd ifconfig 642 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 643 | ifconfig ${WLAN_IF} scan & 644 | echo ifconfig ${WLAN_IF} scan & 645 | sleep 3 646 | 647 | #DOAS# permit nopass :network as root cmd ifconfig 648 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 649 | ifconfig ${WLAN_IF} list scan 650 | echo ifconfig ${WLAN_IF} list scan 651 | 652 | ;; 653 | 654 | (start) # WLAN (RE)START 655 | 656 | __network_reset 657 | 658 | if ! ifconfig ${WLAN_IF} 1> /dev/null 2> /dev/null 659 | then 660 | #DOAS# permit nopass :network as root cmd ifconfig 661 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 662 | ${CMD} ifconfig ${WLAN_IF} create wlandev ${WLAN_PH} 2> /dev/null 663 | echo ${CMD} ifconfig ${WLAN_IF} create wlandev ${WLAN_PH} 664 | fi 665 | 666 | if [ "${WLAN_RANDOM_MAC}" = "1" ] 667 | then 668 | #DOAS# permit nopass :network as root cmd ifconfig 669 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 670 | echo '__random_mac()' 671 | MAC=$( __random_mac ) 672 | ${CMD} ifconfig ${WLAN_IF} ether ${MAC} 673 | echo ${CMD} ifconfig ${WLAN_IF} ether ${MAC} 674 | MAC=0 675 | fi 676 | 677 | #DOAS# permit nopass :network as root cmd ifconfig 678 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 679 | ${CMD} ifconfig ${WLAN_IF} up 680 | echo ${CMD} ifconfig ${WLAN_IF} up 681 | 682 | #DOAS# permit nopass :network as root cmd ifconfig 683 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 684 | ${CMD} ifconfig ${WLAN_IF} scan & 685 | echo ${CMD} ifconfig ${WLAN_IF} scan & 686 | 687 | #DOAS# permit nopass :network as root cmd ifconfig 688 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 689 | ${CMD} ifconfig ${WLAN_IF} ssid - 690 | echo ${CMD} ifconfig ${WLAN_IF} ssid - 691 | 692 | if [ "${3}" ] 693 | then 694 | #DOAS# permit nopass :network as root cmd ifconfig 695 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 696 | ${CMD} ifconfig ${WLAN_IF} ssid "${3}" 697 | echo ${CMD} ifconfig ${WLAN_IF} ssid "${3}" 698 | fi 699 | 700 | #DOAS# permit nopass :network as root cmd wpa_supplicant 701 | #SUDO# %network ALL = NOPASSWD: /usr/sbin/wpa_supplicant * 702 | ${CMD} wpa_supplicant -i ${WLAN_IF} -c /etc/wpa_supplicant.conf -s -B 703 | echo ${CMD} wpa_supplicant -i ${WLAN_IF} -c /etc/wpa_supplicant.conf -s -B 704 | 705 | __wlan_wait_associated 706 | 707 | #DOAS# permit nopass :network as root cmd dhclient 708 | #SUDO# %network ALL = NOPASSWD: /sbin/dhclient * 709 | ${CMD} dhclient -q ${WLAN_IF} 1> /dev/null 2> /dev/null 710 | echo ${CMD} dhclient -q ${WLAN_IF} 711 | 712 | __dns_check_gateway 713 | 714 | __dns_check 715 | 716 | __squid_restart 717 | 718 | #DOAS# permit nopass :network as root cmd ifconfig 719 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 720 | ${CMD} ifconfig ${WLAN_IF} powersave 721 | echo ${CMD} ifconfig ${WLAN_IF} powersave 722 | 723 | ;; 724 | 725 | (restart) # WLAN RESTART 726 | 727 | #DOAS# permit nopass :network as root cmd killall args -9 dhclient 728 | #SUDO# %network ALL = NOPASSWD: /usr/bin/killall -9 dhclient 729 | ${CMD} killall -9 dhclient 1> /dev/null 2> /dev/null 730 | echo ${CMD} killall -9 dhclient 731 | 732 | #DOAS# permit nopass :network as root cmd killall args -9 wpa_supplicant 733 | #SUDO# %network ALL = NOPASSWD: /usr/bin/killall -9 wpa_supplicant 734 | ${CMD} killall -9 wpa_supplicant 1> /dev/null 2> /dev/null 735 | echo ${CMD} killall -9 wpa_supplicant 736 | 737 | #DOAS# permit nopass :network as root cmd wpa_supplicant 738 | #SUDO# %network ALL = NOPASSWD: /usr/sbin/wpa_supplicant * 739 | ${CMD} wpa_supplicant -i ${WLAN_IF} -c /etc/wpa_supplicant.conf -s -B 740 | echo ${CMD} wpa_supplicant -i ${WLAN_IF} -c /etc/wpa_supplicant.conf -s -B 741 | 742 | __wlan_wait_associated 743 | 744 | #DOAS# permit nopass :network as root cmd dhclient 745 | #SUDO# %network ALL = NOPASSWD: /sbin/dhclient * 746 | ${CMD} dhclient -q ${WLAN_IF} 1> /dev/null 2> /dev/null 747 | echo ${CMD} dhclient -q ${WLAN_IF} 748 | 749 | #DOAS# permit nopass :network as root cmd ifconfig 750 | #SUDO# %network ALL = NOPASSWD: /sbin/ifconfig * 751 | ${CMD} ifconfig ${WLAN_IF} powersave 752 | echo ${CMD} ifconfig ${WLAN_IF} powersave 753 | 754 | ;; 755 | 756 | (example) # WLAN USAGE 757 | 758 | __usage_wlan 759 | 760 | ;; 761 | 762 | (*) # USAGE 763 | 764 | __usage 765 | 766 | ;; 767 | 768 | esac # WLAN END 769 | ;; 770 | 771 | # WWAN ====================================================================== 772 | (wwan) # WWAN BEGIN 773 | case ${2} in 774 | (start|restart) # WWAN (RE)START 775 | 776 | if [ ${3} ] 777 | then 778 | __wwan_check "${3}" 779 | WWAN_PROFILE="${3}" 780 | else 781 | __wwan_check "${WWAN_PROFILE}" 782 | fi 783 | 784 | __network_reset 785 | 786 | #DOAS# permit nopass :network as root cmd ppp 787 | #SUDO# %network ALL = NOPASSWD: /usr/sbin/ppp * 788 | ${CMD} ppp -ddial ${WWAN_PROFILE} 1> /dev/null 2> /dev/null 789 | echo ${CMD} ppp -ddial ${WWAN_PROFILE} 790 | 791 | __dns_check 792 | 793 | __squid_restart 794 | 795 | ;; 796 | 797 | (example) # WWAN USAGE 798 | 799 | __usage_wwan 800 | 801 | ;; 802 | 803 | (*) # USAGE 804 | 805 | __usage 806 | 807 | ;; 808 | 809 | esac 810 | ;; 811 | 812 | # DNS ======================================================================= 813 | (dns) # DNS BEGIN 814 | case ${2} in 815 | (gw) # DNS SAME AS GATEWAY 816 | 817 | if [ "${UNBOUND}" != "1" ] 818 | then 819 | 820 | GW=$( route -n -4 -v get default 2> /dev/null | awk 'END{print $2}' ) 821 | 822 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 823 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 824 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 825 | echo "echo | ${CMD} tee /etc/resolv.conf" 826 | 827 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 828 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 829 | echo "nameserver ${GW}" | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 830 | echo "echo 'nameserver ${GW}' | ${CMD} tee -a /etc/resolv.conf" 831 | 832 | fi 833 | 834 | ;; 835 | 836 | (onic) # DNS OpenNIC 837 | 838 | if [ "${UNBOUND}" != "1" ] 839 | then 840 | 841 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 842 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 843 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 844 | echo "echo | ${CMD} tee /etc/resolv.conf" 845 | 846 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 847 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 848 | echo 'nameserver 87.98.175.85' | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 849 | echo "echo 'nameserver 87.98.175.85' | ${CMD} tee -a /etc/resolv.conf" 850 | 851 | fi 852 | 853 | ;; 854 | 855 | (udns) # DNS UncensoredDNS 856 | 857 | if [ "${UNBOUND}" != "1" ] 858 | then 859 | 860 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 861 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 862 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 863 | echo "echo | ${CMD} tee /etc/resolv.conf" 864 | 865 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 866 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 867 | echo 'nameserver 91.239.100.100' | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 868 | echo "echo 'nameserver 91.239.100.100' | ${CMD} tee -a /etc/resolv.conf" 869 | 870 | fi 871 | 872 | ;; 873 | 874 | (cloudflare) # DNS CloudFlare 875 | 876 | if [ "${UNBOUND}" != "1" ] 877 | then 878 | 879 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 880 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 881 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 882 | echo "echo | ${CMD} tee /etc/resolv.conf" 883 | 884 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 885 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 886 | echo 'nameserver 1.1.1.1' | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 887 | echo "echo 'nameserver 1.1.1.1' | ${CMD} tee -a /etc/resolv.conf" 888 | 889 | fi 890 | 891 | ;; 892 | 893 | (ibm) # DNS IBM 894 | 895 | if [ "${UNBOUND}" != "1" ] 896 | then 897 | 898 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 899 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 900 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 901 | echo "echo | ${CMD} tee /etc/resolv.conf" 902 | 903 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 904 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 905 | echo 'nameserver 9.9.9.9' | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 906 | echo "echo 'nameserver 9.9.9.9' | ${CMD} tee -a /etc/resolv.conf" 907 | 908 | fi 909 | 910 | ;; 911 | 912 | (nextdns) # DNS NextDNS 913 | 914 | if [ "${UNBOUND}" != "1" ] 915 | then 916 | 917 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 918 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 919 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 920 | echo "echo | ${CMD} tee /etc/resolv.conf" 921 | 922 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 923 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 924 | echo 'nameserver 45.90.30.114' | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 925 | echo "echo 'nameserver 45.90.30.114' | ${CMD} tee -a /etc/resolv.conf" 926 | 927 | fi 928 | 929 | ;; 930 | 931 | (random) 932 | 933 | if [ "${UNBOUND}" != "1" ] 934 | then 935 | 936 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 937 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 938 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 939 | echo "echo | ${CMD} tee /etc/resolv.conf" 940 | 941 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 942 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 943 | cat << __EOF | sort -R | head -1 | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 944 | nameserver 1.1.1.1 945 | nameserver 9.9.9.9 946 | nameserver 87.98.175.85 947 | nameserver 193.183.98.66 948 | nameserver 91.239.100.100 949 | nameserver 89.233.43.71 950 | nameserver 77.109.138.45 951 | nameserver 77.109.139.29 952 | nameserver 85.214.20.141 953 | nameserver 204.152.184.76 954 | nameserver 194.150.168.168 955 | nameserver 213.73.91.35 956 | nameserver 8.26.56.26 957 | nameserver 8.20.247.20 958 | nameserver 84.200.69.80 959 | nameserver 84.200.70.40 960 | nameserver 87.118.111.215 961 | nameserver 213.187.11.62 962 | nameserver 37.235.1.174 963 | nameserver 37.235.1.177 964 | nameserver 45.90.28.114 965 | nameserver 45.90.30.114 966 | __EOF 967 | echo "cat << __EOF | sort -R | head -1 | ${CMD} tee -a /etc/resolv.conf" 968 | 969 | fi 970 | 971 | ;; 972 | 973 | (example) 974 | 975 | __usage_dns 976 | 977 | ;; 978 | 979 | (*) 980 | 981 | if [ "${UNBOUND}" != "1" ] 982 | then 983 | 984 | #DOAS# permit nopass :network as root cmd tee args /etc/resolv.conf 985 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee /etc/resolv.conf 986 | echo | ${CMD} tee /etc/resolv.conf 1> /dev/null 987 | echo "echo | ${CMD} tee /etc/resolv.conf" 988 | 989 | if ! echo ${2} | grep -E "${IP_REGEX}" 1> /dev/null 2> /dev/null 990 | then 991 | echo "NOPE: The '${2}' is not a valid IP address." 992 | exit 1 993 | fi 994 | 995 | #DOAS# permit nopass :network as root cmd tee args -a /etc/resolv.conf 996 | #SUDO# %network ALL = NOPASSWD: /usr/bin/tee -a /etc/resolv.conf 997 | echo "nameserver ${2}" | ${CMD} tee -a /etc/resolv.conf 1> /dev/null 998 | echo "echo 'nameserver ${2}' | ${CMD} tee -a /etc/resolv.conf" 999 | 1000 | fi 1001 | 1002 | ;; 1003 | 1004 | esac 1005 | ;; 1006 | 1007 | # STOP ====================================================================== 1008 | (stop) 1009 | 1010 | __network_reset 1011 | 1012 | ;; 1013 | 1014 | # STATUS ==================================================================== 1015 | (status) 1016 | 1017 | __network_status 1018 | 1019 | ;; 1020 | 1021 | # DOAS ====================================================================== 1022 | (doas) 1023 | echo " # pw groupmod network -m YOURUSERNAME" 1024 | echo " # cat /usr/local/etc/doas.conf" 1025 | grep -E "^[\ \n\t]+#DOAS#" "${0}" | awk '{$1=" "}1' | sort -u | sed 1d 1026 | ;; 1027 | 1028 | # SUDO ====================================================================== 1029 | (sudo) 1030 | echo " # pw groupmod network -m YOURUSERNAME" 1031 | echo " # cat /usr/local/etc/sudoers" 1032 | grep -E "^[\ \n\t]+#SUDO#" "${0}" | awk '{$1=" "}1' | sort -u | sed 1d 1033 | ;; 1034 | 1035 | # USAGE ===================================================================== 1036 | (*) # USAGE 1037 | __usage 1038 | ;; 1039 | 1040 | esac 1041 | 1042 | echo '1' 2> /dev/null >> ~/scripts/stats/${0##*/} 1043 | --------------------------------------------------------------------------------