IPv6 enabled websites are steadily increasing as the availability of IPv4 addresses continue to diminish. While most current company network architectures already support IPv4, it is crucial that applications be ready to support the new IPv6. Migrating to IPv6 is not easy and challenges may arise involving both the network and application layers, as zveloLABS.
At the network layer, one challenge that may arise is when an ISP does not support IPv6. There are a few workarounds; including using IPv6 tunneling and/or tunnel brokers to enable IPv6 connectivity. Hurricane Electric, Freenet6 and SixXS are among the most popular companies that provide IPv6 connectivity solutions. zvelo made similar arrangements with our ISP providers to address the network requirements for processing URLS that reside within IPv6 networks.
The modification of programming libraries presents its own challenges, as approaches implemented by programming languages to support IPv6 differ from one another. Some programming languages, like C/C++, Perl and PHP, do not support IPv6 natively. This means that many libraries will not be backwards compatible when IPv6 support is added to them.
A specific example of this is Perl 5.10, which does not support IPv6. External modules such as Net::INET6Glue, Socket6, IO::Socket::INET6 and IO::Socket::IP take care of some aspects of the needed support, but none of them cover all of the necessary upgrades. Since the developer community is still currently in process of supporting IPv6, there is a possibility that these modules will not be backwards compatible as well.
After testing a number of the external modules listed above, we concluded IO::Socket::IP was the best match for our needs. Its purpose is to replace the IO::Socket::INET module which plays an important role in developing networking applications. IO::Socket::IP also supports both IPv4 and IPv6. In Perl 5.10, this module is dependent with the Socket6 module, which coincidentally will no longer be required in Perl 5.14. In testing, it was found that the IO::Socket::IP module did require some additional changes on top of the support it offered. One example of this was found in the Net::HTTP module where the code to parse a URL was retrieving the port by using a colon as a delimiter (which conflicted with the IPv6 address which uses a colon as a separator).
In the near future, websites that use IPv6 will coexist with other IPv4 sites. IPv6 will not immediately replace IPv4, though.
As initially stressed, supporting IPv6 comes with many challenges. Finding the right workaround may boil down to experimentation. zveloLABS trusts that the sharing of our own findings proves beneficial in finding something that works to ensure IPv6 connectivity.