Tomato、Transmission、OpenVPN 和端口转发

Tomato、Transmission、OpenVPN 和端口转发

我的网络配置:

  1. 我在我的 Netgear R7000 路由器上运行 transmission,它正在运行 [Tomato shibby by Kille72][1] 的一个分支 (v2017.2)。
  2. 我的路由器不是网关,而是设置为专用路由器/调制解调器后面的接入点,并且位于同一子网中。它甚至不是 DHCP 服务器。
  3. 我的路由器配置了 ip 192.168.1.251

我的目标:

  1. 我希望通过路由器的 OpenVPN 客户端路由所有传输流量,且不发生 DNS 泄漏。

  2. 我想使用 VPN 的端口转发功能和 transmission 成功转发 transmission 中分配的端口到客户端。我希望将 transmission 中分配的端口与 VPN 的端口更改绑定在一起。

我目前所知道的情况:

  1. 在 Tomato 中运行精简版 linx 系统的限制似乎导致我在运行其他人在线制作的脚本时出现问题。
  2. 我设法 [运行此脚本][2] 成功从 privateinterentaccess.com 请求我的端口,但我似乎找不到一个有效的脚本来自动将此端口发送到传输。在链接(或脚本)中,您可以看到 API Private internet access 已创建以请求端口。
  3. 我发现了其他各种脚本,包括[上面链接中的另一个脚本][3],它们都不起作用,运行脚本时出现正则表达式错误。
  4. 我也尝试过[这个脚本][4],它看起来是为我量身定制的,但它不起作用。修改脚本后,我得到:

awk:cmd。行:1:意外的标记 awk:cmd。行:1:意外的标记 awk:cmd。行:1:意外的标记 ping:错误地址“””' awk:cmd。行:1:意外的标记

  1. 我对 Linux 的了解非常有限,但我渴望学习并且发现这非常有趣。
  2. 网上的大多数信息似乎都指向人们在客户端在路由器后面运行(可能是 NAS)。这似乎让事情变得更加困难,因为我只需要从运行 transmission 和 openVPN 的服务器转发流量。

一些注释

  1. 我注意到,由于 Tomato 没有运行 bash 或 sha256sum,因此我必须找到一种方法来安装它们,以便脚本请求端口正常工作。我从 optware 存储库下载了它们。
  2. Tomato 的 OpenVPN 部分有一个路由策略选项卡,但它似乎有很多错误,我不知道如何在不泄漏 DNS 的情况下使用它。唯一不泄漏的方法是选择选项:重定向互联网流量。[以下是路由策略中发现的错误][5],以下是我在 open VPN+我当前的自定义配置中拥有的选项的屏幕截图:

有人能对我实现目标的最佳方式提出任何建议吗?

感谢您花时间阅读!

我不得不删除我的链接,因为我的声誉不够高,无法发布超过两个。您可以在此处查看它们:https://pastebin.com/UzdM0fjj

答案1

成功了!工作脚本如下:

依赖项: transmission-remote - 您可以通过 optware 安装 transmission-remote-openssl 包。 sha256sum - 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

相关内容