LINUX.ORG.RU
ФорумAdmin

Centos 7 Carp проблема!

 


0

1

Привет всем. Прошу помощи спецов так как голова уже кругом идет. Есть два сервера Centos 7, на них настроен Carp протокол. Он работает и ip переходит с одного сервера на другой при падении основного. В локальной сети все работает идеально. Проблема начинается когда идет обащение в другую подсеть. Для наглядности даю пример: Master:

VIP_ADDRESS="192.168.98.210"
ID=001
PASSFILE=/etc/ucarp/vip-001.pwd
BIND_INTERFACE="eth0"
SOURCE_ADDRESS="192.168.98.214"
OPTIONS="-k 2 --shutdown --preempt"

Slave

VIP_ADDRESS="192.168.98.210"
ID=001
PASSFILE=/etc/ucarp/vip-001.pwd
BIND_INTERFACE="eth0"
SOURCE_ADDRESS="192.168.98.215"

В ядро добавлена опция net.ipv4.ip_nonlocal_bind=1

Есть сервер который имеет ip 192.168.120.15, запускаем на него ping с 192.168.98.214 (Master)

10:38:38.315935 IP 192.168.98.214 > 192.168.121.15: ICMP echo request, id 17900, seq 2, length 64
10:38:38.315996 IP 192.168.121.15 > 192.168.98.214: ICMP echo reply, id 17900, seq 2, length 64

Пробуем обратный пинг на кластерный ip

10:40:26.227616 IP 192.168.121.15 > 192.168.98.210: ICMP echo request, id 17969, seq 2, length 64
10:40:26.227658 IP 192.168.98.210 > 192.168.121.15: ICMP echo reply, id 17969, seq 2, length 64

При обратном пинге все идет правильно. Как сделать так что бы маршрутизация шла с кластерного ip?????

А собственно, в чем проблема кроме ping ?

Все сервисы к которым обращаются по адресу 192.168.98.210 будут отвечть именно с этого адреса.

А для того, чтобы исходящие коннекты шли с виртуального адреса есть 2 варианта:

1. исправлять таблицу машрутизации

При переходе backup->master нужно выполнить

ip ro del default
ip ro add default via x.x.x.x dev eth0 src 192.168.98.210

При переходе назад сделать аналогичное действие.

2. сделать SNAT для режима master.

iptables -t nat -A OUTPUT -o eth0 -m state --state NEW ! -s 192.168.98.210 -j SNAT --to-source 192.168.98.210

при переходе в backup удалять правило.

ucarp наверника умеет выполнять действие при смене состояния. Туда и запихни то, что больше нравится.

vel ★★★★★
()
Ответ на: комментарий от vel

Спасибо за помощь! Собственно задача, сделать отказоустойчивый asterisk. Проблема в том что не регестрируется iax2 транк. Хотя кажется только что нашел решение. В моем слечае для работы iax2 нужно прописать в настройках транка sourceaddress=192.168.98.210. И пакеты пошли правильно!!!

С Натом интересная идея, жалко что у меня она не сработала. Я получаю ошибку

 x_tables: ip_tables: SNAT target: used from hooks OUTPUT, but only usable from INPUT/POSTROUTING

Нашел что: Цель SNAT в iptables может быть использована только в цепочках INPUT и POSTROUTING. В вашей команде вы пытаетесь использовать цель SNAT в цепочке OUTPUT, что недопустимо. Если вы хотите изменить исходный адрес пакетов в цепочке OUTPUT, вам следует использовать цель MASQUERADE.

Попробовал модифицировать:

iptables -t nat -A OUTPUT -o eth0 -m state --state NEW ! -s 192.168.98.210 -j MASQUERADE
 x_tables: ip_tables: MASQUERADE target: used from hooks OUTPUT, but only usable from POSTROUTING
testsia13
() автор топика
Ответ на: комментарий от vel

Еще раз спасибо. Добавил правило:

iptables -t nat -A POSTROUTING -o eth0 -m state –state NEW ! -s 192.168.98.210 -j SNAT –to-source 192.168.98.210 Запускаю пинг с 192.168.98.210 Смотрю что приходит на 192.168.121.15

16:08:05.934247 IP 192.168.98.210 > 192.168.121.15: ICMP echo request, id 12907, seq 12, length 64
16:08:05.934324 IP 192.168.121.15 > 192.168.98.210: ICMP echo reply, id 12907, seq 12, length 64
16:34:02.961930 IP 192.168.98.210.38346 > 192.168.121.15.iax: UDP, length 14
16:34:02.962249 IP 192.168.121.15.iax > 192.168.98.210.38346: UDP, length 12

Правда не регистрируется транк, но думаю разберусь Все отработало отлично!!!

testsia13
() автор топика