Доброго времени суток!
У меня есть кластер из двух машин, работающих в режиме active/standby, на активную ноду вешается определённый ip, пусть будет так:
#ip addr sh
bond1: <BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue
inet 10.10.10.38/27 brd 10.10.10.255 scope global bond1 <------статический ip
inet 10.10.10.39/27 brd 10.10.10.255 scope global secondary bond1:0 <------кластерный ip
Мне нужно настроить, чтобы пакеты, идущие на определённый адрес, пусть он будет 10.10.10.250, шли через 10.10.10.39(кластерный ip)
По умолчанию получается так, что они отправляются через 10.10.10.38
Добавление маршрутизации не помогает:
#ip route add 10.10.10.250/32 via 10.10.10.1 dev bond1:0
Получается что в таблице маршрутизации всё равно неправильный интерфейс
# ip ro sh
10.10.10.250 via 10.10.10.1 dev bond1
Нашёл много инфы для перенаправления средствами iptables, но там как правило рассматривается вариант NAT, где некая сеть подключенная через один интерфейс может идти в интернет через другой с подменой адреса источника, а мне нужно чтобы это делалось для локальных запросов, поможет ли такой путь?
iptables -t nat -N NAT
iptables -t nat -A POSTROUTING -s 10.10.10.250 -j NAT
iptables -t nat -A NAT -j SNAT --to-source 10.10.10.39
А вообще меня терзают смутные сомнения, может быть есть более простой способ решения, без iptables а средствами route?
Iptables/ip route подмена ip для определённого хоста
Мне нужно настроить, чтобы пакеты, идущие на определённый адрес, пусть он будет 10.10.10.250, шли через 10.10.10.39(кластерный ip)
для этого используется forwarding
Доброго времени суток!
У меня есть кластер из двух машин, работающих в режиме active/standby, на активную ноду вешается определённый ip, пусть будет так:
#ip addr sh
bond1: <BROADCAST,MULTICAST,MASTER,UP> mtu 1500 qdisc noqueue
inet 10.10.10.38/27 brd 10.10.10.255 scope global bond1 <------статический ip
inet 10.10.10.39/27 brd 10.10.10.255 scope global secondary bond1:0 <------кластерный ip
Вся фишка в том, что если пакеты посылать через bond1:0, то они все равно пойдут через bond1 активной ноды. Так как и у bond1 и у bond1:0 - один и тот же MAC-адрес. А вся локальная маршрутизация привязана именно к MAC через ARP-таблицы. Вот если делать на физическом сетевом интерфейса два MAC, тогда разведем надежно.
А так я бы не парился. Прописал бы на "клиентах" маршрут на нужный хост через IP-bond1:0 и жил бы спокойно. Этот виртуальный интерфейс переедет, случись что, на резервную ноду, обновится ARP-таблица и пакеты все равно пойдут через bond1:0 новой ноды. Точнее - через bond1.
[quote="aZura"]Мне нужно настроить, чтобы пакеты, идущие на определённый адрес, пусть он будет 10.10.10.250, шли через 10.10.10.39(кластерный ip)
для этого используется forwarding[/quote]
А можно подробнее, как?
P.S. Проблему решил таким правилом
iptables -t nat -A POSTROUTING -s 10.10.10.38/32 -d 10.10.10.250/32 -o bond1 -j SNAT --to-source 10.10.10.39
Вся фишка в том, что если пакеты посылать через bond1:0, то они все равно пойдут через bond1 активной ноды. Так как и у bond1 и у bond1:0 - один и тот же MAC-адрес. А вся локальная маршрутизация привязана именно к MAC через ARP-таблицы. Вот если делать на физическом сетевом интерфейса два MAC, тогда разведем надежно.
А так я бы не парился. Прописал бы на "клиентах" маршрут на нужный хост через IP-bond1:0 и жил бы спокойно. Этот виртуальный интерфейс переедет, случись что, на резервную ноду, обновится ARP-таблица и пакеты все равно пойдут через bond1:0 новой ноды. Точнее - через bond1.
Ага, понятно что они пойдут через bond1 да и плевать на мак, т.к. он дойдёт только до какого нить ближайшего маршрутизатора. Не совсем понял про прописывание на "клиентах" - я и прописывал маршрут через через bond1:0, но он уходил не с того интерфейса(ip) . Тут такое дело - мне нужно коннектиться к машине одной, а доступ открыли только с определённого ip(кластерного), а т.к. писать новую служебку и согласовывать ещё 2 ip мне лень я решил пойти другим путём :)