Я построил туннель 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 может затем пинговать Host-B. Я сделал psuedo-keepalive, создав задание cron на Host-B и ping Host-A раз в минуту, и это поддерживает туннель, но я не думаю, что это должно быть необходимо.
Я не нашел ничего в документации, которую я читал, что туннели GRE имеют тайм-аут. Кто-нибудь еще испытал это?
tcpdump
и проверьте, какие пакеты GRE уходят с одной стороны и приходят на другую сторону.iptables-save -c
команда. Вы должны разрешить входящие пакеты протокола GRE. Проверьте это с обеих сторон.iptables -A INPUT -p 47 -j ACCEPT