Remix.run Logo
apitman 2 days ago

If I have a bunch of machines on my network and want them all to be able to access the internet, I can use NAT and let them all share a single IP. No one on the internet needs to do anything.

If I have a bunch of servers and want them to be accessible by the internet, I can use SNI and let them all share a single IP, again with no special action required by those connecting.

With IPv6, it doesn't solve case 1 until all the servers on the internet support IPv6. AFAIK it doesn't support case 2 either, because you would need some way to route an incoming IPv4 connection to the right IPv6 server. IDK maybe there's a way.

imoverclocked 2 days ago | parent [-]

For case 1, there is nat64. IPv6-only clients can use a special dns (dns64) to get access to the IPv4-only hosts while being able to talk directly to IPv6 hosts. It doesn't even require special support on the client.

For case 2, a dual-stack reverse-proxy will do the job and can talk to the IPv6-only servers without issue.

apitman a day ago | parent [-]

But you're still using NAT and SNI for IPv4 hosts, so there's little incentive to add the complexity of IPv6.

imoverclocked a day ago | parent [-]

Yes, but then you get native connectivity for “free.“ Turning your argument around, there is little reason to deal with the continued complexity of IPv4 (requiring NAT and SNI) just to talk to the remaining global NAT front-ends when it can all be skipped for direct communication over native IPv6.

BTW, NAT doesn’t scale forever. There are often several layers of NAT in carrier implementations and the port mapping issue alone can dictate the maximum number of clients-per-global-IPv4 address. One of the reasons NAT and IPv4 can still work is because much of the world has shifted to IPv6.