Klient OpenVPN dla całej sieci LAN na OpenWrt: kolejność, która działa
Własność interfejsu, polityka strefy, masquerade i tabele dla poszczególnych SSID to cztery osobne zadania. Wykonaj je po kolei, a tunel dla całego routera przestanie działać przeciwko tobie.
Cztery niezależne zadania stawiają całą sieć LAN routera za jednym tunelem. Urządzenie tunelu potrzebuje właściciela, strefy firewalla, celu tłumaczenia w stronę uplinku oraz, jeśli część klientów ma zostać poza VPN, routingu według adresu źródłowego. Tunelowi, który się łączy, ale nic przez niego nie przechodzi, zwykle brakuje jednego z tych czterech elementów. Praca w kolejności zależności oznacza, że awaria na końcu należy do kroku, który właśnie zmieniłeś. Każdy krok poniżej kończy się czymś, co można zaobserwować, i to chroni następny krok przed zgadywaniem.
Zdecyduj, co dzieli tunel
Router, który rozdaje Wi-Fi i DHCP, może sam uruchomić klienta. To stawia każde podłączone urządzenie za tunelem bez konfiguracji dla każdego urządzenia, i to jest układ, którego chce większość małych lokalizacji. To także układ o najszerszym zasięgu skutków, gdy tunel padnie, bo każde urządzenie traci swoją trasę naraz. Nic w sieci LAN nie utrzymuje działającego wyjścia.
Drugi router za pierwszym, uruchamiający klienta z własną podsiecią, ogranicza tunel do własnych urządzeń. Łatwiej go usunąć i łatwiej wyjaśnić komuś, kto go odziedziczy. Ceną jest osiągalność między obiema stronami bez trasy lub przekierowania portu.
Tak czy inaczej, uczyń podsieci LAN różnymi. Identyczne zakresy sprawiają, że jedna strona wygląda na połączoną bezpośrednio, a powstała czarna dziura przez godziny wygląda jak awaria VPN.
Nadaj tunelowi właściciela
Zadeklaruj tunel jako interfejs sieciowy z nazwą, urządzeniem i bez własnego protokołu. System sieciowy tworzy wtedy urządzenie i zarządza nim, a wszystko poniżej odwołuje się do interfejsu po nazwie, nie po urządzeniu. To właśnie pozwala strefie go znaleźć.
Nie twórz tego samego urządzenia w dwóch miejscach. Tunel zrobiony ręcznie obok zadeklarowanego interfejsu daje urządzenie, które istnieje, ale nie jest w żadnej strefie, albo takie, które znika przy przeładowaniu. Oba wyglądają jak awaria klienta, i żadne nie daje błędu, który nazywa prawdziwą przyczynę. Wybierz ścieżkę deklaratywną i usuń ręczną.
Utrzymuj identyczną nazwę w konfiguracji sieci, firewalla i VPN. Strefa wymienia sieci po nazwie, więc literówka zostawia tunel poza każdą strefą, podczas gdy sam interfejs wygląda zdrowo. Zdrowy interfejs bez polityki to najtrudniejszy do zauważenia stan.
Umieść go w strefie, potem przekieruj do niej
Strefa firewalla to miejsce, w którym mieszka polityka: wejście, wyjście, przekazywanie i masquerade. Tunel, który nie jest w żadnej strefie, podlega wartościom domyślnym, których nie wybrałeś, a to rzadko jest tym, czego potrzebuje klient na routerze. Bloki poniżej deklarują interfejs, umieszczają go w strefie i pozwalają ruchowi LAN wejść do tej strefy.
config interface 'vpn'
option device 'tun0'
option proto 'none'
config zone
option name 'vpn'
list network 'vpn'
option input 'REJECT'
option output 'ACCEPT'
option forward 'REJECT'
option masq '1'
config forwarding
option src 'lan'
option dest 'vpn'
W wersjach starszych niż 21.02 ta sama linia interfejsu jest zapisana jako option ifname, więc przed wklejeniem sprawdź, którą formę rozpoznaje zainstalowany firmware. Blok przekazywania to pozwolenie, które w ogóle umożliwia ruchowi LAN korzystanie z tunelu. Bez niego urządzenie jest włączone, klient połączony, a żaden host LAN nie dociera do tunelu. To najczęstsze zgłoszenie połączenia bez internetu u klientów na routerze.
Masquerade w strefie VPN sprowadza każdy adres LAN do adresu tunelu routera, zanim pakiet wyjdzie. To usuwa potrzebę trasy powrotnej do twojej podsieci po drugiej stronie.
Jeśli druga strona już routuje twoją sieć LAN, wyłączenie masquerade utrzymuje adresy źródłowe widocznymi i czyni logi dla poszczególnych klientów sensownymi. Wybierz jedno i zapisz które, bo oba wybory dają później różne pytania do wsparcia. Usunięcie domyślnego przekazywania z LAN do WAN to osobna decyzja z własną konsekwencją. Zabierz je, a własny dostęp routera do internetu odejdzie razem z nim.
Nazwij prawdziwy uplink w NAT
Na firmware, gdzie reguła tłumaczenia jest pisana ręcznie, interfejs wychodzący to pole, które się psuje. Reguła nazywająca vlan2 nie robi nic, gdy sesja kończy się na ppp0. Reguła bez żadnego interfejsu może tłumaczyć ruch, który powinien pozostać prywatny. Żaden z tych błędów się nie ogłasza, bo tunel dalej działa.
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
Zastąp ppp0 w tej regule interfejsem z ip route lub z listy aktywnych interfejsów, a potem obserwuj licznik, gdy host LAN wczytuje stronę. Na routerze z jednym dostawcą zwykle wystarcza jedna reguła masquerade dla uplinku. Druga reguła dla interfejsu tunelu nie zastępuje pierwszej.
Potem dodaj opcje klienta, które decydują, co wchodzi do tunelu. Dyrektywa redirect-gateway wysyła ruch internetowy klienta przez VPN, a bez niej tunel niesie tylko trasy wypychane przez serwer. Sprawdź wynikową tabelę tras, zanim dotkniesz DNS.
Podziel Wi-Fi drugą tabelą
Jedna tabela routingu nie może pomieścić dwóch tras domyślnych. Dlatego drugi SSID, który musi omijać tunel, potrzebuje własnej podsieci i własnej tabeli. Przydziel tunelowanemu SSID własny zakres, a potem kieruj tylko ten zakres do tunelu regułą wybierającą tabelę.
Pakiety routingu politycznego na OpenWrt wyrażają dokładnie tę kombinację. Ręcznie też działa, z regułą źródłową i tabelą, której domyślna trasa wskazuje urządzenie tunelu.
Sprawdź podział z obu sieci. Klient w tunelowanym SSID powinien pokazywać adres wyjściowy VPN, a klient w zwykłym SSID adres dostawcy. Gdy oba wyglądają tak samo, reguła pasuje do złego źródła albo tabela nigdy nie jest konsultowana. Przetestuj też po ponownym połączeniu, bo reguła zależna od nazwy interfejsu psuje się, gdy urządzenie zostanie przenumerowane.
Podejrzewaj zegar i flagę urządzenia
Flaga persist-tun zostawia urządzenie tunelu na miejscu między restartami. To pasuje serwerowi i myli klienta, którego stan powinien być budowany od zera. Usuń ją podczas diagnozowania klienta na routerze, bo urządzenie, które przetrwa nieudane negocjacje, ukrywa, który krok naprawdę się zepsuł. Przywróć ją, gdy klient łączy się niezawodnie, i nie wcześniej.
Zegar to inna cicha awaria. Router bez zegara podtrzymywanego baterią startuje od epoki, co oznacza, że kontrole certyfikatów zawodzą, dopóki NTP nie nadgoni. Porównaj znaczniki czasu w logu z rzeczywistym czasem, zanim dotkniesz certyfikatu, bo klient, który łączy się minutę po starcie, zwykle czeka na synchronizację czasu.