我的网络配置:
- 我在我的 Netgear R7000 路由器上运行 transmission,它正在运行 [Tomato shibby by Kille72][1] 的一个分支 (v2017.2)。
- 我的路由器不是网关,而是设置为专用路由器/调制解调器后面的接入点,并且位于同一子网中。它甚至不是 DHCP 服务器。
- 我的路由器配置了 ip 192.168.1.251
我的目标:
我希望通过路由器的 OpenVPN 客户端路由所有传输流量,且不发生 DNS 泄漏。
我想使用 VPN 的端口转发功能和 transmission 成功转发 transmission 中分配的端口到客户端。我希望将 transmission 中分配的端口与 VPN 的端口更改绑定在一起。
我目前所知道的情况:
- 在 Tomato 中运行精简版 linx 系统的限制似乎导致我在运行其他人在线制作的脚本时出现问题。
- 我设法 [运行此脚本][2] 成功从 privateinterentaccess.com 请求我的端口,但我似乎找不到一个有效的脚本来自动将此端口发送到传输。在链接(或脚本)中,您可以看到 API Private internet access 已创建以请求端口。
- 我发现了其他各种脚本,包括[上面链接中的另一个脚本][3],它们都不起作用,运行脚本时出现正则表达式错误。
- 我也尝试过[这个脚本][4],它看起来是为我量身定制的,但它不起作用。修改脚本后,我得到:
awk:cmd。行:1:意外的标记 awk:cmd。行:1:意外的标记 awk:cmd。行:1:意外的标记 ping:错误地址“””' awk:cmd。行:1:意外的标记
- 我对 Linux 的了解非常有限,但我渴望学习并且发现这非常有趣。
- 网上的大多数信息似乎都指向人们在客户端在路由器后面运行(可能是 NAS)。这似乎让事情变得更加困难,因为我只需要从运行 transmission 和 openVPN 的服务器转发流量。
一些注释
- 我注意到,由于 Tomato 没有运行 bash 或 sha256sum,因此我必须找到一种方法来安装它们,以便脚本请求端口正常工作。我从 optware 存储库下载了它们。
- 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