Keepalived VIP через подсети не удается на TTL
Я пытаюсь создать виртуальный IP-адрес между 2 виртуальными машинами, которые работают в разных подсетях, используя dockerized keepalived (osixia/keepalived:1.4.5) с одноадресными сообщениями vrrp.
К сожалению, сообщения vrrp отбрасываются из-за значения ttl, поскольку пакет маршрутизируется из удаленной подсети (фрагмент журнала из VM1):
Mon Jul 2 12:41:56 2018: (VI_1): invalid ttl. 252 and expect 255
Mon Jul 2 12:41:56 2018: bogus VRRP packet received on ens160 !!!
Mon Jul 2 12:41:56 2018: VRRP_Instance(VI_1) Dropping received VRRP packet...
Если я правильно понимаю это описание журнала изменений, проблема должна быть решена с момента выпуска 1.2.10 (источник: http://www.keepalived.org/changelog.html):
vrrp: отключить проверку работоспособности TTL для варианта использования одноадресной рассылки. Чтобы защитить от любого внедрения пакета, VRRP обеспечивает проверку работоспособности через заголовок IP TTL. Этот TTL ДОЛЖЕН быть равен 255 и означает, что отправитель и получатель подключены к одному и тому же сегменту Ethernet. Теперь с расширением одноадресной передачи эта защита ДОЛЖНА быть отключена, так как реклама VRRP будет в основном проходить через различные сегменты сети.!!! ВНИМАНИЕ!!! При использовании VRRP в случае использования одноадресной рассылки для защиты от внедрения любых пакетов рекомендуется использовать метод аутентификации IPSEC-AH, в противном случае вы будете подвержены потенциальным злоумышленникам!
Должно ли это действительно работать из коробки или я должен как-то настроить проверку исправности ttl?
Моя настройка:
VM1 ip: 172.31.245.109
VM2 ip: 172.31.205.162
Виртуальный IP: 172.31.245.10
VM1 keepalived.conf:
vrrp_script chk_live {
script "curl 172.31.245.109:8080"
interval 2 # check every 2 seconds
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_1 {
interface ens160
state MASTER
virtual_router_id 51
priority 101 # 101 on master, 100 on backup
virtual_ipaddress {
172.31.245.10
}
track_script {
chk_live
}
unicast_peer {
172.31.205.162
}
}
VM2 keepalived.conf:
vrrp_script chk_live {
script "curl 172.31.205.162:8080"
interval 2 # check every 2 seconds
weight 2 # add 2 points of prio if OK
}
vrrp_instance VI_1 {
interface eth0
state MASTER
virtual_router_id 51
priority 100 # 101 on master, 100 on backup
virtual_ipaddress {
172.31.245.10
}
track_script {
chk_live
}
unicast_peer {
172.31.245.109
}
}