Кто-нибудь заставил правильно работать цисковский gre-keepalive в линуксе?
Есть GRE тунель over IP между двумя точками, допустим линукс-циска.
реализация keepalive от циски выглядит так:
1.циска посылает линуксу специальный GRE пакет, внутри которого инкапсулирован не обычный IP-пакет, а еще один GRE-пакет, в котором src и dst адреса тунеля переставлены местами + устанавливает proto type=0.
2.линукс, получив такой пакет, разобрав внешний GRE заголовок, и увидев, что внутри еще один GRE-пакет с адресом назначения циски, должен просто отправить его (согласно таблице роутинга) обратно циске.
3.циска, получив GRE пакет с proto_type=0, видит, что это вернулся е keepalive и понимает, что тунель живой.
так вот, проблема в том, что линукс не отсылает обратно этот пришедший к нему двойной GRE пакет. Соответственно, keepalive не работает.
более обобщенно «проблема» выглядит так:
линукс не принимает пакеты, которые якобы исходят от него самого. (что в общем виде правильно)