Вопрос или проблема
Как я могу обновить настройки переадресации портов qBittorrent nox из bash?
Я попытался следовать этому примеру, немного изменив его для работы с PIA VPN, но когда я проверяю настройки qBittorrent, настройки переадресации портов не обновлены.
Я отключил аутентификацию для локального доступа, так что это не должно быть проблемой.
Вот скрипт, который я запускаю
#читаем PIA порт
forwarded_port=$(piactl get portforward)
echo $forwarded_port
WEBUI_PORT=8080 #порт qBittorrent
web_protocol="http"
curl -k -i -X POST -d "json={"random_port": false}" "${web_protocol}://localhost:${WEBUI_PORT}/api/v2/app/setPreferences" # &> /dev/null
curl -k -i -X POST -d "json={"listen_port": ${forwarded_port}}" "${web_protocol}://localhost:${WEBUI_PORT}/api/v2/app/setPreferences" # &> /dev/null
Вывод скрипта:
50483
HTTP/1.1 200 OK
connection: keep-alive
content-length: 0
content-security-policy: default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; script-src 'self' 'unsafe-inline'; object-src 'none'; form-action 'self'; frame-ancestors 'self';
content-type: text/plain; charset=UTF-8
date: Вск, 11 Авг 2024 17:54:52 GMT
referrer-policy: same-origin
set-cookie: SID=6nnIxJuRqqupqkO8TcOVz76j5KeD6dhI; HttpOnly; path=/; SameSite=Strict
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
HTTP/1.1 200 OK
connection: keep-alive
content-length: 0
content-security-policy: default-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; script-src 'self' 'unsafe-inline'; object-src 'none'; form-action 'self'; frame-ancestors 'self';
content-type: text/plain; charset=UTF-8
date: Вск, 11 Авг 2024 17:54:52 GMT
referrer-policy: same-origin
set-cookie: SID=1IBcvH+n82fJA3DYv4QBRz2CxCK3u/Si; HttpOnly; path=/; SameSite=Strict
x-content-type-options: nosniff
x-frame-options: SAMEORIGIN
x-xss-protection: 1; mode=block
Этот скрипт правильно устанавливает настройки переадресации портов в qBittorrent nox с PIA VPN.
#читаем PIA порт
forwarded_port=$(piactl get portforward)
echo $forwarded_port
WEBUI_PORT=8080 #порт qBittorrent
web_protocol="http"
curl -k -i -X POST -d "json={\"random_port\": false}" "http://localhost:${WEBUI_PORT}/api/v2/app/setPreferences"
curl -k -i -X POST -d "json={\"listen_port\": ${forwarded_port}}" "http://localhost:${WEBUI_PORT}/api/v2/app/setPreferences"
Еще один вариант с автоматизацией с помощью py-natpmp для ProtonVPN, но может быть адаптирован для других провайдеров VPN.
Два скрипта, которые вы можете монтировать в docker или запускать в вашей ОС. Они будут проверять открытые порты и обновлять ваши настройки qBittorrent.
Я просто смонтировал специализированное место в своем контейнере, смонтированное по адресу /usr/sbin, другое в месте инициализации скриптов и, наконец, файл журнала также на хосте.
https://gist.github.com/KaBankz/c5a08845e3c64fbae8053dc7d28f8191
Спасибо github.com/KaBankz
Ответ или решение
Для обновления настройки переадресации портов в qBittorrent NOX с использованием Bash, необходимо учитывать несколько важных аспектов. Ваша задача заключается в отправке корректных HTTP-запросов на WebUI qBittorrent, что подразумевает правильное форматирование данных JSON и успешное взаимодействие с API qBittorrent.
На основе предоставленного вами скрипта, можно выделить несколько ключевых моментов и сделать необходимые правки, чтобы обеспечить правильное обновление настройki портов:
1. Корректное форматирование JSON
В вашем скрипте запросы к API содержат не совсем корректное форматирование JSON. Вам нужно использовать экранирование двойных кавычек, чтобы объект JSON был корректным.
# Получаем перенаправленный порт из PIA
forwarded_port=$(piactl get portforward)
echo "Перенаправленный порт: $forwarded_port"
WEBUI_PORT=8080 # Порт qBittorrent
web_protocol="http"
# Устанавливаем случайный порт в false
curl -k -i -X POST -d "json={\"random_port\": false}" "${web_protocol}://localhost:${WEBUI_PORT}/api/v2/app/setPreferences"
# Устанавливаем перенаправленный порт
curl -k -i -X POST -d "json={\"listen_port\": ${forwarded_port}}" "${web_protocol}://localhost:${WEBUI_PORT}/api/v2/app/setPreferences"
2. Проверка состояния соединения с API
Убедитесь, что qBittorrent действительно запущен и слушает на указанном порту (8080). Вы можете выполнить следующую команду, чтобы убедиться в этом:
curl -k -i "${web_protocol}://localhost:${WEBUI_PORT}/api/v2/app/version"
Это должно вернуть информацию о версии qBittorrent и подтвердить доступность API.
3. Логи и отладка
Для нахождения и диагностики возможных ошибок полезно включить ведение логов. Вы можете перенаправить вывод вашей команды curl
в файл для дальнейшего изучения:
curl -k -i -X POST -d "json={\"random_port\": false}" "${web_protocol}://localhost:${WEBUI_PORT}/api/v2/app/setPreferences" >> qbittorrent.log 2>&1
curl -k -i -X POST -d "json={\"listen_port\": ${forwarded_port}}" "${web_protocol}://localhost:${WEBUI_PORT}/api/v2/app/setPreferences" >> qbittorrent.log 2>&1
4. Изменения в Docker (если используется)
Если qBittorrent работает в Docker-контейнере, обязательно проверьте, как организованы сети и порты в вашем контейнере, чтобы избежать проблем с маршрутизацией.
5. Альтернативные стратегии
Также, вы можете рассмотреть возможность автоматизации с использованием сторонних инструментов (например, py-natpmp
), для работы с NAT-PMP и управления переадресацией портов. Это может повысить стабильность вашего соединения через VPN.
Заключение
После внесения исправлений и проверки всех указанных аспектов, ваши изменения в настройках qBittorrent должны успешно применяться. Если проблема сохраняется, рассмотрите возможность обращения к логам qBittorrent для получения дополнительной информации о возникших ошибках.