Skip to content

NullPointerException when queried for AAAA/IPv6 record #474

@sh3bang

Description

@sh3bang

If your docker host are reachable by IPv6 and IPv4 (Dual-Stack) then DPS will also be queried for AAAA and A record if configured as primary DNS proxy. But without IPv6 support within container environment DPS will fail with noisy NullPointerException.

Query A record only:

[paul@manjaro ~]$ nslookup
> server 10.5.0.2
Default server: 10.5.0.2
Address: 10.5.0.2#53
> set type=A
> nginx.docker
Server: 10.5.0.2
Address: 10.5.0.2#53

Non-authoritative answer:
Name: nginx.docker
Address: 10.5.0.3

Query for A and AAAA

[paul@manjaro ~]$ nslookup
> server 10.5.0.2
Default server: 10.5.0.2
Address: 10.5.0.2#53
> nginx.docker
Server: 10.5.0.2
Address: 10.5.0.2#53

Non-authoritative answer:
Name: nginx.docker
Address: 10.5.0.3
** server can't find nginx.docker: NXDOMAIN

Exception log:

[paul@manjaro ~]$ docker logs dps -f
13:49:55.808 [main ] DEB c.m.d.config.dataprovider.ConfigDAOJson l=38 m=find configPath=/app/conf/config.json
13:49:55.825 [main ] INF c.m.d.s.d.a.DpsDockerEnvironmentSetupService l=32 m=setup status=binding-docker-events, connectedToDocker=true
13:49:55.825 [main ] INF c.m.d.s.d.a.DpsDockerEnvironmentSetupService l=44 m=setupNetwork status=dpsNetwork, active=false
13:49:55.825 [main ] INF c.m.d.s.docker.application.DpsContainerService l=102 m=tRunningContainersToDpsNetwork status=autoConnectDpsNetworkDisabled, dpsNetwork=false, dpsNetworkAutoConnect=false
13:49:55.825 [main ] INF c.m.d.solver.docker.entrypoint.EventListener l=32 m=onStart status=containerAutoConnectToDpsNetworkDisabled
13:49:55.825 [main ] INF com.mageddo.dnsserver.UDPServerPool l=31 m=start Starting UDP server, addresses=/0.0.0.0:53
13:49:55.825 [main ] INF c.mageddo.dnsproxyserver.server.dns.ServerStarter l=30 m=start status=startingDnsServer, protocol=UDP_TCP, port=53
13:49:55.825 [Thread-4 ] INF com.mageddo.dnsserver.TCPServer l=50 m=start0 status=tcpServerStarting, port=53
13:49:55.826 [main ] INF com.mageddo.http.WebServer l=134 m=start status=startingWebServer, port=5380
13:50:00.877 [Thread-1 ] INF c.m.d.dnsconfigurator.DnsConfigurators l=113 m=getInstance0 usingDnsConfigurator=DnsConfiguratorLinux
13:50:00.877 [Thread-1 ] INF c.m.d.dnsconfigurator.linux.DnsConfiguratorLinux l=91 m=lambda$findBestConfFile$0 status=noValidConfFile, file=/host/etc/systemd/resolved.conf
13:50:00.877 [Thread-1 ] INF c.m.d.dnsconfigurator.linux.DnsConfiguratorLinux l=91 m=lambda$findBestConfFile$0 status=noValidConfFile, file=/host/etc/resolv.conf
13:50:00.877 [Thread-1 ] INF c.m.d.dnsconfigurator.linux.DnsConfiguratorLinux l=91 m=lambda$findBestConfFile$0 status=noValidConfFile, file=/etc/systemd/resolved.conf
13:50:00.877 [Thread-1 ] INF c.m.d.dnsconfigurator.linux.DnsConfiguratorLinux l=122 m=init status=using, configFile=ResolvFile(path=/etc/resolv.conf, type=RESOLVCONF)
13:53:55.373 [Thread-17 ] WAR c.m.d.server.dns.RequestHandlerDefault l=101 m=solveAndSummarizeHandlingError status=solverFailed, currentSolverTime=8, totalTime=8, solver=SolverDocker, query=query=AAAA:nginx.docker, eClass=NullPointerException, msg=null
java.lang.NullPointerException: null
at com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper.NetworkMapper.findGatewayIp(NetworkMapper.java:39)
at com.mageddo.dnsproxyserver.solver.docker.dataprovider.mapper.NetworkMapper.of(NetworkMapper.java:17)
at [email protected]/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at [email protected]/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
at [email protected]/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at [email protected]/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at [email protected]/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575)
at [email protected]/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
at [email protected]/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616)
at [email protected]/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622)
at [email protected]/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627)
at com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAODefault.findNetworks(DockerDAODefault.java:53)
at com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAODefault.findBestNetwork(DockerDAODefault.java:39)
at com.mageddo.dnsproxyserver.solver.docker.dataprovider.DockerDAODefault.findHostMachineIp(DockerDAODefault.java:35)
at com.mageddo.dnsproxyserver.solver.docker.application.ContainerSolvingService.lambda$buildHostMachineIpWhenActive$6(ContainerSolvingService.java:131)
at com.mageddo.dnsproxyserver.solver.docker.application.ContainerSolvingService.buildHostMachineIpWhenActive(ContainerSolvingService.java:132)
at com.mageddo.dnsproxyserver.solver.docker.application.ContainerSolvingService.lambda$findSecondaryIp$5(ContainerSolvingService.java:114)
at [email protected]/java.util.Optional.orElseGet(Optional.java:364)
at com.mageddo.dnsproxyserver.solver.docker.application.ContainerSolvingService.findSecondaryIp(ContainerSolvingService.java:114)
at com.mageddo.dnsproxyserver.solver.docker.application.ContainerSolvingService.lambda$findBestIpMatch$2(ContainerSolvingService.java:66)
at [email protected]/java.util.Optional.orElseGet(Optional.java:364)
at com.mageddo.dnsproxyserver.solver.docker.application.ContainerSolvingService.findBestIpMatch(ContainerSolvingService.java:66)
at com.mageddo.dnsproxyserver.solver.docker.application.ContainerSolvingService.lambda$findBestMatch$0(ContainerSolvingService.java:42)
at [email protected]/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at [email protected]/java.util.AbstractList$RandomAccessSpliterator.tryAdvance(AbstractList.java:708)
at [email protected]/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129)
at [email protected]/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527)
at [email protected]/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
at [email protected]/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at [email protected]/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
at [email protected]/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at [email protected]/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647)
at com.mageddo.dnsproxyserver.solver.docker.application.ContainerSolvingService.findBestMatch(ContainerSolvingService.java:44)
at com.mageddo.dnsproxyserver.solver.SolverDocker.lambda$handle$0(SolverDocker.java:40)
at com.mageddo.dnsproxyserver.solver.HostnameMatcher.match(HostnameMatcher.java:22)
at com.mageddo.dnsproxyserver.solver.SolverDocker.handle(SolverDocker.java:39)
at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solveAndSummarize(RequestHandlerDefault.java:115)
at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solveAndSummarizeHandlingError(RequestHandlerDefault.java:99)
at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solve(RequestHandlerDefault.java:82)
at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solveFixingCacheTTL(RequestHandlerDefault.java:73)
at com.mageddo.dnsproxyserver.solver.SolverCache.lambda$handleRes$0(SolverCache.java:38)
at com.mageddo.commons.caching.LruTTLCache.lambda$computeIfAbsentWithTTL$1(LruTTLCache.java:94)
at [email protected]/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1916)
at com.mageddo.commons.caching.LruTTLCache.lambda$computeIfAbsentWithTTL$2(LruTTLCache.java:88)
at [email protected]/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1916)
at com.mageddo.commons.caching.LruTTLCache.computeIfAbsentWithTTL(LruTTLCache.java:86)
at com.mageddo.dnsproxyserver.solver.SolverCache.handleRes(SolverCache.java:36)
at com.mageddo.dnsproxyserver.solver.SolverCache.handle(SolverCache.java:31)
at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solveCaching(RequestHandlerDefault.java:66)
at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.handle(RequestHandlerDefault.java:54)
at com.mageddo.dnsserver.UDPServer.handle(UDPServer.java:55)
at com.mageddo.dnsserver.UDPServer.lambda$start0$0(UDPServer.java:43)
at [email protected]/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:577)
at [email protected]/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at [email protected]/java.lang.Thread.run(Thread.java:1589)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:775)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:203)
13:53:55.373 [Thread-17 ] WAR c.m.d.server.dns.RequestHandlerDefault l=56 m=handle status=solverFailed, totalTime=8, eClass=NullPointerException, msg=null
java.lang.NullPointerException: null
at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solve(RequestHandlerDefault.java:83)
at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solveFixingCacheTTL(RequestHandlerDefault.java:73)
at com.mageddo.dnsproxyserver.solver.SolverCache.lambda$handleRes$0(SolverCache.java:38)
at com.mageddo.commons.caching.LruTTLCache.lambda$computeIfAbsentWithTTL$1(LruTTLCache.java:94)
at [email protected]/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1916)
at com.mageddo.commons.caching.LruTTLCache.lambda$computeIfAbsentWithTTL$2(LruTTLCache.java:88)
at [email protected]/java.util.concurrent.ConcurrentHashMap.compute(ConcurrentHashMap.java:1916)
at com.mageddo.commons.caching.LruTTLCache.computeIfAbsentWithTTL(LruTTLCache.java:86)
at com.mageddo.dnsproxyserver.solver.SolverCache.handleRes(SolverCache.java:36)
at com.mageddo.dnsproxyserver.solver.SolverCache.handle(SolverCache.java:31)
at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.solveCaching(RequestHandlerDefault.java:66)
at com.mageddo.dnsproxyserver.server.dns.RequestHandlerDefault.handle(RequestHandlerDefault.java:54)
at com.mageddo.dnsserver.UDPServer.handle(UDPServer.java:55)
at com.mageddo.dnsserver.UDPServer.lambda$start0$0(UDPServer.java:43)
at [email protected]/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:577)
at [email protected]/java.util.concurrent.FutureTask.run(FutureTask.java:317)
at [email protected]/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
at [email protected]/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
at [email protected]/java.lang.Thread.run(Thread.java:1589)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:775)
at org.graalvm.nativeimage.builder/com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:203)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugconfirmedUnexpected behavior (bug) which was reproduced by repo owners

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions