top | item 43934897

(no title)

zzq1015 | 9 months ago

For Linux, there's a kernel setting for that.

Just run

  sysctl -w net.ipv6.bindv6only=1
so IPv6 will not include IPv4-mapped addresses.

https://www.kernel.org/doc/Documentation/networking/ip-sysct...

discuss

order

jcalvinowens|9 months ago

It's important to emphasize it only changes the default behavior: unprivileged programs can still use setsockopt(..., IPPROTO_IPV6, IPV6_V6ONLY, ...) to override it. That's not a terribly uncommon thing to do, since different distros have historically used different defaults for the sysctl: you'll have to handle it either way.

majke|9 months ago

usually better to set IPV6_V6ONLY in the application itself.

eqvinox|9 months ago

This affects -to my best knowledge- only bind()ing, not outgoing connect()ing. As the name implies, really.

(I should try this, not entirely sure tbh.)

It won't help you though if the resolver library gives you a ::ffff:ma.p.p.ed address (yes they can do that), then you just fail to connect…

aaronmdjones|9 months ago

I did try this. connect(2) with an IPv4-mapped IPv6 address on an AF_INET6 socket with IPV6_V6ONLY set on it fails.