Tomato, Transmission, OpenVPN e Port Forwarding

0

Minha configuração de rede:

  1. Eu executo a transmissão no meu roteador Netgear R7000, ele está executando um fork (v2017.2) de [Tomato shibby by Kille72] [1].
  2. Meu roteador não é um gateway, ele é configurado como um ponto de acesso por trás de um roteador / modem dedicado e está na mesma sub-rede. Não é nem mesmo um servidor DHCP.
  3. Meu roteador está configurado com um ip de 192.168.1.251

Minhas metas:

  1. Eu quero rotear todo o meu tráfego de transmissão através do cliente OpenVPN do meu roteador sem vazamento de DNS.

  2. Eu quero usar o encaminhamento de porta da minha VPN com transmissão para encaminhar com sucesso a porta atribuída na transmissão do cliente. Eu estou olhando para amarrar a porta atribuída na transmissão com a mudança de porta pela minha VPN.

O que eu sei até agora:

  1. As limitações de executar um sistema linx simplificado no Tomato parecem me causar problemas com a execução de scripts que outras pessoas fizeram on-line.
  2. Eu consegui [executar este script] [2] para solicitar com sucesso a minha porta do privateinterentaccess.com, mas não consigo encontrar um script de trabalho para enviar essa porta automaticamente para a transmissão. No link (ou script) você pode ver o acesso privado à Internet da API criado para solicitar a porta.
  3. Eu encontrei vários outros scripts, incluindo [outro no link acima] [3] que não funciona, recebo erros de regex ao executar o script.
  4. Eu tentei também [este script] [4] que parece customizado para o meu uso, mas não funciona. Depois de modificar o script, recebo:

awk: cmd. line:1: Unexpected token awk: cmd. line:1: Unexpected token awk: cmd. line:1: Unexpected token ping: bad address '””' awk: cmd. line:1: Unexpected token

  1. Eu tenho conhecimento muito limitado de Linux, mas estou interessado em aprender e achei isso muito interessante.
  2. A maioria das informações on-line parece apontar para pessoas que estão transmitindo em um cliente rodando atrás de um roteador (provavelmente um NAS). Isso parece tornar mais difícil, já que preciso encaminhar o tráfego apenas do servidor em que estou executando a transmissão e o openVPN ativado.

Algumas notas

  1. Eu notei que porque o Tomato não estava rodando bash ou sha256sum eu tive que encontrar uma maneira de instalá-los para o script solicitar uma porta para o trabalho. Eu os baixei do repositório de optwares.
  2. Existe uma aba de diretiva de roteamento na seção OpenVPN do tomato, mas ela parece estar com muito bugs e eu não posso descobrir como usá-la sem um vazamento de DNS. A única maneira de não vazar é se eu escolher a opção: redirecionar o tráfego da Internet. [Aqui estão os erros que foram encontrados] [5] na política de roteamento e aqui estão as capturas de tela das opções que tenho em VPN aberta + minha configuração personalizada atual:

Alguém tem alguma sugestão para a melhor maneira de alcançar meus objetivos?

Obrigado por dedicar um tempo para ler!

Eu tive que remover meus links porque não tenho uma reputação alta o suficiente para postar mais de dois. Você pode visualizá-los aqui: link

    
por Dodgexander 13.10.2017 / 17:22

1 resposta

0

Sucesso! Roteiro de trabalho abaixo:

Dependências: transmissão remota - você pode instalar o pacote transmission-remote-openssl através do optware. sha256sum - pacote optware coreutils-sha256sum

#!/usr/bin/env bash
#
# Enable port forwarding when using Private Internet Access
#
# Usage:
#  ./port_forwarding.sh
# script must be run within 2 mins of connecting to vpn server. Do not forget to reconnect/connect
# fill in your transmission username, password and hostname/ip below:

TRANSUSER=xxxxx
TRANSPASS=xxxxx
TRANSHOST=localhost
#now let the script do the work

Sleep 20
echo pausing to wait for vpn to connect and transmission to start

error( )
{
  echo "$@" 1>&2
  exit 1
}

error_and_usage( )
{
  echo "$@" 1>&2
  usage_and_exit 1
}

usage( )
{
  echo "Usage: 'dirname $0'/$PROGRAM"
}

usage_and_exit( )
{
  usage
  exit $1
}

version( )
{
  echo "$PROGRAM version $VERSION"
}


port_forward_assignment( )
{
  client_id_file="/etc/openvpn/pia_client_id"
  if [ ! -f "$client_id_file" ]; then
    if hash shasum 2>/dev/null; then
      head -n 100 /dev/urandom | shasum -a 256 | tr -d " -" > "$client_id_file"
    elif hash sha256sum 2>/dev/null; then
      head -n 100 /dev/urandom | sha256sum | tr -d " -" > "$client_id_file"
    else
      echo "Please install shasum or sha256sum, and make sure it is visible in your \$PATH"
      exit 1
    fi
  fi
  client_id='cat "$client_id_file"'
  json='curl "http://209.222.18.222:2000/?client_id=$client_id" 2>/dev/null'
  if [ "$json" == "" ]; then
    json='Port forwarding is already activated on this connection, has expired, or you are not connected to a PIA region that supports port forwarding'
  fi

  echo server returned: $json

#trim VPN forwarded port from JSON
PORT=$(echo $json | awk 'BEGIN{r=1;FS="[{}\":]+"} /port/{r=0; print $3} END{exit r}')
echo if successful, trimmed port is:$PORT

#change transmission port on the fly

transmission-remote $TRANSHOST --auth $TRANSUSER:$TRANSPASS -p "$PORT"
echo here are your transmission credentials: host:$TRANSHOST username:$TRANSUSER password:$TRANSPASS
}
echo remember to run no longer than 2 mins after reconnecting/connecting to vpn server.

EXITCODE=0
PROGRAM='basename $0'
VERSION=2.1

while test $# -gt 0
do
  case $1 in
  --usage | --help | -h )
    usage_and_exit 0
    ;;
  --version | -v )
    version
    exit 0
    ;;
  *)
    error_and_usage "Unrecognized option: $1"
    ;;
  esac
  shift
done

port_forward_assignment

exit 0
    
por 21.10.2017 / 06:09