Atualizei alguns dias atrás para IPv6 em minha máquina de teste local e, desde então, tenho enfrentado alguns problemas ao conectar-me ao meu servidor PostgreSQL local.
Eu defini o host como 'localhost', que funcionou bem usando IPv4. Ao usar o IPv6, há uma chance de 1:150 de que a conexão falhe ( aqui está um caso de teste para todos os sistemas unix e outro para todos os outros sistemas (requer psycopg2 e python3)).
Acontece que é porque a interface de loopback (lo0) está configurada assim:
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
options=3<RXCSUM,TXCSUM>
inet6 ::1 prefixlen 128
inet 127.0.0.1 netmask 0xff000000
inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 # line 5
nd6 options=1<PERFORMNUD>
A linha 5 é especialmente interessante. Ele diz usar o endereço IP fe80::1
para conexões (e que é realmente usado a cada 150 vezes).
É seguro permitir todas as conexões (sem senha) fe80::1
ou meu PC é o número um na rede local? Meu IP pode mudar quando estou em outra rede (eu costumava 10.0.0.1 em IPv4, mas isso mudava ocasionalmente dependendo de onde estou).
Se outros computadores também podem usar fe80::1, como posso evitar que o postgresql se conecte ao meu servidor usando esse endereço? Se eu mudar o host para "::1", o postgresql funcionará mesmo em redes (roteadores) que não suportam IPv6 / não habilitaram o IPv6? Ou preciso usar IPv4 (ou seja, 127.0.0.1) para uma conexão 100% estável?
Tags adicionais: IPv6, loopback (desculpe, mas ainda não posso criar tags sozinho).
Portanto, esta é quase certamente uma configuração ruim na resolução do endereço IP. Como você mencionou, você tem uma linha resolvendo localhost para seu endereço ipv6 externo. Sim, isso deve ser removido ou alterado de fe80::1 para ::1