[IGN-13927] IPv6 Compatibility

Is there any documentation relative to the compatibility of Ignition with IPv6 ?

From what perspective? There are a lot of interactions between the network and Ignition. Are you concerned with the GAN, Database Connections, Device Connections, etc...

It isn't. Or rather, every place in the codebase where network addresses are connected or bound is a unique case, and this includes add-on modules. I don't think it has even been audited. You could do some testing. I suspect that the general web API is compatible (Jetty is the underlying tech). I've made a point to have my drivers accept IPv6 literals for those where the underlying protocol doesn't restrict it.

Thank you for your answers. I am concerned with the following:

  • Database Connections
  • OPC Connections
  • Potentials side effects on Redundancy
  • Compatibility with IDP using SAML

Please let us know what you find.

3 Likes

bump, any update on IPv6 compatibility? Currently trying OPC Connections but doesn't appear to be working yet. Gateway is saying 'invalid IPv6 address literal' but haven't found a way to make it happy yet. The OPC Connections wizard makes it all the way to the end with a url formatted like this, opc.tcp://[fd10:1234:1234::10]:4840, but no luck after finishing the wizard setup.

If you turn the logger com.inductiveautomation.ignition.gateway.opcua.client.ClientManager to DEBUG level you might get some additional information in the logs.

I don’t think the ClientManager is parsing the name correctly. Here’s the info from the ClientManager Logs and Error. Like my message from last year, I was able to make it through OPC Connections Wizard with the IPv6 address but it never connects successfully.

Things I’ve tried:

  • Removed square brackets from Endpoint Host Override. It seems to just parse it like IPv4 where it thinks 2 is the port number
  • Removed Endpoint URL, didn’t notice a change

image

java.net.UnknownHostException: [fc00: invalid IPv6 address literal at java.base/java.net.InetAddress.invalidIPv6LiteralException(Unknown Source) at java.base/java.net.InetAddress.getAllByName(Unknown Source) at java.base/java.net.InetAddress.getAllByName(Unknown Source) at java.base/java.net.InetAddress.getByName(Unknown Source) at io.netty.util.internal.SocketUtils$8.run(SocketUtils.java:156) at io.netty.util.internal.SocketUtils$8.run(SocketUtils.java:153) at java.base/java.security.AccessController.doPrivileged(Unknown Source) at io.netty.util.internal.SocketUtils.addressByName(SocketUtils.java:153) at io.netty.resolver.DefaultNameResolver.doResolve(DefaultNameResolver.java:41) at io.netty.resolver.SimpleNameResolver.resolve(SimpleNameResolver.java:61) at io.netty.resolver.SimpleNameResolver.resolve(SimpleNameResolver.java:53) at io.netty.resolver.InetSocketAddressResolver.doResolve(InetSocketAddressResolver.java:55) at io.netty.resolver.InetSocketAddressResolver.doResolve(InetSocketAddressResolver.java:31) at io.netty.resolver.AbstractAddressResolver.resolve(AbstractAddressResolver.java:106) at io.netty.bootstrap.Bootstrap.doResolveAndConnect0(Bootstrap.java:220) at io.netty.bootstrap.Bootstrap.access$000(Bootstrap.java:47) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:189) at io.netty.bootstrap.Bootstrap$1.operationComplete(Bootstrap.java:175) at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590) at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557) at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492) at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636) at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:625) at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:105) at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) at io.netty.channel.AbstractChannel$AbstractUnsafe.safeSetSuccess(AbstractChannel.java:988) at io.netty.channel.AbstractChannel$AbstractUnsafe.register0(AbstractChannel.java:515) at io.netty.channel.AbstractChannel$AbstractUnsafe.access$200(AbstractChannel.java:428) at io.netty.channel.AbstractChannel$AbstractUnsafe$1.run(AbstractChannel.java:485) at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:469) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:569) at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:994) at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) at java.base/java.lang.Thread.run(Unknown Source) 8.1.47 (b2025022612) Azul Systems, Inc. 17.0.13

Can you provide the logs? Why isn’t there an endpoint URL configured?

Can you try it without the Host Override configured?

I can probably send the logs directly to you but not on the forum due to security reasons. There was an Endpoint URL configured but I deleted it before the screenshot to see if anything changed. Removing the Host Override didn’t work. I don’t have a DNS server so the host lookup failed and it errored with “No such host is known”

Ah, so the server is not configured in a way that it returns any endpoint URLs with an ipv6 address in the URL, so you need to force that change with Host Override. Unfortunately the logic for swapping out the hostname provided by Host Override is obviously broken for ipv6 addresses.

Surely you are using SLAAC and RDNSS if you don’t have and IPv6 DNS server? The hostname would work just fine if you were I think…