Трафик IPVS не проходит через сетевой фильтр на узле директора.

У меня есть следующая настройка на узле директора, работающем keepalived:

  • родной IP 10.65.5.72
  • VIP 10.65.5.230
  • поддерживающий режим DR включен для портов 80 и 443

Я отлаживал проблему, когда не мог получить доступ к службе IPVS с самого узла директора, и во время этого процесса заметил, что трафик IPVS, по-видимому, не проходит через сетевой фильтр. Чтобы проверить, я установил следующее правило в необработанной таблице в iptables:

Chain PREROUTING (policy ACCEPT 143K packets, 133M bytes)
 pkts bytes target     prot opt in     out     source               destination
    1    60 MARK       all  --  *      *       10.65.5.72           10.65.5.230          MARK and 0xffffffff

а потом я побежал

nc -v -s 10.65.5.72 10.65.5.230 80

Я ожидал, что счетчик пакетов увеличится, но это не так.

Если я изменю номер порта в команде nc на что-либо кроме 80 и 443, то счетчик будет увеличиваться.

Между тем, я видел увеличение счетчика пакетов на выходе

ipvsadm -L -n --stats

когда я запустил вышеупомянутую команду nc, которая должна указывать, что был сгенерирован пакет, который куда-то попал.

Это ожидаемое поведение ipvs? Судя по материалам, которые я нашел в интернете, трафик ipvs должен проходить через netfilter. Что может быть причиной поведения, которое я вижу?

1 ответ

Решение

Чтобы ответить на мой собственный вопрос, как указано в http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.LVS-DR.html,

Когда пакет CIP->VIP приходит к директору, он помещается в цепочку OUTPUT как пакет уровня 2 с адресом dest = MAC реального сервера.

После добавления того же правила в цепочку OUTPUT я вижу, что пакеты теперь попадают в правило.

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