PostgreSQL 원격 연결 디버깅

PostgreSQL 원격 연결 디버깅

온라인 소스에서 PostgreSQL 데이터베이스에 연결하는 데 문제가 있습니다.

PostgreSQL은 제대로 설정된 것 같습니다. 기본 포트 5432에서 실행되고 있으며 postgresql.conf에는 다음 줄이 있습니다.

listen_addresses = '*'

pg_hba.conf에는 다음 내용이 있습니다

host    dbname    usname    all    md5

pgadmin에서 다음 자격 증명을 사용하여 다른 컴퓨터에서 PostgreSQL 데이터베이스에 연결할 수 있습니다.

Name              local
Host              192.xx.xx.xx
Port              5432
Maintenance DB    dbname
Username          usname
Password          psword

이것을 사용하면 완벽하게 연결할 수 있고 제대로 작동하는 것 같습니다.

그런 다음 ADSL 라우터에서 포트 192.xx.xx.xx:5432를 전달하고 공용 IP 주소 197.xx.xx.xx(인터넷 IP에 표시됨)를 사용하여 확인했습니다. http://www.canyouseeme.org/ 포트포워딩이 잘 되는 것을 알 수 있습니다.

SELinux를 비활성화하고 방화벽을 일시적으로 비활성화했습니다.

그러나 다음을 사용하여 연결하려고 하면

Name              online
Host              197.xx.xx.xx
Port              5432
Maintenance DB    dbname
Username          usname
Password          psword

서버가 수신하지 않는다는 오류 메시지가 나타납니다.

could not connect to server: Connection refused (0x0000274D/10061) Is the server running on host "197.xx.xx.xx" and accepting TCP/IP connections on port 5432?

왜 이런거야? 포트 전달을 통한 연결을 허용하려면 추가 단계를 추가해야 합니까?

답변1

allhost행의 CIDR 필드가 잘못되었습니다 pg_hba.conf.

기본 파일 자체의 주석 pg_hba.conf:

# 호스트 데이터베이스 사용자 CIDR 주소 방식 [옵션]

그리고

CIDR-ADDRESS는 레코드가 일치하는 호스트 집합을 지정합니다. IP 주소와 마스크의 유효 자릿수를 지정하는 정수(0~32(IPv4) 또는 128(IPv6) 사이)인 CIDR 마스크로 구성됩니다. 또는 별도의 열에 IP 주소와 넷마스크를 작성하여 호스트 세트를 지정할 수 있습니다.

이 시도:

host    dbname    usname      197.xx.xx.xx/32  md5

이렇게 하면 원격 호스트 197.xx.xx.xx에서만 usname에서 dbname으로의 연결이 허용됩니다.

전체 197.xx.xx /24 서브넷을 허용하려면 다음을 사용하세요.

host    dbname    usname      197.xx.xx.0/24  md5

관련 정보