#!/bin/bash --posix set -e IP="" INBOUND_PORT="" FORWARD_PORT="" usage() { printf "%s" "Usage: --ip The ip address to forward data to Example: --ip 192.168.10.11 --inbound-port The port that data will be received on Example: --inbound-port 22 --forward-port The port that data will be forwarded to Example: --forward-port 2020 All above flags must be passed with arguments" } error() { printf '%s\n' "$1" >&2 exit 1 } while :; do case $1 in -h | -\? | --help) usage # Display a usage synopsis. exit ;; --) # End of all options. shift break ;; --ip) shift [[ "${1}" == "" ]] && error "--ip requires an argument" IP=${1} ;; --inbound-port) shift [[ "${1}" == "" ]] && error "--inbound-port requires an argument" INBOUND_PORT=${1} ;; --forward-port) shift [[ "${1}" == "" ]] && error "--forward-port requires an argument" FORWARD_PORT=${1} ;; -?*) printf 'Unknown option: %s\n' "$1" >&2 usage ;; *) # Default case: No more options, so break out of the loop. break ;; esac shift done [[ "${IP}" == "" ]] && error "--ip requires an argument" [[ "${FORWARD_PORT}" == "" ]] && error "--forward-port requires an argument" [[ "${INBOUND_PORT}" == "" ]] && error "--inbound-port requires an argument" firewall-cmd --permanent --add-forward-port=port="${INBOUND_PORT}":proto=tcp:toaddr="${IP}":toport="${FORWARD_PORT}" firewall-cmd --permanent --add-port="${INBOUND_PORT}"/tcp firewall-cmd --add-masquerade --permanent firewall-cmd --reload echo "Routing all data on ${INBOUND_PORT} to ${IP}:${FORWARD_PORT}"