Помидор, передача, OpenVPN и переадресация портов
Моя конфигурация сети:
- Я запускаю передачу на моем маршрутизаторе Netgear R7000, на нем запущена вилка (v2017.2) [Tomato shibby от Kille72][1].
- Мой маршрутизатор не является шлюзом, он настроен как точка доступа за выделенным маршрутизатором / модемом и находится в той же подсети. Это даже не DHCP-сервер.
- Мой маршрутизатор настроен с IP-адресом 192.168.1.251
Мои цели:
Я хочу направить весь мой трафик передачи через клиент OpenVPN моего маршрутизатора без утечки DNS.
Я хочу использовать переадресацию портов моего VPN с передачей для успешной переадресации назначенного порта при передаче клиенту. Я ищу, чтобы связать назначенный порт в передаче с изменением порта моим VPN.
Что я знаю до сих пор:
- Ограничения запуска урезанной системы linx в Tomato, кажется, вызывают у меня проблемы с запуском сценариев, которые другие люди делают онлайн.
- Мне удалось [запустить этот скрипт][2], чтобы успешно запросить мой порт на privateinterentaccess.com, но я не могу найти работающий скрипт для автоматической отправки этого порта на передачу. В ссылке (или в скрипте) вы можете видеть, что API для доступа к частному Интернету создан для запроса порта.
- Я нашел различные другие сценарии, в том числе [другой в ссылке выше][3], который не работает, я получаю ошибки регулярного выражения при запуске сценария.
- Я также попробовал [этот скрипт][4], который выглядит специально для моего использования, но он не работает. После модификации скрипта я получаю:
awk: cmd. строка:1: неожиданный токен awk: cmd. строка:1: неожиданный токен awk: cmd. строка:1: Неожиданный пинг токена: неверный адрес '””' awk: cmd. строка:1: неожиданный токен
- У меня очень ограниченные знания Linux, но я стремлюсь учиться и нашел это очень интересным.
- Большая часть информации в Интернете, кажется, указывает людям, осуществляющим передачу на клиенте, работающем за маршрутизатором (вероятно, NAS). Похоже, это усложняет задачу, поскольку мне нужно перенаправлять трафик только с сервера, на котором запущена передача и openVPN.
Некоторые заметки
- Я заметил, что из-за того, что Tomato не запускал bash или sha256sum, мне пришлось искать способ установить их, чтобы скрипт запросил порт для работы. Я скачал их из репозитория optware.
- В разделе OpenVPN томата есть вкладка политики маршрутизации, но она кажется очень глючной, и я не могу понять, как ее использовать без утечки DNS. Единственный способ избежать утечки - это выбрать опцию: перенаправить интернет-трафик. [Вот ошибки, которые были найдены][5] в политике маршрутизации, и вот скриншоты опций, которые у меня есть в открытой VPN+ моя текущая пользовательская конфигурация:
Есть ли у кого-нибудь предложения о том, как лучше всего достичь своих целей?
Спасибо, что нашли время, чтобы прочитать!
Мне пришлось удалить свои ссылки, поскольку у меня недостаточно высокая репутация, чтобы публиковать более двух сообщений. Вы можете просмотреть их здесь: https://pastebin.com/UzdM0fjj
1 ответ
Успех! Рабочий скрипт ниже:
Зависимости: translation-remote - вы можете установить пакет translation-remote-openssl через optware. sha256sum - пакет программного обеспечения 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