Linux: Block IPv6 for certain applications / hostnames
Solution 1:
You can control address selection with /etc/gai.conf
. The configuration file is well documented, and already contains the defaults, so you can just begin tweaking.
The interesting defaults here are:
label ::1/128 0
label ::/0 1
label 2002::/16 2
label ::/96 3
label ::ffff:0:0/96 4
precedence ::1/128 50
precedence ::/0 40
precedence 2002::/16 30
precedence ::/96 20
precedence ::ffff:0:0/96 10
The last line gives the lowest preference to all IPv4 addresses.
If you want to give a higher preference to all IPv4, you could change it to:
precedence ::ffff:0:0/96 100
If you only wanted to give higher preference to specific IPv4 addresses or blocks, you can specify them as well. Remember that you have to use an IPv4-mapped IPv6 in hex.
So, to give preference to 203.0.113.0/24 over all IPv6, you would add:
label ::ffff:cb00:7100/120 5
precedence ::ffff:cb00:7100/120 100
Restart running applications to have them pick up changes you make.
On Debian derived systems, /etc/gai.conf
is already present. On Red Hat derived systems, it is absent, but a sample file is located at /usr/share/doc/glibc-common-*/gai.conf
; just copy it to /etc
.
Solution 2:
OK, here's a completely different answer.
Place the offending hosts with crappy IPv6 connectivity in /etc/hosts
with their corresponding IPv4 address.
For example:
199.7.53.74 whois.verisign-grs.com
Remember to remove them when their (in this case) or your IPv6 connectivity improves.