我一直在测试 keepalived 并准备在我的 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 地址(由我的托管服务提供商分配)
192.168.1.3
是浮动 IP,也在私有网络上(由我的托管服务提供商分配)
我有一个单独的主机,192.168.1.99
我想通过我的浮动 IP 路由流量。因此在 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
一切都运行良好,当我192.168.1.99
在该主机上 ping 并运行 tcp dump 时,我可以看到流量被正确路由。
我的问题是,我在该主机上运行了具有浮动 IP 的 postgresql,我希望它只能通过192.168.1.3
(甚至不能通过127.0.0.1
)访问。只要从外部访问数据库,它就可以正常工作。当我尝试通过建立连接时,192.168.1.3
我192.168.1.3
收到错误:
FATAL: no pg_hba.conf entry for host "192.168.1.2", user "postgres", database "postgres", SSL off
这告诉我,当从 keepalived 主机本身执行路由时,我的路由不起作用。
我想知道如何修改我的路由以便流量192.168.1.3
即使来自同一主机也能通过。
答案1
您有access deny
错误,但这意味着路由运行良好。
路由不会更改 IP 数据包中的源或目标 IP 地址。使用防火墙禁止访问192.168.1.2
IP 地址上的 postgres 数据库。当 postgres 客户端连接到您的服务器的192.168.1.3
IP 地址时,它会使用服务器接口上的第一个 IP 地址。配置文件192.168.1.2
中不允许使用此地址。pg_hba.conf
此外,这种网络情况并不好,因为 postgres 和其他软件将从第一个 ip 地址应答(位于同一网络中ens4
)界面上。
您不需要添加这样的路由规则,因为其中的所有 IP 地址都在一个网络中192.168.1.0/24
。