Czytaj konfigurację WireGuard linia po linii, od Interface do Peer
Klucze Interface należą do tego końca, klucze peer do drugiej strony. Czytaj każdą linię jako jeden kierunek, a potem sprawdź, co wg-quick dodał wokół protokołu.
Większość zepsutych konfiguracji WireGuard nie myli się w wartości; umieszcza poprawną wartość po niewłaściwej stronie. Klucz prywatny należy do tej maszyny, peer niesie klucz publiczny drugiej maszyny, a adres siedzi w bloku interface, choć opisuje, gdzie mieszka tunel. Czytaj plik jako dwa spotykające się kierunki, a potem sprawdź, co dodał skrypt pomocniczy. Sam protokół ma mniej pól niż plik, a dodatkowe warto znać osobno.
Klucze interface opisują tę maszynę
Blok interface trzyma własną tożsamość tego końca. PrivateKey to ta tożsamość i nigdy nie opuszcza hosta; z niej wyprowadzany jest pasujący klucz publiczny i to jego wymieniają inne peery. ListenPort to miejsce, w którym ta strona przyjmuje uściski dłoni, więc dwa klienty za jednym adresem potrzebują różnych portów.
Address to adres tunelu, na który odpowiada ten host, zapisany z długością prefiksu, bo będzie też źródłem, którego użyje. Błędny prefiks tutaj zmienia, które cele host uznaje za bezpośrednio połączone, i to daje awarie wyglądające na routing, a nie na konfigurację.
Wszystko inne w [Interface] bloku z prawdziwym klientem zwykle dodaje wg-quick: DNS, MTU, Table, i linie hooków. To nie są pola protokołu, a goła wg konfiguracja całkowicie je ignoruje.
Każdy wpis peer opisuje jedną drugą stronę
[Peer] blok to strona zdalna. PublicKey to wyprowadzony klucz tej strony, nigdy jej klucz prywatny, a PresharedKey to opcjonalny dodatkowy sekret, który obie strony muszą trzymać identycznie. Endpoint to miejsce docelowe wysyłki, a PersistentKeepalive prosi ten host o wysłanie pakietu po interwale, gdy nic innego nie wychodzi.
Dwa błędy wyjaśniają większość zamieszania tutaj. Skopiowanie własnego klucza prywatnego do bloku peer sprawia, że oba końce dzielą jedną tożsamość, a uścisk dłoni zawodzi w sposób, który słabo się loguje. Endpoint pominięcie u klienta jest zwykle celowe, bo serwer uczy się adresu z przychodzącego uścisku dłoni; pominięcie go na serwerze, który musi inicjować, już nie. Pamiętaj też, że keepalive utrzymuje mapowanie NAT otwarte i nie poprawia przepustowości ani nie zmniejsza opóźnienia, więc trzydzieści sekund dodatkowych pakietów nic nie kupuje, gdy ruch już płynie.
AllowedIPs to routing, nie lista uprawnień
AllowedIPs to routing klucza kryptograficznego WireGuard. Na wyjściu decyduje, który peer otrzyma pakiet na podstawie celu. Na wejściu decyduje, czy pakiet przychodzący od tego peera zostanie przyjęty na podstawie źródła. To samo pole robi obie rzeczy, dlatego nie jest listą kontroli dostępu ani listą dozwolonych witryn.
Wąskie AllowedIPs na serwerze dla klienta oznacza, że serwer przyjmie tylko pakiety deklarujące te źródła i wyśle tylko te cele do tego klienta. Rozszerz jedną stronę bez rozszerzania drugiej, a dostaniesz tunel, który wstaje i niczego nie przepuszcza.
Co wg-quick dodaje wokół protokołu
wg-quick czyta ten sam plik i wykonuje kroki sieciowe, które protokół zostawia systemowi operacyjnemu. Przydziela adres interface, dodaje trasy wyprowadzone z AllowedIPs, zapisuje ustawienia resolvera i uruchamia polecenia hooków po kolei.
Ta warstwa wyjaśnia klasyczną asymetrię. Plik z 0.0.0.0/0 i linią DNS daje klientowi trasę domyślną i resolver, a wobec reguł przekazywania czy NAT serwera nie robi absolutnie nic. Należą one do konfiguracji samego serwera i żaden plik klienta ich nie dostarczy.
Miej jednego właściciela pliku. Ręczna edycja, gdy SaveConfig jest włączony, oznacza, że twoja zmiana zniknie przy następnym zejściu interface, a interface nie powie ci, że to się stało.
Sprawdzaj stan zastosowany, nie plik
Plik to zamiar. Stan zastosowany to to, co trzyma jądro, i rozchodzą się za każdym razem, gdy pomocnik, drop-in albo hook coś edytował po aktywacji.
Czytaj stan na żywo i adresację razem, a potem porównaj oba z tym, co napisałeś:
sudo wg show
ip -4 addr show dev wg0
ip -4 route show dev wg0
grep -v "^#" /etc/wireguard/wg0.confJeśli lista peerów jest pusta, interface powstał bez zastosowania swojej konfiguracji. Jeśli adresy i trasy istnieją, ale liczniki zostają na zerze, plik się wczytał, a uścisk dłoni zawodzi, co jest problemem klucza lub końca, a nie kolejności sekcji. Porównaj oba widoki przed edycją, bo różnica między nimi jest zwykle rzeczywistą usterką.