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