如何在 Linux 上通过虚拟 IP 传递所有流量

如何在 Linux 上通过虚拟 IP 传递所有流量

我在 CentOS 服务器上有一块以太网卡。它已配置:

eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 40:f2:e9:9b:b7:bb brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.1/24 brd 10.54.19.255 scope global eth1
    inet 192.168.1.2/24 scope global secondary eth1
    inet6 fe80::42f2:e9ff:fe9b:b7bb/64 scope link

192.168.1.2 是 VIP(虚拟 IP 由 keepalived 创建)。

我想让所有流量都通过虚拟 IP(192.168.1.2),并且输出数据包必须包含 VIP,而不是真实 IP(192.168.1.1)。我使用了 iptables,但它不起作用:输出数据包仍然包含真实 IP,而不是 VIP。以下是 iptables 命令:

iptables -t nat -I POSTROUTING -d x.x.x.x -j SNAT --to 192.168.1.2

答案1

您是否更改了路由表?您可能需要将路由添加到源地址为 192.168.1.2 的网关。您可以使用 iproute2 查看路由表:

ip route

如果你有类似的东西:

default via 192.168.1.254 dev eth1

您添加一条到该地址的路线:

ip route add 192.168.1.254 dev eth1 src 192.168.1.2

或者你可以添加路由到子网:

ip route add 192.168.1.0/24 dev eth1 src 192.168.1.2

实际上,到这个子网的路由已经存在于您的路由表中,但源 IP 地址为 192.168.1.1,因此您必须删除此条目。首先要做的是查看路由表。希望这会有所帮助。

相关内容