У меня есть карта Ethernet на сервере 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
Вы меняли свою таблицу маршрутизации? Возможно, вам нужно добавить маршрут к шлюзу с src 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-адресом src 192.168.1.1, поэтому вам нужно удалить эту запись. Первое, что нужно сделать, это посмотреть таблицу маршрутизации. Надеюсь, это немного поможет.