Skip to content

Bug: Using dot results in a VPN restart loop (doh works) #3377

Description

@slimDebug

Is this urgent?

No

Host OS

QTS 5.2.9 (20260514)

CPU arch

x86_64

VPN service provider

Mullvad

What are you using to run the container

docker-compose

What is the version of Gluetun

Running version latest built on 2026-06-28T08:15:42Z (commit a17591d)

What's the problem 🤔

When starting the container with DNS_UPSTREAM_RESOLVER_TYPE=dot I run into a constant restart loop that never ends (see logs).
While DNS_UPSTREAM_RESOLVER_TYPE=doh seems to be working fine (besides some initial warnings like 2026-06-28T10:14:38+02:00 WARN [dns] exchanging over https connection (2013ms) for request IN A raw.githubusercontent.com.: doing HTTP request: Post "https://doh.qis.io/dns-query": context deadline exceeded).

There is no firewall on the system & DNS_UPSTREAM_RESOLVER_TYPE=doh seems to be the only workaround for now.

Share your logs (at least 10 lines)

2026-06-28T10:10:57+02:00 INFO [routing] default route found: interface eth0, gateway 172.16.0.1, assigned IP 172.16.0.69 and family v4
2026-06-28T10:10:57+02:00 INFO [routing] adding route for 0.0.0.0/0
2026-06-28T10:10:57+02:00 INFO [firewall] setting allowed subnets...
2026-06-28T10:10:57+02:00 INFO [routing] default route found: interface eth0, gateway 172.16.0.1, assigned IP 172.16.0.69 and family v4
2026-06-28T10:10:57+02:00 INFO [routing] adding route for 172.16.0.0/24
2026-06-28T10:10:57+02:00 INFO [healthcheck] listening on 127.0.0.1:9999
2026-06-28T10:10:57+02:00 INFO [http server] http server listening on [::]:8000
2026-06-28T10:10:57+02:00 INFO [firewall] allowing VPN connection...
2026-06-28T10:10:57+02:00 INFO [wireguard] Using available kernelspace implementation
2026-06-28T10:10:57+02:00 INFO [wireguard] Connecting to 185.213.155.72:51820
2026-06-28T10:10:57+02:00 INFO [vpn] wireguard setup is complete. Note wireguard is a silent protocol and it may or may not work, without giving any error message. Typically i/o timeout errors indicate the wireguard connection is not working.
2026-06-28T10:10:57+02:00 INFO [MTU discovery] finding maximum MTU, this can take up to 6 seconds
2026-06-28T10:10:57+02:00 INFO [MTU discovery] setting VPN interface tun0 MTU to maximum valid MTU 1380
2026-06-28T10:10:57+02:00 INFO [dns] DNS server listening on [::]:53
2026-06-28T10:10:57+02:00 INFO [dns] ready and using DNS server with dot upstream resolvers
2026-06-28T10:10:57+02:00 INFO [dns] downloading hostnames and IP block lists
2026-06-28T10:11:09+02:00 WARN [vpn] restarting VPN because it failed to pass the healthcheck: startup check: all check tries failed: parallel attempt 1/2 failed: dialing: dial tcp4: lookup cloudflare.com: i/o timeout, parallel attempt 2/2 failed: dialing: dial tcp4: lookup github.com: i/o timeout
2026-06-28T10:11:09+02:00 INFO [vpn] 👉 See https://github.com/qdm12/gluetun-wiki/blob/main/faq/healthcheck.md
2026-06-28T10:11:09+02:00 INFO [vpn] DO NOT OPEN AN ISSUE UNLESS YOU HAVE READ AND TRIED EVERY POSSIBLE SOLUTION
2026-06-28T10:11:09+02:00 INFO [vpn] stopping
2026-06-28T10:11:09+02:00 INFO [vpn] starting
2026-06-28T10:11:09+02:00 INFO [firewall] allowing VPN connection...
2026-06-28T10:11:09+02:00 INFO [wireguard] Using available kernelspace implementation
2026-06-28T10:11:09+02:00 INFO [wireguard] Connecting to 185.65.134.83:51820
2026-06-28T10:11:09+02:00 INFO [vpn] wireguard setup is complete. Note wireguard is a silent protocol and it may or may not work, without giving any error message. Typically i/o timeout errors indicate the wireguard connection is not working.
2026-06-28T10:11:09+02:00 INFO [MTU discovery] finding maximum MTU, this can take up to 6 seconds
2026-06-28T10:11:09+02:00 INFO [MTU discovery] setting VPN interface tun0 MTU to maximum valid MTU 1380
2026-06-28T10:11:13+02:00 WARN [dns] running leak check: request failed: performing request: Get "https://mesdkyvjvqf8io0i35ly4wp77tkf68ewbo9ifaqn-z0ouml3c8hhq.ipleak.net/dnsdetection/": dial tcp: lookup mesdkyvjvqf8io0i35ly4wp77tkf68ewbo9ifaqn-z0ouml3c8hhq.ipleak.net on 127.0.0.1:53: read udp 127.0.0.1:41563->127.0.0.1:53: i/o timeout
2026-06-28T10:11:15+02:00 WARN [vpn] restarting VPN because it failed to pass the healthcheck: startup check: all check tries failed: parallel attempt 1/2 failed: dialing: dial tcp4: lookup cloudflare.com: i/o timeout, parallel attempt 2/2 failed: dialing: dial tcp4: lookup github.com: i/o timeout
2026-06-28T10:11:15+02:00 INFO [vpn] 👉 See https://github.com/qdm12/gluetun-wiki/blob/main/faq/healthcheck.md
2026-06-28T10:11:15+02:00 INFO [vpn] DO NOT OPEN AN ISSUE UNLESS YOU HAVE READ AND TRIED EVERY POSSIBLE SOLUTION
2026-06-28T10:11:15+02:00 INFO [vpn] stopping
2026-06-28T10:11:15+02:00 INFO [vpn] starting
2026-06-28T10:11:15+02:00 INFO [firewall] allowing VPN connection...
2026-06-28T10:11:15+02:00 INFO [wireguard] Using available kernelspace implementation
2026-06-28T10:11:15+02:00 INFO [wireguard] Connecting to 185.213.155.72:51820
2026-06-28T10:11:16+02:00 INFO [vpn] wireguard setup is complete. Note wireguard is a silent protocol and it may or may not work, without giving any error message. Typically i/o timeout errors indicate the wireguard connection is not working.
2026-06-28T10:11:16+02:00 INFO [MTU discovery] finding maximum MTU, this can take up to 6 seconds
2026-06-28T10:11:16+02:00 INFO [MTU discovery] setting VPN interface tun0 MTU to maximum valid MTU 1380
2026-06-28T10:11:22+02:00 WARN [vpn] restarting VPN because it failed to pass the healthcheck: startup check: all check tries failed: parallel attempt 1/2 failed: dialing: dial tcp4: lookup cloudflare.com: i/o timeout, parallel attempt 2/2 failed: dialing: dial tcp4: lookup github.com: i/o timeout
2026-06-28T10:11:22+02:00 INFO [vpn] 👉 See https://github.com/qdm12/gluetun-wiki/blob/main/faq/healthcheck.md
2026-06-28T10:11:22+02:00 INFO [vpn] DO NOT OPEN AN ISSUE UNLESS YOU HAVE READ AND TRIED EVERY POSSIBLE SOLUTION
2026-06-28T10:11:22+02:00 INFO [vpn] stopping
2026-06-28T10:11:22+02:00 INFO [vpn] starting
2026-06-28T10:11:22+02:00 INFO [firewall] allowing VPN connection...
2026-06-28T10:11:22+02:00 INFO [wireguard] Using available kernelspace implementation
2026-06-28T10:11:22+02:00 INFO [wireguard] Connecting to 193.32.248.71:51820
2026-06-28T10:11:22+02:00 INFO [vpn] wireguard setup is complete. Note wireguard is a silent protocol and it may or may not work, without giving any error message. Typically i/o timeout errors indicate the wireguard connection is not working.
2026-06-28T10:11:22+02:00 INFO [MTU discovery] finding maximum MTU, this can take up to 6 seconds

Share your configuration

gluetun:
    container_name: gluetun
    image: qmcgaw/gluetun:${GLUETUN_TAG}
    restart: unless-stopped
    cap_add:
      - NET_ADMIN
    devices:
      - /dev/net/tun:/dev/net/tun
    logging:
      driver: json-file
      options:
        max-file: ${DOCKERLOGGING_MAXFILE}
        max-size: ${DOCKERLOGGING_MAXSIZE}
    ports:
      - ${DOCKER_HOST_IP}:8090:8090
    environment:
      - PUID=${PUID}
      - PGID=${PGID}
      - TZ=${TZ}
      - VPN_SERVICE_PROVIDER=mullvad
      - VPN_TYPE=wireguard
      - WIREGUARD_PRIVATE_KEY=${P_KEY}
      - WIREGUARD_ADDRESSES=${W_ADDRESSES}
      - SERVER_COUNTRIES=${VPN_COUNTRIES}
      - OWNED_ONLY=yes
      - FIREWALL_OUTBOUND_SUBNETS=172.16.0.0/24
      - DNS_UPSTREAM_RESOLVER_TYPE=dot
      - DNS_UPSTREAM_RESOLVERS=cloudflare,quadrant,libredns
    extra_hosts:
      - "gotify_server:${GOTIFY_SERVER_IPV4}"
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ${DOCKERCONFDIR}/gluetun:/gluetun
    networks:
      main_network:
        ipv4_address: 172.16.0.69

networks:
  main_network:
    ipam:
      config:
        - subnet: 172.16.0.0/24

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions