From 50388590cd5f59428f719ab6066a5c595423b874 Mon Sep 17 00:00:00 2001 From: Alexandre <44178713+alexbelgium@users.noreply.github.com> Date: Mon, 24 Nov 2025 22:10:17 +0100 Subject: [PATCH 1/2] Handle VPN monitor interface binding --- qbittorrent/rootfs/etc/services.d/vpn-monitor/run | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/qbittorrent/rootfs/etc/services.d/vpn-monitor/run b/qbittorrent/rootfs/etc/services.d/vpn-monitor/run index d1a9c68c8..57cf47525 100755 --- a/qbittorrent/rootfs/etc/services.d/vpn-monitor/run +++ b/qbittorrent/rootfs/etc/services.d/vpn-monitor/run @@ -15,6 +15,7 @@ VPN_INFO_URL="${VPN_INFO_URL:-https://ipinfo.io}" _fetch_public_ip() { local resp local url + local curl_iface_opts=() local urls=( "https://icanhazip.com" "https://ifconfig.me/ip" @@ -24,10 +25,15 @@ _fetch_public_ip() { "https://ipinfo.io/ip" ) local shuffled_urls + + if [[ -n "${VPN_INTERFACE:-}" ]]; then + curl_iface_opts+=(--interface "${VPN_INTERFACE}") + fi + mapfile -t shuffled_urls < <(printf "%s\n" "${urls[@]}" | shuf) for url in "${shuffled_urls[@]}"; do - resp=$(curl -fsS --max-time 5 "${url}" 2>/dev/null || true) + resp=$(curl -fsS --max-time 5 "${curl_iface_opts[@]}" "${url}" 2>/dev/null || true) resp="${resp//[[:space:]]/}" if [[ "${resp}" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]] || [[ "${resp}" =~ ^[0-9a-fA-F:]+$ ]]; then @@ -123,6 +129,13 @@ if bashio::config.true 'openvpn_enabled'; then vpn_openvpn=true fi +if [[ "${vpn_openvpn}" == true ]] && bashio::config.false 'openvpn_alt_mode'; then + VPN_INTERFACE="tun0" + bashio::log.info "VPN monitor set to query external IP through interface ${VPN_INTERFACE} (interface binding)." +else + VPN_INTERFACE="" +fi + if bashio::config.true 'wireguard_enabled'; then vpn_wireguard=true fi From 62669745e8e32c3d81ac3aca5b0c9159a5ce7374 Mon Sep 17 00:00:00 2001 From: Alexandre <44178713+alexbelgium@users.noreply.github.com> Date: Mon, 24 Nov 2025 22:12:00 +0100 Subject: [PATCH 2/2] Fix condition for VPN interface binding --- qbittorrent/rootfs/etc/services.d/vpn-monitor/run | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/qbittorrent/rootfs/etc/services.d/vpn-monitor/run b/qbittorrent/rootfs/etc/services.d/vpn-monitor/run index 57cf47525..5117c5fa3 100755 --- a/qbittorrent/rootfs/etc/services.d/vpn-monitor/run +++ b/qbittorrent/rootfs/etc/services.d/vpn-monitor/run @@ -129,7 +129,7 @@ if bashio::config.true 'openvpn_enabled'; then vpn_openvpn=true fi -if [[ "${vpn_openvpn}" == true ]] && bashio::config.false 'openvpn_alt_mode'; then +if [[ "${vpn_openvpn}" == true ]] && ! bashio::config.true 'openvpn_alt_mode'; then VPN_INTERFACE="tun0" bashio::log.info "VPN monitor set to query external IP through interface ${VPN_INTERFACE} (interface binding)." else