random-scripts/setup-qbittorent.zsh

61 lines
2.0 KiB
Bash
Executable File

#!/usr/bin/env zsh
if [[ "${1}" == '-h' ]] || [[ "${1}" == '--help' ]]; then
printf 'usage: %s [-R|-D]\n' "${0}"
printf ' -R|-D: remove rules currently in place (default is to add new rules)\n'
exit
fi
setopt pipe_fail
local save_file="${HOME}/.cache/qBittorrent-iptables-save"
local op='-A'
if [[ "${1}" == '-D' || "${1}" == '-R' ]]; then
if ! [[ -f "${save_file}" ]]; then
echo 'No current rules found!'
exit 1
fi
op="-D"
fi
local iface="$(ip route | grep '^default' | grep -Po '(?<=dev )[^ ]+')"
printf 'Using interface: %s\n' "${iface}"
# <-A|-D> <ex_ip> <in_ip>
function do_rules {
emulate -L zsh
PS4='Run: '
setopt errexit xtrace
doas iptables -t filter "${1}" FORWARD -i "${iface}" -o wg0-mullvad -j ACCEPT
doas iptables -t nat "${1}" PREROUTING -d "${2}"/32 -p tcp -m tcp --dport 62000 \
-j DNAT --to-destination "${3}":62000
doas iptables -t nat "${1}" PREROUTING -d "${2}"/32 -p udp -m udp --dport 62000 \
-j DNAT --to-destination "${3}":62000
doas iptables -t nat "${1}" POSTROUTING -d "${3}"/32 -p tcp -m tcp --sport 62000 \
-j SNAT --to-source "${2}":62000
doas iptables -t nat "${1}" POSTROUTING -d "${3}"/32 -p udp -m udp --sport 62000 \
-j SNAT --to-source "${2}":62000
}
if [[ -f "${save_file}" ]]; then
local content="$(<"${save_file}")"
local lines=("${(@f)content}")
printf 'Old rules found for\nex_ip: %s\nin_ip: %s\n' "${lines[1]}" "${lines[2]}"
printf 'Removing...\n'
do_rules -D "${lines[1]}" "${lines[2]}"
rm -f "${save_file}"
printf 'Done!\n'
[[ "${op}" == '-D' ]] && exit
fi
local ex_ip in_ip
ex_ip="$(curl -4 icanhazip.com)" || { echo 'Could not fetch ip!'; exit 1 }
in_ip="$(ip addr show dev wg0-mullvad | \
awk '/^ *inet [0-9]+/ { print substr($2,0,index($2,"/") - 1) }')" ||
{ echo 'Could not find wireguard iterface address!'; exit 1 }
printf 'Adding rules for:\nex_ip: %s\nin_ip: %s\n' "${ex_ip}" "${in_ip}"
printf '%s\n%s\n' "${ex_ip}" "${in_ip}" >"${save_file}"
do_rules -A "${ex_ip}" "${in_ip}"