SWS-12500-custom-component/iptables_redirect.sh

89 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
# Script for frowarding SWS 12500 station's destination port 80
# to your Home Assistant's instance port (8123)
#
# Workaround for station's firmware 1.0 bug
#
#
# Script pro přesměrování portu pro stanici SWS12500
STATION_IP=[_STATION_IP_]
HA=[_HA_]
SRC_PORT=[_SRC_PORT_]
DST_PORT=[_DST_PORT_]
INSTALL_IPTABLES=0
APK_MISSING=0
RED_COLOR='\033[0;31m'
GREEN_COLOR='\033[0;32m'
GREEN_YELLOW='\033[1;33m'
NO_COLOR='\033[0m'
function info () { echo -e "${GREEN_COLOR}INFO: $1${NO_COLOR}";}
function warn () { echo -e "${GREEN_YELLOW}WARN: $1${NO_COLOR}";}
function error () { echo -e "${RED_COLOR}ERROR: $1${NO_COLOR}"; if [ "$2" != "false" ]; then exit 1;fi; }
function check () {
echo -n "Checking dependencies: '$1' ... "
if [ -z "$(command -v "$1")" ]; then
error "not installed" $2
return 1
fi
info "OK."
return 0
}
echo
echo "**************************************************************"
echo "* *"
echo -e "* ${GREEN_YELLOW}Running iptables forward for port $SRC_PORT -> $DST_PORT ${NO_COLOR} *"
echo "* *"
echo "**************************************************************"
echo
# Check for dependencies
check "iptables" false
INSTALL_IPTABLES=$?
check "apk" false
APK_MISSING=$?
if [ $APK_MISSING -eq 1 ] && [ $INSTALL_IPTABLES -eq 1 ]; then
error "Could not install and run iptables.\n'apk' installer is missing and 'iptables' are not installed.\n"
fi
if [ $INSTALL_IPTABLES -eq 1 ] && [ $APK_MISSING -eq 0 ]; then
declare -a RUNINSTALL=(apk add iptables)
echo -n "Installing 'iptables' ... ${RUNINSTALL[@]} ... "
${RUNINSTALL[@]}
EXIT_STATUS=$?
if [ $EXIT_STATUS -ne 0 ]; then
warn "apk error code: $EXIT_STATUS"
error "Installation of iptables failed!"
else
info "'iptables' installed successfully."
fi
fi
declare -a RULE=(PREROUTING -t nat -s $STATION_IP -d $HA -p tcp -m tcp --dport $SRC_PORT -j REDIRECT --to-ports $DST_PORT)
echo -n "Chceking for existing rule in iptables ... "
$(iptables -C ${RULE[@]} 2>/dev/null)
if [ $? -eq 0 ]; then
warn "Rule is already present in PREROUTING chain."
else
echo -n "Inserting iptables rule to PREROUTING chain ... "
$(iptables -I ${RULE[@]})
fi
EXIT_STATUS=$?
if [ $EXIT_STATUS -ne 0 ]; then
warn "iptables error code: ${EXIT_STATUS} "
error "Rule could not be added!"
fi
info "iptables are set to forward port $SRC_PORT -> $DST_PORT for station's IP: $STATION_IP"