Назад | Перейти на главную страницу

Туннель GRE умирает в одном направлении

Я построил туннель 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 имеют тайм-аут. Кто-нибудь еще испытал это?

  1. Вы используете GRE-туннель без сохранения состояния. Это просто инкапсуляция без каких-либо этапов установления и согласования.
  2. Запустить tcpdump и проверьте, какие пакеты GRE уходят с одной стороны и приходят на другую сторону.
  3. Проверьте правила iptables с помощью iptables-save -c команда. Вы должны разрешить входящие пакеты протокола GRE. Проверьте это с обеих сторон.
iptables -A INPUT -p 47 -j ACCEPT
  1. Кроме того, проблема может быть вызвана межсетевым экраном с сохранением состояния между хостами.