fix(gluetun): support WireGuard VPN ready detection

WireGuard is stateless and never emits the OpenVPN-specific "initialization sequence completed" log line, causing the readiness check to always time out. Also accept "public ip address is" which gluetun logs once the WireGuard tunnel is up.

Closes #99
This commit is contained in:
imSp4rky
2026-04-08 22:05:56 -06:00
parent c5aa57c9db
commit 725edd59e0

View File

@@ -1052,7 +1052,7 @@ class Gluetun(Proxy):
# Gluetun needs both proxy listening AND VPN connected # Gluetun needs both proxy listening AND VPN connected
# The proxy starts before VPN is ready, so we need to wait for VPN # The proxy starts before VPN is ready, so we need to wait for VPN
proxy_ready = "[http proxy] listening" in all_logs proxy_ready = "[http proxy] listening" in all_logs
vpn_ready = "initialization sequence completed" in all_logs vpn_ready = "initialization sequence completed" in all_logs or "public ip address is" in all_logs
if proxy_ready and vpn_ready: if proxy_ready and vpn_ready:
# Give a brief moment for the proxy to fully initialize # Give a brief moment for the proxy to fully initialize
@@ -1235,10 +1235,10 @@ class Gluetun(Proxy):
duration_ms=duration_ms, duration_ms=duration_ms,
) )
raise RuntimeError( raise RuntimeError(
f"Region mismatch for {container['provider']}:{container['region']}: " f"Region mismatch for {container['provider']}:{container['region']}: "
f"Expected '{expected_code}' but got '{actual_country}' " f"Expected '{expected_code}' but got '{actual_country}' "
f"(IP: {ip_info.get('ip')}, City: {ip_info.get('city')})" f"(IP: {ip_info.get('ip')}, City: {ip_info.get('city')})"
) )
# Verification successful - store IP info in container record # Verification successful - store IP info in container record
if query_key in self.active_containers: if query_key in self.active_containers: