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

Не удается удалить туннель GRE

Я настраиваю туннель GRE в Linux 2.6.26, и я столкнулся с очень странной проблемой, для которой я не мог найти никакого решения.

Я создал туннель 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, но это относится к любой другой настройке, о которой я, возможно, даже не подозреваю) хранится?

Если потребуется дополнительная информация, дайте мне знать.

Большое спасибо за любую помощь.

Я считаю, что нашел ответ на эту проблему.

Немного повозившись, я решил воспроизвести проблему в чистой установке.

В ip_gre модуль не вставляется по умолчанию в ядро ​​после установки Debian. ip tunnel show не отображает туннель. После вставки ip_gre модуль, но без создания туннеля, gre0 появляется, и его невозможно удалить и изменить, как и ожидалось. Таким образом gre0 кажется фиктивным туннелем, созданным по умолчанию ip_gre модуль.

Раздражает то, что эта «функция» полностью недокументирована и даже является неожиданной, поскольку было бы естественно попытаться создать gre0 туннель как первый (и единственный) туннель GRE в системе.

В gre0 Туннельный интерфейс называется резервным интерфейсом и имеет особое значение. Он создан ip_gre модуль ядра при инициализации модуля. Вы не можете отключить эту функцию.

Когда хост получает пакеты gre, для которых не найден подходящий туннельный интерфейс, будет использоваться этот резервный интерфейс. К сожалению, это действительно недокументированная функция. Только в исходный код это описано.

Такая же логика используется для других типов туннелирования.

Таким образом, вы не можете удалить его полностью без потери других туннелей gre. Но вы можете переименовать его с помощью команды ip link set dev gre0 name gre_fallback. А затем вы можете создать другой туннель gre с помощью gre0 название.

Вам необходимо убедиться, что модуль gre полностью удален. Бегать

sudo lsmod | grep gre

чтобы проверить, есть ли модуль в списке. Если это так, запустите

sudo rmmod ip_gre
sudo rmmod gre

чтобы удалить их из ядра.