mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-06-11 01:55:59 +02:00
Handle IPv6-less hosts in ip6tables shim
This commit is contained in:
@@ -260,10 +260,14 @@ else
|
||||
# REMOVE OPENVPN #
|
||||
##################
|
||||
|
||||
# Ensure no redirection by removing the direction tag
|
||||
if [ -f "$QBT_CONFIG_FILE" ]; then
|
||||
sed -i '/Interface/d' "$QBT_CONFIG_FILE"
|
||||
if ! bashio::config.true 'wireguard_enabled'; then
|
||||
# Ensure no redirection by removing the direction tag when no VPN is used
|
||||
if [ -f "$QBT_CONFIG_FILE" ]; then
|
||||
sed -i '/Interface/d' "$QBT_CONFIG_FILE"
|
||||
fi
|
||||
bashio::log.info "Direct connection without VPN enabled"
|
||||
else
|
||||
bashio::log.info "OpenVPN disabled. WireGuard handling network binding."
|
||||
fi
|
||||
bashio::log.info "Direct connection without VPN enabled"
|
||||
|
||||
fi
|
||||
|
||||
86
qbittorrent/rootfs/etc/cont-init.d/94-wireguard.sh
Executable file
86
qbittorrent/rootfs/etc/cont-init.d/94-wireguard.sh
Executable file
@@ -0,0 +1,86 @@
|
||||
#!/usr/bin/with-contenv bashio
|
||||
# shellcheck shell=bash
|
||||
set -e
|
||||
|
||||
WIREGUARD_STATE_DIR="/var/run/wireguard"
|
||||
QBT_CONFIG_FILE="/config/qBittorrent/qBittorrent.conf"
|
||||
declare wireguard_config=""
|
||||
declare wireguard_runtime_config=""
|
||||
declare configured_name
|
||||
|
||||
mkdir -p "${WIREGUARD_STATE_DIR}"
|
||||
|
||||
if ! bashio::config.true 'wireguard_enabled'; then
|
||||
rm -f "${WIREGUARD_STATE_DIR}/config" "${WIREGUARD_STATE_DIR}/interface"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if bashio::config.true 'openvpn_enabled'; then
|
||||
bashio::exit.nok 'OpenVPN and WireGuard cannot be enabled simultaneously. Disable one of them.'
|
||||
fi
|
||||
|
||||
if bashio::config.true 'openvpn_alt_mode'; then
|
||||
bashio::log.warning 'The openvpn_alt_mode option is ignored when WireGuard is enabled.'
|
||||
fi
|
||||
|
||||
port="$(bashio::addon.port '51820/udp' || true)"
|
||||
if bashio::var.has_value "${port}"; then
|
||||
bashio::log.info "WireGuard host port ${port}/udp mapped to container port 51820."
|
||||
else
|
||||
bashio::log.info 'WireGuard port 51820/udp is not exposed in the add-on options. Continuing with outbound-only connectivity.'
|
||||
fi
|
||||
|
||||
if bashio::config.has_value 'wireguard_config'; then
|
||||
configured_name="$(bashio::config 'wireguard_config')"
|
||||
configured_name="${configured_name##*/}"
|
||||
if [[ -z "${configured_name}" ]]; then
|
||||
bashio::log.info 'wireguard_config option left empty. Attempting automatic selection.'
|
||||
elif bashio::fs.file_exists "/config/wireguard/${configured_name}"; then
|
||||
wireguard_config="/config/wireguard/${configured_name}"
|
||||
else
|
||||
bashio::exit.nok "WireGuard configuration '/config/wireguard/${configured_name}' not found."
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ -z "${wireguard_config:-}" ]; then
|
||||
mapfile -t configs < <(find /config/wireguard -maxdepth 1 -type f -name '*.conf' -print)
|
||||
if [ "${#configs[@]}" -eq 0 ]; then
|
||||
bashio::exit.nok 'WireGuard is enabled but no .conf file was found in /config/wireguard.'
|
||||
elif [ "${#configs[@]}" -eq 1 ]; then
|
||||
wireguard_config="${configs[0]}"
|
||||
bashio::log.info "WireGuard configuration not specified. Using ${wireguard_config##*/}."
|
||||
elif bashio::fs.file_exists '/config/wireguard/config.conf'; then
|
||||
wireguard_config='/config/wireguard/config.conf'
|
||||
bashio::log.info 'Using default WireGuard configuration config.conf.'
|
||||
else
|
||||
bashio::exit.nok "Multiple WireGuard configuration files detected. Please set the 'wireguard_config' option."
|
||||
fi
|
||||
fi
|
||||
|
||||
dos2unix "${wireguard_config}" >/dev/null 2>&1 || true
|
||||
|
||||
interface_name="$(basename "${wireguard_config}" .conf)"
|
||||
if [[ -z "${interface_name}" ]]; then
|
||||
interface_name='wg0'
|
||||
fi
|
||||
|
||||
wireguard_runtime_config="${WIREGUARD_STATE_DIR}/${interface_name}.conf"
|
||||
|
||||
cp "${wireguard_config}" "${wireguard_runtime_config}"
|
||||
chmod 600 "${wireguard_runtime_config}" 2>/dev/null || true
|
||||
bashio::log.info 'Prepared WireGuard runtime configuration with both IPv4 and IPv6 entries.'
|
||||
|
||||
echo "${wireguard_runtime_config}" > "${WIREGUARD_STATE_DIR}/config"
|
||||
echo "${interface_name}" > "${WIREGUARD_STATE_DIR}/interface"
|
||||
|
||||
if bashio::fs.file_exists "${QBT_CONFIG_FILE}"; then
|
||||
sed -i '/Interface/d' "${QBT_CONFIG_FILE}"
|
||||
sed -i "/\\[Preferences\\]/ i\\Connection\\\\Interface=${interface_name}" "${QBT_CONFIG_FILE}"
|
||||
sed -i "/\\[Preferences\\]/ i\\Connection\\\\InterfaceName=${interface_name}" "${QBT_CONFIG_FILE}"
|
||||
sed -i "/\\[BitTorrent\\]/a \\Session\\\\Interface=${interface_name}" "${QBT_CONFIG_FILE}"
|
||||
sed -i "/\\[BitTorrent\\]/a \\Session\\\\InterfaceName=${interface_name}" "${QBT_CONFIG_FILE}"
|
||||
else
|
||||
bashio::log.warning "qBittorrent config file not found. Bind the client manually to interface ${interface_name}."
|
||||
fi
|
||||
|
||||
bashio::log.info "WireGuard prepared with interface ${interface_name} using configuration ${wireguard_config##*/}."
|
||||
Reference in New Issue
Block a user