IPv6 does not replace IPv4

TLDR: IPv6 is not a "substitute" for IPv4. Each protocol has its own advantages, and networks should be designed to support both protocols to the maximum advantage possible. However, IPv6 should be preferred over IPv4

Many people, when they talk about the IPv6 transition, talk about how IPv6 is "replacing" IPv4. The overall goal of this is to replace IPv4 with IPv6 to the point where the entire Internet is starting to use IPv6.

While IPv6 and IPv4 both accomplish Internet connectivity, they are not substitutes. That is, IPv6 should not be seen as a complete replacement of IPv4. Instead, in our network, we view each protocol like this:

IPv4:

Advantages

  • Widely supported on most networks and ISPs
  • Can reach almost the entire Internet
  • More data can be transferred per packet

Disadvantages

  • Requires NAT
  • Requires a larger relative share of the address space for each address that is used. Applies to networks of any nature, public or private.

IPv6:

Advantages

  • Much bigger address space; use of addresses is not seen as a waste unless you use, say, /48 as a standard assignment to every server on your network (/56 or /60 is standard for ISP customers, /64 for individual servers)
  • No NAT
  • Parts of the Internet still reachable over IPv6
  • Support for stable link-local addresses independent of global or unique local addresses

Disadvantages

  • Less software support
  • Some parts of the Internet still only reachable over IPv4

These advantages and disadvantages should be considered at the level of every network connection that exists in the network, rather than a simple decision of "should I go IPv4-only, IPv6-only, or dual stack?"

Our viewpoint

Our viewpoint is "IPv6 if you can, IPv4 if you must." That is, if you can use IPv6, then use it. Only if IPv6 is not supported for a certain use case, then use IPv4. In our opinion, neither protocol is better than the other, but we still lean towards IPv6 if we can use it.

For example, our local network mail server supports IPv6 connectivity for both inbound and outbound. Since the only client is on our IPv6-enabled home network, we use IPv6 here.

Our internal network VoIP phones only support IPv4, so we use IPv4 only because we're forced to.

Imagine if we had a service that was IPv6 only. If we connect from our home network or my cell phone network (T-Mobile), then we can reach it. Otherwise, it needs to be dual stack.

There is almost no reason why a certain service needs to be IPv4 only. There is one service (0 and 255 Test) which is IPv4-only, but that's only because the test is specific to the IPv4 protocol.

Interestingly enough, our GitLab server backend is IPv6-only, and IPv4 connectivity is only provided via Cloudflare.