Zestaw nftables zasilany z DNS do WireGuardu: jak działa przekazanie
Odpowiedź DNS może zasilać zestaw nftables, ale zestaw niczego nie trasuje. Prześledź cztery przekazania i trzy czasy życia, które decydują, czy kierowanie zadziała.
Nazwy są rozwiązywane na adresy, a te adresy mogą trafić do zestawu zapory, który później wpływa na trasowanie, co umożliwia kierowanie oparte na nazwie bez proxy. Haczyk polega na tym, że cztery komponenty muszą przekazać poprawnie: resolver, zestaw, klasyfikator oznaczający nowy przepływ i peer, który go niesie. Każde przekazanie zawodzi inaczej i każde trzyma swój własny czas.
Traktuj projekt jako łańcuch, a nie konfigurację. Pytanie na każdym etapie brzmi, który komponent posiada decyzję i co się dzieje, gdy brakuje jego danych wejściowych.
Co odpowiedź DNS może, a czego nie może
dnsmasq potrafi kopiować adresy z odpowiedzi do zestawu nftables, co jest zasilaniem, a nie decyzją o trasowaniu. Ta opcja, opisana w podręczniku dnsmasq, podaje rodzinę, tabelę i zestaw, a jej wiodący 4# wybiera tylko rekordy A, więc cele v6 potrzebują własnego rozwiązania. Zestaw musi już istnieć, ponieważ resolver dodaje elementy do czegoś, co utworzył właściciel zapory. Nic na tym etapie nie wybiera interfejsu, tabeli ani peera.
Klient również musi używać tego resolvera dla nazwy. Aplikacja z własnym szyfrowanym DNS albo odpowiedź z pamięci podręcznej sprzed istnienia polityki łączy się bez tworzenia jakiegokolwiek wpisu w zestawie.
Zestaw jest wejściem, nie trasą
Element w zestawie jest warunkiem dopasowania. Coś musi na niego spojrzeć, zdecydować, że ten pakiet rozpoczyna nowy przepływ, i zastosować politykę, która wysyła przepływ przez tunel. W Linuxie oznacza to zwykle ścieżkę wyjściową zdolną do trasowania, która potrafi ustawić znacznik, regułę wysyłającą oznaczone pakiety do osobnej tabeli oraz trasę w tej tabeli wskazującą urządzenie WireGuard. Sama przynależność nie instaluje niczego z tego.
nft add set inet vpn_select office_v4 { type ipv4_addr\; }
ip rule add fwmark 0x40 table 200
ip route add default dev wg0 table 200
wg show wg0 allowed-ips
Peer stosuje drugą kontrolę pokrycia, o której ludzie zapominają. WireGuard szyfruje pakiet tylko dla peera, którego dozwolone adresy obejmują cel, więc trasa polityki do interfejsu nie wystarcza, gdy lista peera wyklucza ten prefiks. Trzymaj listę pod kontrolą właściciela trasowania, zamiast polegać na tym, jakie trasy przypadkiem utworzy menedżer.
Znaczniki, tabele i pokrycie peera
Znaczniki są wspólną przestrzenią nazw, więc i wartość, i maska muszą być uzgodnione ze wszystkim innym, co ich używa. Reguła wysyłająca oznaczony ruch do osobnej tabeli wymaga zdefiniowanego wyniku, gdy ta tabela nie ma pasującej trasy, ponieważ nieodpowiedziane wyszukanie może przejść do następnej reguły i wysłać pakiet przez interfejs fizyczny. Trasa domyślna typu blackhole w osobnej tabeli zamienia tę cichą ucieczkę w widoczne odrzucenie. Czego projekt wciąż nie potrafi, to zamknięcie przy awarii dla celu, który nigdy nie trafił do zestawu.
Własne zewnętrzne pakiety tunelu muszą uniknąć klasyfikatora. Narzędzia WireGuard dostarczają właśnie w tym celu znacznik gniazda, a jego użycie powstrzymuje enkapsulację przed trasowaniem z powrotem do interfejsu, który buduje.
Testuj każdy czas życia osobno
Trzy magazyny starzeją się według trzech harmonogramów: pamięć podręczna resolvera, elementy zestawu i śledzone połączenie. Testuj je w tej kolejności i obserwuj, czy każdy porusza się wtedy, kiedy powinien. Poniższe polecenia czytają resolver, zestaw, tabelę połączeń i reguły polityki, niczego nie zmieniając.
dig +short office.example
nft list set inet vpn_select office_v4
conntrack -L -d 10.60.8.15
ip rule show
Świeże wyszukanie, które dodaje element, dowodzi, że zasilanie działa, natomiast nieaktualny element przeżywający swoją odpowiedź jest niezgodnością czasu życia, którą warto zapisać. Nowe połączenie w tabeli połączeń z oczekiwanym znacznikiem pokazuje, że klasyfikator zadziałał, a stare połączenie zachowujące pierwotny znacznik to poprawne zachowanie, nie błąd. Lista reguł odpowiada, czy wyszukanie polityki w ogóle istnieje, co jest innym pytaniem niż to, czy pasowało. Przeczytaj cztery wyjścia w tej kolejności, a zawodzące przekazanie samo się ujawni.
Gdy wymaganiem jest, aby konkretna nazwa zawsze używała jednej ścieżki, zestaw zasilany z DNS nie może tego dowieść, ponieważ współdzielone adresy niosą też inne nazwy. Proxy lub mechanizm na poziomie aplikacji jest narzędziem tej gwarancji.