【问题标题】:PostgreSQL Server doesn't listen: Tried everything and failedPostgreSQL 服务器不听:尝试了一切,但失败了
【发布时间】:2014-01-03 06:52:21
【问题描述】:

当尝试使用 pgAdmin 1.16.1 从远程 Windows 服务器连接到 PostgreSQL 时,我收到可怕的“服务器不听”消息,并显示“无法连接到服务器:连接超时 (0x0000274C/10060) 是服务器吗在主机 "xxx.xx.xxx.xx" 上运行并接受端口 5432' 上的 TCP/IP 连接。

我在 CentOS 6.4 上运行 PostgreSQL 9.3。到目前为止,这是我尝试过的:

  • 我可以使用 psql --username=postgres 在本地访问数据库。数据库在那里,它正在运行,我可以查询它
  • 在 postgresql.conf 中,我设置了

    listen_addresses = '*'
    port = 5432 
    
  • 在 pg_hba.conf 中,我将尝试访问数据库的服务器列为:

    host    all             all             xxx.xx.xxx.0/24         md5
    
  • SELinux 已关闭(getenforce 得到响应 Disabled)
  • 以防万一我已将端口 5432 添加到 IPTables

    iptables -A INPUT -p tcp -m tcp --dport 5432 -j ACCEPT
    
  • 我已经使用 psql 进入 postgresql 并设置了密码(尽管我确信它已经设置正确)

    ALTER USER postgres WITH PASSWORD '*************';
    
  • 键入netstat -an将这些引用提供给端口 5432(不确定它们是否相关):

    Proto Recv-Q Send-Q Local Address               Foreign Address             State      
    tcp        0      0 0.0.0.0:5432                0.0.0.0:*                   LISTEN      
    
    tcp        0      0 :::5432                     :::*                        LISTEN      
    
    Active UNIX domain sockets (servers and established)
    Proto RefCnt Flags       Type       State         I-Node Path
    unix  2      [ ACC ]     STREAM     LISTENING     677454 /tmp/.s.PGSQL.5432
    
  • 我可以从远程服务器ping到数据库服务器

  • 使用相同的 pgAdmin 安装从同一远程服务器连接到在 Ubuntu 上运行 PostgreSQL 9.1 的另一台服务器没有问题

我被难住了。有谁知道还有什么可能是错的?是的,我确实记得在更改配置文件后重新启动服务器。我相信我已经阅读了有关该主题的所有其他帖子。

【问题讨论】:

  • 您在尝试连接时是否在 PostgreSQL 服务器日志中看到任何内容?如果有疑问,请启动 Wireshark 并查看网络接口上发生了什么。
  • @CraigRinger 当我尝试连接时,PostgreSQL 服务器日志没有显示任何内容。运行telnet xxx.xx.xxx.xx 5432 也无法连接,而telnet xxx.xx.xxx.xx 22 可以。在数据库服务器上运行 telnet localhost 5432 连接。不知道如何解释。仍在尝试了解 Wireshark 可以为我做什么,但我不需要在数据库服务器上安装它 - 据我所知,没有 Linux 版本。
  • 听起来像防火墙。至于 Wireshark,是的,肯定有 Linux 版本!几乎每个发行版都有它的包装。 yum install wireshark-gnome 在 Fedora 上;在 CentOS 上可能是一样的。
  • 抱歉,我的服务器上没有 GUI。我现在进一步确认我可以从数据库服务器本身通过 ODBC 访问数据库。我认为这几乎可以将其缩小到防火墙问题。我会让熟悉 linux 防火墙的人来看看。
  • 好主意。仅供参考,还有一个仅限命令行的wireshark。

标签: postgresql centos


【解决方案1】:

也许你忘了添加 OUTPUT 规则?

iptables -A INPUT -p tcp -s 0/0 --sport 1024:65535 -d xx.xx.xx.xx  --dport 5432 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp -s xx.xx.xx.xx --sport 5432 -d 0/0 --dport 1024:65535 -m state --state ESTABLISHED -j ACCEPT

xx.xx.xx.xx - your server IP

【讨论】:

  • 我现在已经添加了输出行,但仍然没有运气。
  • @MiG62:使用iptables -nvL 查看匹配的规则。如图所示,使用iptables -A ... 添加的规则如果在链中存在向上反击的 REJECT/DROP 规则,则无效。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 2014-09-21
  • 2019-06-24
  • 1970-01-01
相关资源
最近更新 更多