我在 2 个 Centos-7 主机之间通过 tap0 接口建立了 GRE 隧道。我通过以下方式完成此操作:
- 主机-A:10.0.10.5
- 主机-B:10.0.20.5
在主机 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
完成此操作后,一切都运行良好。我可以双向 ping 通。问题是几分钟后,从主机 A 到主机 B 的隧道中断。但接口仍然正常运行。
我在两端都运行了 tcpdump。主机 A 上的 tcpdump 显示数据包通过 tap0 发出,但主机 B 上的 tcpdump 显示没有收到任何数据包。
如果我登录到 Host-B 并 ping Host-A,则隧道将再次处于活动状态,然后 Host-A 可以 ping Host-B。我通过在 Host-B 上创建一个 cron 作业并每分钟 ping Host-A 一次来完成伪保持活动,这可以使隧道保持活动状态,但我认为这不是必要的。
我读过的文档中没有发现任何关于 GRE 隧道超时的信息。还有其他人遇到过这种情况吗?
答案1
- 您使用无状态 GRE 隧道。它只是封装,没有任何建立和协商阶段。
- 运行
tcpdump
并检查哪些 GRE 数据包从一端发出并到达另一端。 - 使用命令检查 iptables 规则
iptables-save -c
。您应该允许 GRE 协议的传入数据包。检查两侧。
iptables -A INPUT -p 47 -j ACCEPT
- 此外,问题也可能是由主机之间的状态防火墙引起的。