У меня есть следующая настройка на узле директора, на котором запущен keepalived:
Я отлаживал проблему, при которой я не мог получить доступ к службе IPVS из самого узла директора, и во время этого процесса заметил, что трафик IPVS, похоже, не проходит через netfilter. Для проверки я установил следующее правило в необработанной таблице в 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. Что может быть причиной наблюдаемого мной поведения?
Чтобы ответить на мой собственный вопрос, как указано в http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.LVS-DR.html,
Когда пакет CIP-> VIP прибывает к директору, он помещается в цепочку OUTPUT как пакет уровня 2 с dest = MAC-адресом реального сервера.
После добавления того же правила в цепочку OUTPUT я действительно вижу, что пакеты попадают в правило.