Kamailio 5.0连接PostgreSQL数据库失败求助(Ubuntu 16.04 LTS)
我之前在Ubuntu 16.04上折腾Kamailio 5.0对接PostgreSQL时,也碰到过这种反复要求密码最终失败的坑,给你分享几个我当时排查解决的关键点:
检查PostgreSQL的认证策略
默认情况下,PostgreSQL对本地用户采用peer认证(依赖系统用户身份匹配),但Kamailio通常会用单独的数据库用户(比如kamailio),这时候就会触发认证失败。你需要修改pg_hba.conf文件(路径一般是/etc/postgresql/9.5/main/pg_hba.conf,Ubuntu 16.04默认PostgreSQL版本是9.5):
找到本地连接的配置行,将peer改为md5(生产环境推荐)或trust(仅测试用,不安全):# "local" is for Unix domain socket connections only local all all md5修改后重启PostgreSQL服务:
sudo systemctl restart postgresql确认数据库用户与权限配置正确
确保你已经为Kamailio创建了正确的PostgreSQL用户和数据库,并且设置了密码:
登录PostgreSQL控制台执行以下命令:CREATE USER kamailio WITH PASSWORD 'your_secure_password'; CREATE DATABASE kamailio OWNER kamailio; GRANT ALL PRIVILEGES ON DATABASE kamailio TO kamailio;注意密码不要包含特殊字符或空格,避免Kamailio配置解析出错。
核对Kamailio配置文件中的数据库连接参数
打开kamailio.cfg,确认数据库连接URL的用户名、密码和数据库名完全匹配你在PostgreSQL中创建的内容:#!define DBURL "postgres://kamailio:your_secure_password@localhost/kamailio" loadmodule "db_postgres.so" modparam("db_postgres", "url", DBURL)PostgreSQL对用户名大小写敏感,默认都是小写,别写错了。
测试数据库连接的可用性
先脱离Kamailio,直接用命令行测试连接是否正常:psql -U kamailio -d kamailio -h localhost如果输入密码后能成功登录,说明数据库端没问题,问题可能出在Kamailio的运行权限或配置细节上。
检查Kamailio运行用户的权限
Kamailio默认以kamailio系统用户运行,确保这个用户能访问PostgreSQL的Unix socket(一般在/var/run/postgresql/目录),或者确认PostgreSQL允许TCP连接:
修改postgresql.conf(同目录下),设置listen_addresses = 'localhost',然后重启PostgreSQL服务。查看Kamailio日志定位具体错误
查看Kamailio的日志文件(/var/log/kamailio/kamailio.log),里面会有更详细的错误信息:- 如果日志显示
FATAL: password authentication failed for user "kamailio",说明密码或用户名不匹配; - 如果显示
FATAL: Peer authentication failed for user "kamailio",说明还是pg_hba.conf的认证方式没改对。
- 如果日志显示
内容的提问来源于stack exchange,提问作者Vivek Gupta

