Skip to content

Negotiating IPv6 Transition at the Application Layer #1124

@Jxck

Description

@Jxck

Hi Team,

I’m currently trying to make my blog (https://blog.jxck.io) IPv6-only to access.

Since I configure DNS to response both A/AAAA records, so I could achieve this by simply dropping the A record. But the problem is that users on IPv4 would see the site as "Down" since they only see Error page provided by Browser.

Image

So I keep both A/AAAA records, but have the server return a 403 error whenever the source IP is IPv4.

For a human visitor, this is manageable because they can read the error message and switch to a other connection(tethering to mobile, use Cloudflare WARP etc). The real issue is with bots and crawlers. Right now, OGP previews on platforms like Chat Service, SNS have stopped working.

Some of these bots are actually IPv6-capable. Even so, if they start by choosing the IPv4 path, they just give up as soon as they hit the 403. They don't try to reconnect over IPv6.

I wanna way to tell these connections that they should try again over IPv6, but current HTTP specs doesn't have a way to suggest such a thing. I’ve thought about using a 426 Upgrade Required status with an "Upgrade: ipv6" header, but that was really designed for changing protocols within an existing connection, so it's not for migrating IP layers.

Maybe we need a new status code, like a "4xx IPv6 Only" type of response.

To push for IPv6 adoption in the long run, I believe we need a way to reject IPv4 traffic while keeping the dual-stack setup, and guiding client toward to IPv6. I realize this discussion is just a "Layer Violation". However, IPv4 addresses are exhausted and some vendors are already starting to charge for them. As the cost of maintaining IPv4 rises, more people will want to force the transition to IPv6. If we had an application-layer mechanism to negotiate this, it would help the entire ecosystem move forward.

Do you think it would be possible to achieve this "forced v6 guidance" by extending something like Alt-Svc or the Happy Eyeballs algorithm? Or do we need something like an HTTP redirect at the DNS level? Should we be looking at a completely different approach within HTTP semantics?

I’d love to hear your thoughts or any ideas you might have.

Thanks
Jxck

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions