#!/bin/bash # OpenVPN update-resolv-conf replacement for containerized environments # The default script from the base image uses systemd-resolved via D-Bus, # which is unavailable in Home Assistant add-on containers. # This script directly updates /etc/resolv.conf instead. [ "$script_type" ] || exit 0 case "$script_type" in up) # Backup original resolv.conf if [ ! -f /etc/resolv.conf.ovpn-bak ]; then cp /etc/resolv.conf /etc/resolv.conf.ovpn-bak 2>/dev/null || true fi dns_servers="" dns_domain="" dns_search="" # Parse foreign_option_* environment variables set by OpenVPN for optionname in ${!foreign_option_*}; do option="${!optionname}" case "$option" in dhcp-option\ DNS\ *) dns_servers="${dns_servers} ${option#dhcp-option DNS }" ;; dhcp-option\ DOMAIN\ *) dns_domain="${option#dhcp-option DOMAIN }" ;; dhcp-option\ DOMAIN-SEARCH\ *) dns_search="${dns_search} ${option#dhcp-option DOMAIN-SEARCH }" ;; esac done # Write new resolv.conf with VPN DNS servers if [ -n "$dns_servers" ]; then { for server in $dns_servers; do echo "nameserver $server" done [ -n "$dns_domain" ] && echo "domain $dns_domain" [ -n "$dns_search" ] && echo "search${dns_search}" } > /etc/resolv.conf fi ;; down) # Restore original resolv.conf if [ -f /etc/resolv.conf.ovpn-bak ]; then cp /etc/resolv.conf.ovpn-bak /etc/resolv.conf rm -f /etc/resolv.conf.ovpn-bak fi ;; esac exit 0