Я построил туннель GRE через интерфейс tap0 между двумя хостами Centos-7. Я сделал это с помощью следующего:
На хосте A:
ip tunnel add tap0 mode gre remote 10.0.20.5 local 10.0.10.5 ttl 255
ip link set tap0 up
ip addr add 10.10.10.1/24 dev tap0
на хосте B:
ip tunnel add tap0 mode gre remote 10.0.10.5 local 10.0.20.5 ttl 255
ip link set tap0 up
ip addr add 10.10.10.2/24 dev tap0
после этого, все работает отлично. Я могу пинговать в обоих направлениях. Проблема в том, что через несколько минут туннель от Host-A до Host-B умирает. Однако интерфейс все еще работает.
Я запустил tcpdump с обеих сторон. tcpdump на Host-A показывает пакеты, идущие через tap0, но tcpdump на Host-B не показывает ничего полученного.
Если я вхожу в Host-B и проверяю Host-A, туннель снова активен, и Host-A может затем ping Host -B. Я выполнил псевдо-keepalive, создав задание cron на Host-B и ping Host-A раз в минуту, и это поддерживает работу туннеля, но я не думаю, что это необходимо.
Я не нашел все, что я читал в документации, гласит, что туннели GRE имеют тайм-аут. Кто-нибудь еще испытывал это?
tcpdump
и проверьте, какие пакеты GRE уходят с одной стороны и прибывают на другую сторону. iptables-save -c
команда. Вы должны разрешить входящие пакеты протокола GRE. Проверьте это с обеих сторон. iptables -A INPUT -p 47 -j ACCEPT