无法删除 GRE 隧道

无法删除 GRE 隧道

我正在 Linux 2.6.26 中配置 GRE 隧道,但遇到了一个非常奇怪的问题,找不到任何解决方案。

我创建了一个名为 的 GRE 隧道gre0,但无论我做什么,我都无法删除此隧道。该命令ip tunnel del gre0失败并返回ioctl: Operation not permitted。任何更改隧道地址的尝试也会失败。

以下命令说明了该问题:

# ip tunnel del gre0
ioctl: Operation not permitted
# ip tunnel change gre0
# ip tunnel change gre0 remote <some address> local <some address>
ioctl: No such file or directory

我可以毫无问题地创建、更改和删除其他隧道,但它gre0只是停留在那里,不会消失,即使我重新启动或关闭接口。

如果我移除ip_gre模块,隧道就会消失。一旦我再次插入模块,隧道gre0就会重新出现,问题仍然存在。

我有两个问题:

  1. 我该怎么做才能摆脱这个讨厌的隧道?我怀疑这可能是内核或模块错误。
  2. 这些持久数据(在本例中为的信息gre0,但这适用于我可能甚至不知道的任何其他设置)存储在哪里?

如果需要任何其他信息,请告诉我。

非常感谢您的帮助。

答案1

隧道gre0接口被称为 fallback 接口,具有特殊含义。它由ip_gre内核模块在模块初始化时创建。您无法禁用此功能。

当主机收到没有找到合适隧道接口的 gre 数据包时,将使用此后备接口。不幸的是,这实际上是一个未记录的功能。仅在源代码这是描述的。

相同的逻辑也适用于其他类型的隧道。

因此,您无法完全删除它,否则会丢失其他 gre 隧道。但您可以使用命令重命名它ip link set dev gre0 name gre_fallback。然后您可以创建具有gre0名称的其他 gre 隧道。

答案2

我相信我已经找到了这个问题的答案。

经过一段时间的调整后,我决定在全新安装中重现该问题。

ip_gre安装 Debian 后,默认情况下不会在内核中插入模块。不ip tunnel show显示任何隧道。插入模块后ip_gre,但不创建任何隧道,gre0如预期的那样,出现并且不可删除和不可更改。因此gre0似乎是模块默认创建的虚拟隧道ip_gre

令人沮丧的是,这个“功能”完全没有记录,甚至是出乎意料的,因为尝试创建隧道gre0作为系统中第一个(也是唯一的)GRE 隧道可能是很自然的。

答案3

您需要验证 gre 模块是否已完全删除。运行

sudo lsmod | grep gre

检查模块是否在列表中。如果在,则运行

sudo rmmod ip_gre
sudo rmmod gre

将它们从内核中删除。

相关内容