#!/usr/bin/env bash set -o xtrace resolved_conf_d=( 'openvpn.conf' 'csit-test.conf' 'csit-prod.conf' 'nchc.conf' ) function stopvpn() { mapfile -t vpn_pid <<< "$(pgrep openfortivpn) $(pgrep openvpn) $(pgrep openconnect)" for pid in "${vpn_pid[@]}"; do if [[ -n "$pid" ]]; then echo "Kill process $pid." sudo kill "$pid" fi done for conf in "${resolved_conf_d[@]}"; do if [[ -e "/etc/systemd/resolved.conf.d/$conf" ]]; then sudo rm "/etc/systemd/resolved.conf.d/$conf" fi done sudo systemctl reload systemd-resolved } function resolved() { # Workaround, since openvpn didn't accept dns option for no reason sudo mkdir -p /etc/systemd/resolved.conf.d/ if [[ "$1" == 'openvpn' ]]; then cat > /tmp/vpn-resolved << 'EOF' [Resolve] DNS=172.20.10.253 Domains=konchin.com EOF elif [[ "$1" == 'csit-test' ]]; then cat > /tmp/vpn-resolved << 'EOF' [Resolve] DNS=10.2.1.1 10.2.1.2 Domains=test.cc.cs.nctu.edu.tw EOF elif [[ "$1" == 'csit-prod' ]]; then cat > /tmp/vpn-resolved << 'EOF' [Resolve] DNS=10.1.1.1 10.1.1.2 Domains=cc.cs.nctu.edu.tw EOF elif [[ "$1" == "nchc" ]]; then cat > /tmp/vpn-resolved << 'EOF' [Resolve] DNS=1.1.1.1 EOF fi sudo mv /tmp/vpn-resolved "/etc/systemd/resolved.conf.d/$1.conf" sudo systemctl reload systemd-resolved } function fortivpn() { echo "Start openfortivpn with realm $1." sudo sh </dev/null /dev/null & disown EOF } function ovpn() { echo "Start openvpn." sudo sh </dev/null /dev/null & disown EOF } function opencon() { echo "Start openconnect vpn" sudo sh </dev/null 2>/dev/null & disown EOF } function main() { sudo echo -n case "$1" in s|stop) stopvpn return ;; p|prod) stopvpn fortivpn prod resolved csit-prod ;; t|test) stopvpn fortivpn test resolved csit-test ;; h|home) stopvpn ovpn desktop resolved openvpn ;; n|nchc) stopvpn fortivpn nchc && sleep 0.5 opencon nchc resolved nchc esac } main "$@"