Rozwiązanie społecznościowe

Router podsieci Tailscale w ZimaOS: TUN był wbudowany, a następnie w wersji 1.5.0 stał się modułem tun.ko

A September 2025 feature request from a user trying to run a Tailscale Docker subnet router between Mexico and Uruguay. Zima-Jerry explained that TUN was compiled into the kernel rather than present as tun.ko, then changed it to a loadable module in ZimaOS 1.5.0. The original poster retested and confirmed it worked.

Kluczowym błędem w tym wątku z września 2025 roku było zinterpretowanie modprobe tun uznając awarię za dowód, że ZimaOS w ogóle nie obsługuje TUN. Zima-Jerry skorygował to założenie: w kompilacji źródłowej TUN skompilowano bezpośrednio w jądrze, więc nie było osobnego tun.ko plik pod /lib/modules dla modprobe załadować.

Jednak konkretny przepływ pracy użytkownika z dockerowym routerem podsieci nadal wymagał zachowania urządzenia/modułu oczekiwanego przez Tailscale. Dlatego IceWhale zmieniło sposób pakowania w ZimaOS 1.5.0, tak aby TUN stał się ładowalnym modułem jądra. Autor pierwotnego wpisu ponownie przetestował rozwiązanie 29 września i odpowiedział, że teraz działa.

Użytkownik chciał utworzyć router podsieci Tailscale między lokalizacjami

Źródłowy projekt łączył dwie fizyczne lokalizacje, Meksyk i Urugwaj, i zakładał, że urządzenia lokalne w każdej lokalizacji będą komunikować się przez Tailscale bez instalowania Tailscale na każdym punkcie końcowym.

To przypadek użycia routera podsieci, a nie tylko „zdalny dostęp do pulpitu ZimaOS”. Router podsieci musi przekazywać pakiety między siecią tailnet a inną podsiecią IP.

modprobe nie zgłosił pliku modułu tun

Użytkownik uruchomił uprzywilejowany kontener Tailscale i zobaczył:

modprobe: FATAL: Module tun not found in directory /lib/modules/6.12.25

Nie znaleźli również tun.ko plik i nie znaleźli wpisu TUN w wynikach kontroli listy modułów.

IceWhale powiedział, że TUN skompilowano bezpośrednio w jądrze

Pierwsza oficjalna odpowiedź Zima-Jerry’ego była jednoznaczna: funkcja TUN została bezpośrednio wbudowana w jądro, więc nie pojawiała się jako zwykły plik modułu w /lib/modules/6.12.25.

To rozróżnienie w jądrze Linuksa: funkcja skonfigurowana jako wbudowana jest dostępna bez pojawiania się w lsmod lub ładowany przez modprobe.

Wbudowana obsługa nie rozwiązała w pełni przepływu pracy z kontenerem źródłowym

Autor pierwotnego wpisu odpowiedział, że jego kontener nadal przechodził w tryb przestrzeni użytkownika i nie mógł zapewnić oczekiwanego pełnego działania routera podsieci w stylu hosta. Zapytał konkretnie, czy TUN można udostępnić w sposób modułowy.

Zima-Jerry powiedział, że można to dostosować w następnej wersji.

ZimaOS 1.5.0 zmienił TUN w moduł ładowalny

28 września Zima-Jerry napisał, że w nowym wydaniu 1.5.0 tun.ko stał się modułem jądra i poprosił użytkownika o ponowne przetestowanie.

Autor pierwotnego wpisu odpowiedział następnego dnia: „Dzięki, teraz działa”.

To potwierdzone w źródłach rozwiązanie i najważniejszy wniosek z tego wątku.

Sieciowanie Tailscale w przestrzeni użytkownika to inny tryb działania

Aktualna dokumentacja Tailscale wyjaśnia, że kontenery mogą działać bez urządzenia TUN, korzystając z sieci w przestrzeni użytkownika. W tym trybie tailscaled działa za pośrednictwem stosu sieciowego/proxy w przestrzeni użytkownika, zamiast zachowywać się jak zwykły interfejs tunelowy Linuksa.

Skorzystaj z obecnego modelu sieci użytkownika Tailscale, decydując, czy TUN jądra jest rzeczywiście wymagany.

Obecne Tailscale może routować podsieci w trybie jądra lub użytkownika

Obecna dokumentacja Tailscale opisuje teraz zarówno routing podsieci w trybie jądra, jak i w trybie użytkownika/netstack. Tryb jądra w systemie Linux zachowuje standardowe przekazywanie pakietów i zazwyczaj zapewnia lepszą wydajność; tryb użytkownika również może routować ruch, ale kończy obsługę wspieranego ruchu i ponownie go inicjuje we własnym stosie sieciowym.

W przypadku Dockera obecna dokumentacja Tailscale również opisuje, że TS_USERSPACE jest domyślnie włączony, natomiast tryb jądra wymaga /dev/net/tun oraz wymagane uprawnienia.

Działające urządzenie TUN to nie cała konfiguracja routera podsieci

Router podsieci Linux wymaga również przekazywania adresów IP, rozgłoszonych tras, zatwierdzenia tras w konsoli administracyjnej Tailscale oraz odpowiednich reguł dostępu tailnetu. Kontener pomyślnie tworzący tailscale0 samo w sobie nie oznacza, że zdalne urządzenia w sieci LAN mogą kierować przez nie ruchu.

Po uruchomieniu warstwy jądra/urządzenia ZimaOS postępuj zgodnie z bieżącym procesem konfiguracji routera podsieci Tailscale.

Nie stosuj diagnozy „brakującego tun.ko” z wersji 1.4.x do obecnego ZimaOS

Sam tekst źródłowy dokumentuje granicę między wersjami: pliku brakowało z powodu sposobu zbudowania jądra w wersji 1.4.x, a w ZimaOS 1.5.0 zmieniono funkcję TUN na moduł. Obecne ZimaOS znacznie wykracza poza tę wersję.

W przypadku współczesnego problemu sprawdź bieżące ustawienia kontenera, dostępność urządzenia TUN, tryb użytkownika/jądra, przekazywanie adresów IP oraz zatwierdzenie tras, zamiast zakładać, że powrócił problem z pakowaniem jądra z 2025 roku.

FAQ Tailscale dotyczące TUN

Czy niepowodzenie polecenia modprobe tun dowodziło, że ZimaOS nie obsługiwał TUN?

Nie. IceWhale poinformowało, że TUN został skompilowany bezpośrednio w jądrze źródłowym, zamiast być dostarczany jako osobny moduł.

Co zmieniono w ZimaOS 1.5.0?

Zima-Jerry powiedział tun.ko stał się ładowalnym modułem jądra.

Czy autor oryginalnego posta potwierdził, że nowa wersja działała?

Tak. Ponownie przetestowali to po zmianie w wersji 1.5.0 i powiedzieli, że działało.