Is anybody using only IPv6 in their home lab? I keep running into weird problems where some services use only IPv6 and are "invisible" to everyone (I'm looking at you, Java!) I end up disabling IPv6 to force everything to the same protocol, but I started wondering, "why not disable IPv4 instead?" I'd have half as many firewall rules, routes and configurations. What are the risks?
Are you binding services to specific addresses? Normally if you bind your service to :: it will receive IPv4 connections using ::ffff:x.x.x.x addresses.
I was not binding to specific adresses, but was probably a problem with a specific release of Java (Oracle Java maybe.) My distro's Java was doing weird video things, but the Oracle version was not, but then it could not reach outside the local computer. Debugging logs showed that it tried IPv6 and failed, then quit trying instead of falling back to IPv4. Disabling IPv6 in the Java JRE configuration solved the issue, but set me on the path to "modernize" my network stack. In hindsight, it's probably not something that I really have the time to take on right now.
Trying IPv6 and failing is normal. Modern software that supports both is supposed to try both, but sometimes people mess it up…
In general, if you write code that connects to another computer over the network, you want to be connecting to a string, not an IP address. If you write something like connect("lemmy.world", 443), it should connect over either IPv6 or IPv4. However, if you write something like connect(getHostByName("lemmy.world"), 443), that usually will return a single IP address and if that address doesn't work then the connection fails.