几天前我在我的本地测试机器上升级到 IPv6,从那时起我在连接到我的本地 PostgreSQL 服务器时遇到了一些问题。
我将主机设置为“localhost”,使用 IPv4 时效果很好。使用 IPv6 时,连接失败的几率为 1:150(这里是所有 unix 系统的测试用例,这是所有其他系统的另一个测试用例(需要 psycopg2 和 python3))。
事实证明这是因为环回接口 (lo0) 配置如下:
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>
第 5 行特别有趣。它说使用 IP 地址fe80::1
进行连接(实际上大约每 150 次使用一次)。
允许来自的所有连接(无密码)是否安全,fe80::1
或者我的 PC 恰好是本地网络的第一名?当我在另一个网络上时,我的 IP 可以更改吗(我曾经在 IPv4 上使用 10.0.0.1,但偶尔会根据我所在的位置更改)。
如果其他计算机也可以使用 fe80::1,我如何防止 postgresql 使用该地址连接到我的服务器?如果我将主机更改为“::1”,postgresql 甚至可以在不支持 IPv6 / 没有启用 IPv6 的网络(路由器)上工作吗?或者我是否需要使用 IPv4(即 127.0.0.1)来获得 100% 稳定的连接?
附加标签:IPv6、环回(抱歉,我还不能自己创建标签)。
所以这几乎可以肯定是 ip 地址解析中的错误配置。正如您提到的,您有一行将 localhost 解析为您的外部 ipv6 地址。是的,这应该被删除,或者从 fe80::1 更改为 ::1