Trying to get PIA Port Forwarding working your Raspberry Pi (RPI) and Deluge – look no further this script will get you up and running.
- Login to your Raspberry Pi
- cd /home/pi
- sudo nano portforward.sh
- Paste in the below script (after you have updated the relevant sections)
#!/usr/bin/env bash
# Source: http://www.htpcguides.com
# Adapted from https://github.com/blindpet/piavpn-portforward/
# Author: Mike
# Based on https://github.com/crapos/piavpn-portforward
# Updated by HTGSD.com 19/05/2019
# Change all "<<<PIAPASSWORD>>>" or similar fields to match your specific details i.e. USERNAME=myusername
# Assumes you are using Openvpn for Private Internet Access (PIA) and have Deluge Daemon running on your RPI
# Set path for root Cron Job
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
USERNAME=<<<PIAUSERNAME>>>
VPNINTERFACE=tun0
PASSWORD=<<<PIAPASSWORD>>>
VPNLOCALIP=$(ifconfig $VPNINTERFACE | awk '/inet / {print $2}' | awk 'BEGIN { FS = ":" } {print $(NF)}')
CURL_TIMEOUT=5
CLIENT_ID=$(uname -v | sha1sum | awk '{ print $1 }')
# set to 1 if using VPN Split Tunnel
SPLITVPN="0"
DELUGEUSER=<<<DELUGEUSERNAME>>>
DELUGEPASS=<<<DELUGEPASSWORD>>>
# This one is often localhost but change it to the server IP if you are running deluge remotely
DELUGEHOST=localhost
#get VPNIP
VPNIP=$(curl -m $CURL_TIMEOUT --interface $VPNINTERFACE "http://ipinfo.io/ip" --silent --stderr -)
echo $VPNIP
#request new port
PORTFORWARDJSON=$(curl -m $CURL_TIMEOUT --silent --interface $VPNINTERFACE 'https://www.privateinternetaccess.com/vpninfo/port_forward_assignment' -d "user=$USERNAME&pass=$PASSWORD&client_id=$CLIENT_ID&local_ip=$VPNLOCALIP" | head -1)
#trim VPN forwarded port from JSON
PORT=$(echo $PORTFORWARDJSON | awk 'BEGIN{r=1;FS="{|:|}"} /port/{r=0; print $3} END{exit r}')
echo $PORT
#change firewall rules if SPLITVPN is set to 1
if [ "$SPLITVPN" -eq "1" ]; then
#change firewall rules if necessary
IPTABLERULETWO=$(iptables -L INPUT -n --line-numbers | grep -E "2.*reject-with icmp-port-unreachable" | awk '{ print $8 }')
if [ -z $IPTABLERULETWO ]; then
sudo iptables -D INPUT 2
sudo iptables -I INPUT 2 -i $VPNINTERFACE -p tcp --dport $PORT -j ACCEPT
else
sudo iptables -I INPUT 2 -i $VPNINTERFACE -p tcp --dport $PORT -j ACCEPT
fi
fi
#change deluge port on the fly assumes you are using port 58846 for Deluged if not change the port below
deluge-console "connect $DELUGEHOST:58846 $DELUGEUSER $DELUGEPASS; config --set listen_ports ($PORT,$PORT)"
- save the file (ctrl x – follow instructions)
- sudo chmod +x portforward.sh
- Test it out ./portforward.sh
- You should see:
> xxx.xxx.xxx.xx (your IP)
> xxxxx (your PIA port forwarding port)
> Setting listen_ports to (xxxxx, xxxxx)..
> Configuration value successfully updated.
- If it’s all working then setup your cron to run this every x minutes. The example below will run it every 30 minutes. Google how to use cron if you want to change it.
- sudo crontab -e
- add the following to the bottom of the file
30 * * * * /home/pi/portforward.sh

