OpenVPN na VPS: brak urządzenia /dev/net/tun do otwarcia
Konfiguracja zwykle jest w porządku: gość nie widzi urządzenia tun. Rozróżnij maszynę wirtualną od kontenera ze współdzielonym jądrem, a potem napraw warstwę, do której należy jądro.
Pierwsze uruchomienie kończy się błędem z komunikatem o /dev/net/tun lub urządzeniu TUN/TAP, którego nie można otworzyć. Certyfikaty nie zostały jeszcze odczytane, więc nic w profilu nie jest winne. Demon prosi jądro o obiekt, którego ten gość nie ma.
Ten obiekt to urządzenie znakowe obsługiwane przez moduł tun. To, czy możesz je utworzyć, zależy od tego, kto jest właścicielem jądra.
O co demon prosi jądro
OpenVPN otwiera /dev/net/tun i prosi sterownik o interfejs. Sterownikiem jest moduł tun, a węzeł urządzenia to uchwyt, za pomocą którego przestrzeń użytkownika do niego dociera. Jeśli moduł nie jest załadowany, węzła może brakować albo otwarcie może się nie udać. Żadnego z tych stanów nie naprawia edycja server.conf.
Czytaj ten błąd najpierw jako pytanie o platformę. Błąd konfiguracji pojawia się po otwarciu urządzenia, a nie przed nim.
Maszyna wirtualna czy gość ze współdzielonym jądrem
Na KVM, Xen lub innej pełnej maszynie wirtualnej jądro kontrolujesz ty. Możesz ładować moduły i tworzyć węzeł. Na OpenVZ, Virtuozzo lub w kontenerze w stylu LXC gość dzieli jądro hosta, więc root w nim nie może załadować modułu, którego host nie załadował.
Ten sam błąd ma więc dwóch bardzo różnych właścicieli. W pierwszym przypadku możesz go naprawić od środka instancji. W drugim prosisz hosta lub dostawcę o wystawienie czegoś.
Uruchom ls -l /dev/net/tun, lsmod | grep tun i ip -brief link show, zanim zdecydujesz, w którym przypadku jesteś.
Na maszynie wirtualnej ładuj moduł podczas startu
Na maszynie wirtualnej modprobe tun zwykle tworzy węzeł urządzenia. Sprawdź, czy się pojawił, a następnie utrwal ładowanie przez konfigurację modułów dystrybucji, zamiast polegać na poleceniu wpisanym raz. Węzeł, który znika po restarcie, w przyszłym miesiącu staje się tym samym zgłoszeniem.
Sprawdź też, czy jądro, które uruchomiłeś, w ogóle ma ten moduł. Okrojone jądro dostawcy może go nie mieć.
Jeśli węzeł istnieje, ale otwarcie nadal się nie udaje, kolejnymi podejrzanymi są uprawnienia i numery major/minor urządzenia. To lokalne poprawki, a nie prośby do dostawcy.
W kontenerze urządzenie należy do hosta
W kontenerze urządzenie i uprawnienie to dwa osobne wymagania. Środowisko uruchomieniowe musi przepuścić /dev/net/tun, a kontener potrzebuje uprawnienia sieciowego, aby utworzyć interfejs. Środowisko rootless, które nie daje żadnego z nich, będzie nadal generować ten sam błąd otwarcia, niezależnie od tego, jak napisany jest profil. Wiele hostów OpenVZ udostępnia przełącznik TUN/TAP w panelu klienta, a jego włączenie wraz z restartem często jest całym rozwiązaniem.
Zadaj dostawcy dwa precyzyjne pytania: czy moduł tun jest załadowany na hoście i czy urządzenie jest dostępne wewnątrz tej instancji? Niejasne zgłoszenie dostaje niejasną odpowiedź.
Dlaczego przebudowa modułu rzadko pomaga
Budowanie modułu wewnątrz gościa rzadko pomaga. Kompilacja wymaga konfiguracji dokładnie działającego jądra, a /proc/config.gz jest opcjonalny i często go brakuje na minimalnych obrazach. Nawet działającego modułu nie można wstawić do jądra, do którego kontener nie należy.
Gdy urządzenie się pojawi, zrestartuj usługę i potwierdź interfejs, zanim przetestujesz ruch. Widok tun0 pokazuje, że demon otworzył urządzenie. Nie mówi jeszcze nic o przekazywaniu, regułach firewalla ani trasach, które otrzymują klienci.
To osobne pytania z osobnymi dowodami. Brakujące urządzenie to błąd warunku wstępnego; tunel, który istnieje, ale nic nie przenosi, to błąd polityki.