如何配置PostgreSQL以接受指定IPv6地址的传入连接
PostgreSQL pg_hba.conf IPv6配置及连接问题解决
1. IPv6规则的斜杠后缀说明
- 斜杠后的数值是IPv6的CIDR前缀长度,必须保留斜杠和后缀,逻辑和IPv4的CIDR规则完全一致:
- 仅允许单个指定IPv6地址访问时,后缀填
128,你的示例规则应写为:host all all 1:2:3:4:5:6:7:8/128 md5 - 如需开放连续的IPv6地址段,根据实际网段的前缀长度填写即可,比如常用的/64就是开放整个/64网段下的所有地址访问。
- 仅允许单个指定IPv6地址访问时,后缀填
2. trust规则配置后仍登录失败的解决方法
按以下顺序排查即可:
- 先检查规则匹配顺序:pg_hba.conf的匹配逻辑是从上到下匹配,命中第一条符合条件的规则就终止匹配。请确认你写的IPv6 trust规则上方,没有更早命中的同网段/同IP的其他认证规则(比如md5、scram-sha-256规则),如果有就把当前trust规则挪到同IP规则的最上方。
- 核对客户端实际出口IPv6地址:不要直接填内网IPv6地址,在客户端所在设备上执行
curl 6.ipw.cn或者ifconfig/ip addr命令,确认公网出口IPv6地址和你配置的xxxx:xxxx:xxxx:ccc:xxxx:xxxx:xxxx完全一致。 - 重载PostgreSQL配置使其生效:修改pg_hba.conf后必须重载配置才会生效,执行对应系统的重载命令即可,比如Debian/Ubuntu系统执行
sudo systemctl reload postgresql,源码安装的可以执行pg_ctl reload。 - 确认用户密码状态:检查postgres用户是否真的设置了空密码,执行SQL
SELECT passwd FROM pg_shadow WHERE usename = 'postgres';,如果passwd字段不为空,即使配置了trust也无法用空密码登录,你可以先把规则的trust改成md5,填写正确的postgres用户密码测试连通性,确认没问题后再调整认证方式。 - 查看PostgreSQL日志定位具体错误:日志默认存放在
/var/log/postgresql/目录下,日志会明确标注是规则未命中、密码错误还是权限限制导致的连接失败。
内容的提问来源于stack exchange,提问作者thefonso
相关产品推荐
相关产品推荐

