Nie można usunąć tunelu GRE

15

Konfiguruję tunel GRE w Linuksie 2.6.26 i napotkałem bardzo dziwny problem, dla którego nie mogłem znaleźć żadnego rozwiązania.

Stworzyłem tunel GRE o nazwie gre0, ale bez względu na to, co robię, po prostu nie mogę go usunąć. Polecenie ip tunnel del gre0kończy się niepowodzeniem z odpowiedzią ioctl: Operation not permitted. Każda próba zmiany adresów tunelu również kończy się niepowodzeniem.

Następujące polecenia ilustrują problem:

# 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

Mogę bez problemu tworzyć, zmieniać i usuwać inne tunele, ale gre0po prostu się tam zatrzymuję i nie znikam, nawet jeśli zrestartuję się lub usunę interfejsy.

Po usunięciu ip_gremodułu tunel znika. Jak tylko włożę moduł ponownie, gre0pojawi się ponownie i problem będzie się powtarzał.

Mam dwa pytania:

  1. Co mogę zrobić, aby pozbyć się tego nieznośnego tunelu? Podejrzewam, że może to być błąd jądra lub modułu.
  2. Gdzie przechowywane są takie trwałe dane (w tym przypadku informacje gre0, ale dotyczy to każdej innej konfiguracji, o której nawet nie wiem)?

Jeśli potrzebujesz innych informacji, daj mi znać.

Wielkie dzięki za wszelką pomoc.

alecov
źródło

Odpowiedzi:

2

gre0Interfejs tunelu jest nazwany jako interfejs awaryjnej i ma szczególne znaczenie. Jest tworzony przez ip_gremoduł jądra przy inicjalizacji modułu. Nie możesz wyłączyć tej funkcji.

Gdy host otrzyma pakiety gre, dla których nie znaleziono odpowiedniego interfejsu tunelu, zostanie użyty ten interfejs rezerwowy. Niestety, jest to naprawdę nieudokumentowana funkcja. Tylko w kodzie źródłowym jest to opisane.

Ta sama logika jest stosowana w przypadku innych rodzajów tunelowania.

Więc nie możesz go całkowicie usunąć bez utraty innych greckich tuneli. Ale możesz zmienić nazwę za pomocą polecenia ip link set dev gre0 name gre_fallback. Następnie możesz utworzyć drugi gre tunel z gre0nazwą.

Anton Daniłow
źródło
Po ośmiu latach pojawia się poprawna odpowiedź. Dzięki!
alecov
23

Myślę, że znalazłem odpowiedź na ten problem.

Po majstrowaniu przez chwilę postanowiłem odtworzyć problem w czystej instalacji.

ip_greModuł nie jest włożony domyślnie w jądrze po instalacji Debiana. ip tunnel shownie wyświetla żadnego tunelu. Po włożeniu ip_gremodułu, ale bez tworzenia tunelu, gre0pojawia się i jest niemożliwy do usunięcia i niezmienny zgodnie z oczekiwaniami. gre0Wydaje się więc, że jest to atrapa tunelu domyślnie tworzona przez ip_gremoduł.

Frustrujące jest to, że ta „cecha” jest całkowicie nieudokumentowana, a nawet nieoczekiwana, ponieważ może być naturalne, że próba stworzenia gre0tunelu jako pierwszego (i jedynego) tunelu GRE w systemie.

alecov
źródło
7
Dotyczy to również tunl0 i sit0.
Oliver Twist,
A dla tunl0, to ipipzamiast.
i336_
0

Musisz sprawdzić, czy moduł gre został całkowicie usunięty. Biegać

sudo lsmod | grep gre

aby sprawdzić, czy moduł znajduje się na liście. Jeśli tak, uruchom

sudo rmmod ip_gre
sudo rmmod gre

aby usunąć je z jądra.

Tony
źródło