온라인 소스에서 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
all
host
에 있는 줄 의 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