[GH-ISSUE #428] Permanent error on AAAA request #148

Closed
opened 2026-02-26 04:34:11 +03:00 by kerem · 5 comments
Owner

Originally created by @pavlyuts on GitHub (Dec 7, 2023).
Original GitHub issue: https://github.com/mageddo/dns-proxy-server/issues/428

Originally assigned to: @mageddo on GitHub.

What is Happening / What is expected

DPS logs fault, associated to AAAA request on container name
Log entry:

Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: 08:28:44.878 [Thread-41      ] WAR c.m.d.server.dns.RequestHandlerDefault            l=93   m=solve0                          status=solverFailed, currentSolverTime=8, totalTime=8, solver=SolverDocker, query=query=AAAA:db.docker, eClass=NullPointerException, msg=null
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: java.lang.NullPointerException: null
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at java.base@19.0.2/java.util.Objects.requireNonNull(Objects.java:233)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at java.base@19.0.2/java.util.Optional.of(Optional.java:113)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at java.base@19.0.2/java.util.stream.FindOps$FindSink$OfRef.get(FindOps.java:194)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at java.base@19.0.2/java.util.stream.FindOps$FindSink$OfRef.get(FindOps.java:191)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at java.base@19.0.2/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at java.base@19.0.2/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at java.base@19.0.2/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at com.mageddo.dnsproxyserver.docker.ContainerSolvingService.findBestMatch(ContainerSolvingService.java:50)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at com.mageddo.dnsproxyserver.server.dns.solver.SolverDocker.lambda$handle$0(SolverDocker.java:40)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at com.mageddo.dnsproxyserver.server.dns.solver.HostnameMatcher.match(HostnameMatcher.java:22)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at com.mageddo.dnsproxyserver.server.dns.solver.SolverDocker.handle(SolverDocker.java:39)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solve0(RequestHandlerDefault.java:75)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at com.mageddo.dnsproxyserver.server.dns.solver.SolverCache.lambda$handleRes$0(SolverCache.java:38)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at com.mageddo.commons.caching.LruTTLCache.lambda$computeIfAbsentWithTTL$1(LruTTLCache.java:94)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at java.base@19.0.2/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1916)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at com.mageddo.commons.caching.LruTTLCache.lambda$computeIfAbsentWithTTL$2(LruTTLCache.java:88)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at java.base@19.0.2/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1916)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at com.mageddo.commons.caching.LruTTLCache.computeIfAbsentWithTTL(LruTTLCache.java:86)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at com.mageddo.dnsproxyserver.server.dns.solver.SolverCache.handleRes(SolverCache.java:36)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at com.mageddo.dnsproxyserver.server.dns.solver.SolverCache.handle(SolverCache.java:31)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solve(RequestHandlerDefault.java:51)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.handle(RequestHandlerDefault.java:42)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at com.mageddo.dnsproxyserver.server.dns.UDPServer.handle(UDPServer.java:54)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at com.mageddo.dnsproxyserver.server.dns.UDPServer.lambda$start0$0(UDPServer.java:42)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at java.base@19.0.2/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:577)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at java.base@19.0.2/java.util.concurrent.FutureTask.run(FutureTask.java:317)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at java.base@19.0.2/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at java.base@19.0.2/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at java.base@19.0.2/java.lang.Thread.run(Thread.java:1589)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:775)
Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]:         at org.graalvm.nativeimage.builder/com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:203)

To reproduce:

  1. Setup Docker
  2. Setup DPS standaone mode and configure it
  3. Create container with docker default network conection and name 'test'
  4. dig @127.0.0.1 test.docker AAAA
  5. Check DPS logs

DPS config file

{
  "version": 2,
  "remoteDnsServers": [ ],
  "envs": [
    {
      "name": "",
      "hostnames": [ ]
    }
  ],
  "activeEnv": "",
  "webServerPort": 5380,
  "dnsServerPort": 53,
  "logLevel": "INFO",
  "logFile": "console",
  "registerContainerNames": true,
  "domain": "docker",
  "dpsNetwork": false,
  "dpsNetworkAutoConnect": false,
  "defaultDns": false,
  "hostMachineHostname" : "host.docker",
  "serverProtocol": "UDP_TCP",
  "dockerHost": null,
  "resolvConfOverrideNameServers": false,
  "noRemoteServers": true,
  "noEntriesResponseCode": 3
}

Specs

  • OS: Debian 11, Oracle Linux 8
  • Docker Version: 24.0.7
  • DPS Version: 3.15.13-snapshot
Originally created by @pavlyuts on GitHub (Dec 7, 2023). Original GitHub issue: https://github.com/mageddo/dns-proxy-server/issues/428 Originally assigned to: @mageddo on GitHub. ### What is Happening / What is expected DPS logs fault, associated to AAAA request on container name Log entry: ``` Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: 08:28:44.878 [Thread-41 ] WAR c.m.d.server.dns.RequestHandlerDefault l=93 m=solve0 status=solverFailed, currentSolverTime=8, totalTime=8, solver=SolverDocker, query=query=AAAA:db.docker, eClass=NullPointerException, msg=null Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: java.lang.NullPointerException: null Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at java.base@19.0.2/java.util.Objects.requireNonNull(Objects.java:233) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at java.base@19.0.2/java.util.Optional.of(Optional.java:113) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at java.base@19.0.2/java.util.stream.FindOps$FindSink$OfRef.get(FindOps.java:194) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at java.base@19.0.2/java.util.stream.FindOps$FindSink$OfRef.get(FindOps.java:191) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at java.base@19.0.2/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at java.base@19.0.2/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at java.base@19.0.2/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at com.mageddo.dnsproxyserver.docker.ContainerSolvingService.findBestMatch(ContainerSolvingService.java:50) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at com.mageddo.dnsproxyserver.server.dns.solver.SolverDocker.lambda$handle$0(SolverDocker.java:40) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at com.mageddo.dnsproxyserver.server.dns.solver.HostnameMatcher.match(HostnameMatcher.java:22) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at com.mageddo.dnsproxyserver.server.dns.solver.SolverDocker.handle(SolverDocker.java:39) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solve0(RequestHandlerDefault.java:75) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at com.mageddo.dnsproxyserver.server.dns.solver.SolverCache.lambda$handleRes$0(SolverCache.java:38) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at com.mageddo.commons.caching.LruTTLCache.lambda$computeIfAbsentWithTTL$1(LruTTLCache.java:94) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at java.base@19.0.2/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1916) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at com.mageddo.commons.caching.LruTTLCache.lambda$computeIfAbsentWithTTL$2(LruTTLCache.java:88) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at java.base@19.0.2/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1916) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at com.mageddo.commons.caching.LruTTLCache.computeIfAbsentWithTTL(LruTTLCache.java:86) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at com.mageddo.dnsproxyserver.server.dns.solver.SolverCache.handleRes(SolverCache.java:36) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at com.mageddo.dnsproxyserver.server.dns.solver.SolverCache.handle(SolverCache.java:31) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solve(RequestHandlerDefault.java:51) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.handle(RequestHandlerDefault.java:42) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at com.mageddo.dnsproxyserver.server.dns.UDPServer.handle(UDPServer.java:54) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at com.mageddo.dnsproxyserver.server.dns.UDPServer.lambda$start0$0(UDPServer.java:42) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at java.base@19.0.2/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:577) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at java.base@19.0.2/java.util.concurrent.FutureTask.run(FutureTask.java:317) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at java.base@19.0.2/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at java.base@19.0.2/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at java.base@19.0.2/java.lang.Thread.run(Thread.java:1589) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:775) Dec 07 11:28:44 pavlyuts.ru dns-proxy-server[448]: at org.graalvm.nativeimage.builder/com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:203) ``` To reproduce: 1. Setup Docker 2. Setup DPS standaone mode and configure it 3. Create container with docker default network conection and name 'test' 4. `dig @127.0.0.1 test.docker AAAA` 5. Check DPS logs DPS config file ``` { "version": 2, "remoteDnsServers": [ ], "envs": [ { "name": "", "hostnames": [ ] } ], "activeEnv": "", "webServerPort": 5380, "dnsServerPort": 53, "logLevel": "INFO", "logFile": "console", "registerContainerNames": true, "domain": "docker", "dpsNetwork": false, "dpsNetworkAutoConnect": false, "defaultDns": false, "hostMachineHostname" : "host.docker", "serverProtocol": "UDP_TCP", "dockerHost": null, "resolvConfOverrideNameServers": false, "noRemoteServers": true, "noEntriesResponseCode": 3 } ``` ### Specs * OS: Debian 11, Oracle Linux 8 * Docker Version: 24.0.7 * DPS Version: 3.15.13-snapshot
kerem 2026-02-26 04:34:11 +03:00
Author
Owner

@sneusse commented on GitHub (Dec 13, 2023):

same here, can we disable AAAA in some way?

<!-- gh-comment-id:1853766190 --> @sneusse commented on GitHub (Dec 13, 2023): same here, can we disable AAAA in some way?
Author
Owner

@mageddo commented on GitHub (May 1, 2024):

Hey thanks for the report.

I got this, the issue is caused when beyond the container, your hostmachine or the docker engine also hasn't an associated IPV6, it will try to use the host machine IPV6 but it hasn't one associated, null is returned:

ContainerSolvingService l=132 ...  status=noNetworkAvailable, usingHostMachineIp=null

Then the error occurs

18:23:47.453 [Thread-6       ] WAR c.m.d.server.dns.RequestHandlerDefault            l=93   m=solve0                          status=solverFailed, currentSolverTime=33, totalTime=33, solver=SolverDocker, query=query=AAAA:test.docker, eClass=NullPointerException, msg=null
java.lang.NullPointerException: null
        at java.base@19.0.2/java.util.Objects.requireNonNull(Objects.java:233)
        at java.base@19.0.2/java.util.Optional.of(Optional.java:113)
        at java.base@19.0.2/java.util.stream.FindOps$FindSink$OfRef.get(FindOps.java:194)
        at java.base@19.0.2/java.util.stream.FindOps$FindSink$OfRef.get(FindOps.java:191)
        at java.base@19.0.2/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
        at java.base@19.0.2/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
        at java.base@19.0.2/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647)
        at com.mageddo.dnsproxyserver.docker.ContainerSolvingService.findBestMatch(ContainerSolvingService.java:50)

update

The bug is here, .findFirst() will throw a NPE when there is a null value in the collection, which is the case, the host machine IP produced in .map is null.

github.com/mageddo/dns-proxy-server@17b0c0043d/src/main/java/com/mageddo/dnsproxyserver/docker/ContainerSolvingService.java (L50)

I'm working on the fix

<!-- gh-comment-id:2089177337 --> @mageddo commented on GitHub (May 1, 2024): Hey thanks for the report. I got this, the issue is caused when beyond the container, your hostmachine or the docker engine also hasn't an associated IPV6, it will try to use the host machine IPV6 but it hasn't one associated, null is returned: ``` ContainerSolvingService l=132 ... status=noNetworkAvailable, usingHostMachineIp=null ``` Then the error occurs ``` 18:23:47.453 [Thread-6 ] WAR c.m.d.server.dns.RequestHandlerDefault l=93 m=solve0 status=solverFailed, currentSolverTime=33, totalTime=33, solver=SolverDocker, query=query=AAAA:test.docker, eClass=NullPointerException, msg=null java.lang.NullPointerException: null at java.base@19.0.2/java.util.Objects.requireNonNull(Objects.java:233) at java.base@19.0.2/java.util.Optional.of(Optional.java:113) at java.base@19.0.2/java.util.stream.FindOps$FindSink$OfRef.get(FindOps.java:194) at java.base@19.0.2/java.util.stream.FindOps$FindSink$OfRef.get(FindOps.java:191) at java.base@19.0.2/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150) at java.base@19.0.2/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234) at java.base@19.0.2/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647) at com.mageddo.dnsproxyserver.docker.ContainerSolvingService.findBestMatch(ContainerSolvingService.java:50) ``` **update** The bug is here, `.findFirst()` will throw a NPE when there is a null value in the collection, which is the case, the host machine IP produced in `.map` is null. https://github.com/mageddo/dns-proxy-server/blob/17b0c0043d883cf9f902075739183c7938c808b2/src/main/java/com/mageddo/dnsproxyserver/docker/ContainerSolvingService.java#L50 I'm working on the fix
Author
Owner

@mageddo commented on GitHub (May 1, 2024):

same here, can we disable AAAA in some way?

No sure, it's related to your OS and DNS client, it's asking for AAAA records then DPS will answer them, so you have to disable the AAAA queries on the requester, don't know how.

<!-- gh-comment-id:2089179828 --> @mageddo commented on GitHub (May 1, 2024): > same here, can we disable AAAA in some way? No sure, it's related to your OS and DNS client, it's asking for AAAA records then DPS will answer them, so you have to disable the AAAA queries on the requester, don't know how.
Author
Owner

@mageddo commented on GitHub (May 1, 2024):

Just to make it clear, this issue won't make DPS stop of working, just will produce a lot of unnecessary logs

<!-- gh-comment-id:2089246101 --> @mageddo commented on GitHub (May 1, 2024): Just to make it clear, this issue won't make DPS stop of working, just will produce a lot of unnecessary logs
Author
Owner

@mageddo commented on GitHub (May 1, 2024):

Version was released, you can reopen if the issue persists somehow

<!-- gh-comment-id:2089263204 --> @mageddo commented on GitHub (May 1, 2024): Version was released, you can reopen if the issue persists somehow
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/dns-proxy-server-mageddo#148
No description provided.