修改PostgreSQL pg_hba.conf的IPv6地址后服务启动失败是什么原因?
报错原因分析
- 核心原因:IPv6地址缺失子网前缀长度
原来的默认配置里::1/128的/128是IPv6的子网前缀长度,属于必填参数。你替换地址时没有保留该后缀,PostgreSQL解析配置行时会把后一个字段md5当成子网掩码读取,自然触发invalid IP mask "md5"的报错。
如果是仅允许对应单个IPv6地址访问,修正后写法应为:
如果是允许整个家庭IPv6网段访问,通常家庭IPv6前缀为/64,可修改为:host all all 1111:2222:a111:a11:b222:11a:abcd:efg/128 md5host all all 1111:2222:a111:a11::/64 md5 - 次要原因:IPv6地址格式非法
你示例中的IPv6地址末尾段为efgs,而IPv6是十六进制地址,仅允许出现0-9、a-f/A-F的字符,出现g这类非法字符也会导致地址解析失败。 - 额外注意事项
如果仅需要家庭内网设备访问,不需要填写从谷歌查到的公网IPv6地址,直接填写内网网段即可;也可以直接新增IPv4内网访问规则,比如家庭内网网段为192.168.1.0/24,新增如下规则更稳定,不会随公网IP变动失效:
另外修改host all all 192.168.1.0/24 md5pg_hba.conf后需要确认postgresql.conf中的listen_addresses参数配置为*或者你服务器对应的网卡地址,默认仅监听localhost的话,外部设备依然无法连接。
内容的提问来源于stack exchange,提问作者Helene
相关产品推荐
相关产品推荐

