当目的地也是该接口时,如何通过接口添加ip route来路由通信量

我一直在testingkeepalived,并准备推出我的vps。

我的设置是:

(...) 2: ens4: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether ab:cd:ef:ab:cd:ef brd ff:ff:ff:ff:ff:ff inet xxx.xxx.xxx.xxx/24 brd xxx.xxx.xxx.xxx scope global ens4 valid_lft forever preferred_lft forever inet 192.168.1.2/24 scope global ens4:1 valid_lft forever preferred_lft forever inet 192.168.1.3/24 scope global secondary ens4:2 valid_lft forever preferred_lft forever 

192.168.1.2是私人IP地址“寻找”私人networking(由我的托pipe服务提供商分配) 192.168.1.3是浮动IP,也在专用networking(由我的托pipe服务提供商分配)

我有一个单独的主机, 192.168.1.99 ,我想通过我的浮动IP路由stream量。 所以在keepalived,主机成为主人时,我正在添加这些路线:

 ip route add 192.168.1.3/32 via 192.168.1.3 dev ens4 src 192.168.1.3 ip route add 192.168.1.99/32 via 192.168.1.3 dev ens4 src 192.168.1.3 

一切正常,当我ping 192.168.1.99并在该主机上运行tcp转储,我可以看到stream量正确路由。

我的问题是,我在该主机上运行postgresql与浮动IP,我想只能通过192.168.1.3 (甚至不通过127.0.0.1 )。 只要从外部访问数据库,它就可以工作得很好。 当我尝试通过192.168.1.3192.168.1.3进行连接时,出现错误:

 FATAL: no pg_hba.conf entry for host "192.168.1.2", user "postgres", database "postgres", SSL off 

这告诉我,从keepalived主机本身行使时,我的路由不工作。

我想知道如何修改我的路由,使stream量通过192.168.1.3即使源于同一主机。

你有access deny错误,这意味着路由工作正常。

路由不会更改ip数据包中的源或目标IP地址。 使用防火墙禁止访问192.168.1.2 ip地址上的postgres数据库。 当postgress客户端连接到您的服务器的192.168.1.3 IP地址时,它使用服务器接口上的第一个IP地址192.168.1.2 。 这个地址在pg_hba.confconfiguration文件中是不允许的。

此外,这种networking情况不好,因为postgres和其他软件将从ens4接口上的第一个ip地址( 在一个networkingens4

您不需要添加这样的路由规则,因为它们中的所有IP地址都在一个networking192.168.1.0/24