On macOS, you might be able to use /etc/resolver to fix this:
sudo sh -c 'echo "nameserver 192.168.1.1" > /etc/resolver/captive.apple.com'
I did this for an internal website at my university that could only be resolved using the network name server. It just occurred to me that it might also work for the URL macOS uses to detect captive portals. We'll have to see if it works the next time I'm at a café.prefer this form:
echo "nameserver 192.168.1.1" | sudo tee /etc/resolver/captive.apple.com
I think what may happen with this is:
Captive.apple.com resolves to captive portal domain
Captive portal domain fails to resolve because the portal is private and Google DNS doesn’t know about it.
Might work for captive portals that Google can resolve though?