Ich habe eine Ethernet-Karte auf dem CentOS-Server. Es wurde konfiguriert:

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 ist ein VIP (virtuelle IP wird von keepalived erstellt).

Ich möchte den gesamten Verkehr über die virtuelle IP (192.168.1.2) leiten und die Out-Pakete müssen VIP enthalten, nicht die echte IP (192.168.1.1). Und ich habe iptables verwendet, aber es funktioniert nicht: Die Out-Pakete enthalten immer noch echte IP, nicht VIP. Hier ist der Befehl für iptables:

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

Hast du deine Routingtabelle geändert? Sie müssen möglicherweise eine Route zum Gateway mit src 192.168.1.2 hinzufügen. Sie können sich die Routing-Tabelle mit iproute2 ansehen:

ip route

Wenn Sie so etwas haben:

default via 192.168.1.254 dev eth1

Sie fügen eine Route zu dieser Adresse hinzu:

ip route add 192.168.1.254 dev eth1 src 192.168.1.2

oder Sie können eine Route zum Subnetz hinzufügen:

ip route add 192.168.1.0/24 dev eth1 src 192.168.1.2

Route zu diesem Subnetz ist zwar bereits in Ihrer Routing-Tabelle enthalten, aber mit der src-IP-Adresse 192.168.1.1, also müssen Sie diesen Eintrag löschen. Sehen Sie sich zunächst die Routing-Tabelle an. Hoffe das hilft ein wenig.