Как пропустить весь трафик через виртуальный ip на linux

У меня есть карта 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

1 ответ

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

Другие вопросы по тегам