Tunel je aktivan, handshake se događa svake dvije minute, i točno jedna adresa s druge strane odgovara. Pingovi na tunelsku adresu peera rade; ništa iza nje ne radi. Netko pročita konfiguraciju sučelja, vidi prefiks hosta i zaključi da je maska pogrešna. Proširenje na /24 popravi ping na neko vrijeme i zatim pokvari nešto drugo. Prefiks nikada nije bio kriv, a ruta koja je nedostajala nije ona koju kontrolira maska.

Što prefiks sučelja zapravo stvara

Na Linuxu dodjela adrese sučelju stvara povezanu rutu za taj prefiks. Dodijelite li prefiks hosta, povezana ruta pokriva jednu adresu. Dodijelite li /24, pokriva njih 256, a svaka od njih sada se smatra dostupnom preko te veze.

ip -4 addr show dev wg0
ip -4 route show dev wg0
ip route get 10.80.7.1

Prefiks hosta posve je normalan izbor za tunel od točke do točke, jer je na drugom kraju točno jedan peer. Treća naredba je ona koja odgovara na korisnikovo pitanje: govori koje bi sučelje kernel upotrijebio za to odredište, i neće pokazati ništa korisno ako se ne podudara nijedna ruta.

To je cijelo objašnjenje simptoma. Jedna adresa odgovara jer za nju postoji povezana ruta ili zato što je popis dopuštenih peera slučajno uključuje. Sve ostalo nema rutu i odbacuje se prije nego što WireGuard uopće bude uključen. Tunel je cijelo vrijeme zdrav, zato brojač handshakea i dalje izgleda umirujuće.

AllowedIPs su dva pravila pod jednim imenom

Popis dopuštenih po peeru u WireGuardu obavlja dva posla odjednom, a sintaksa konfiguracije čini da izgledaju kao jedan. Na ulazu dopušta koje izvorne adrese peer smije predstaviti. Na izlazu odabire kojem se peeru paket šalje, pronalaženjem najspecifičnijeg podudaranja.

Nijedan od tih poslova nije routing. Kernel još mora odlučiti da paket pripada sučelju tunela prije nego što ga WireGuard pogleda, a ta odluka dolazi iz tablice usmjeravanja. Zapis peera sa širokim popisom dopuštenih ne instalira sam rutu.

Zato konfiguracija može izgledati potpuna, a ponašati se asimetrično. Klijent šalje na drugu stranu jer ruta postoji, a odgovori nikada ne dolaze jer popis dopuštenih druge strane ne dopušta izvor klijenta ili zato što druga strana nema povratni put. Oba su smjera odvojene odluke s odvojenim načinima kvara. Zapisati koji od njih testirate pola je dijagnoze.

Odakle dolazi ruta

Ako koristite wg-quick, rute se generiraju za vas iz popisa dopuštenih svakog peera, osim ako ste postavili Table = off i sami preuzeli kontrolu. To je ponašanje koje alat dokumentira, i to je razlog zašto konfiguracija bez izričitih direktiva ruta ipak radi.

sudo wg show wg0 allowed-ips
ip route show | grep wg0
sudo wg-quick strip wg0

Usporedite popis dopuštenih s rutama koje doista postoje. Peer koji dopušta cijelu podmrežu, ali je stvorio samo rutu hosta, znači da pomoćnik nikada nije pokrenut ili da sučeljem upravljate izravno pomoću wg i ip, i u tom slučaju ništa vam ne generira rute.

Kada njime upravljate ručno, ruta je jedan redak i njezin je oblik izričit: odredište kroz sučelje, bez pristupnika jer je veza od točke do točke. Dodavanje nije zaobilazno rješenje za loš prefiks; to je nedostajuća polovica dizajna koji je svjesno preuzeo usmjeravanje.

Širi prefiks ne dodaje zapis peera

Primamljiv popravak je promijeniti adresu u /24 kako bi povezana ruta pokrila LAN poslužitelja. Čini se da radi, a razlog zašto se čini da radi jest to što se povezana ruta sada podudara, a ne to da je WireGuard naučio nešto novo.

Ono što ste također učinili jest da ste cijeli raspon prisvojili kao izravno dostupan preko te veze, uključujući adrese koje pripadaju drugim peerima ili LAN-u koji je zapravo iza poslužitelja. Promet prema tim adresama sada ulazi u tunel, a hoće li izaći na drugoj strani ovisi o usmjeravanju i popisima dopuštenih samoga poslužitelja.

Kriptografska strana nije zahvaćena ni u kojem slučaju. WireGuard još treba zapis na popisu dopuštenih koji pokriva odredište da bi odabrao peera, a druga strana još treba zapis koji pokriva vaš izvor da bi ga prihvatila. Širi prefiks sučelja ne može pružiti nijedno od toga.

Potvrdite oba smjera prije nego što išta promijenite

Obradite dva kraja odvojeno i zapišite što svaki kaže. Na klijentu ruta i zapis peera; na poslužitelju zrcalna slika plus njegov vlastiti povratni put:

ip route get 192.168.70.20
sudo wg show wg0 allowed-ips
sudo wg show wg0 latest-handshakes
sudo tcpdump -ni wg0 -c 10

Snimka je ono što rješava sporove o smjeru. Ako se odlazni paketi pojave na sučelju tunela, a poslužitelj ništa ne bilježi, udaljeni kraj ih odbija, obično zato što je vaš izvor izvan njegova popisa dopuštenih. Ako se ne pojavi baš ništa, ruta nedostaje ili pokazuje negdje drugdje.

Zatim popravite uži kraj. Zapis na popisu dopuštenih na strani poslužitelja za adresu vašeg klijenta i zapis na strani klijenta za odredišnu podmrežu uobičajen je oblik i ostavlja prefiks sučelja na miru. Proširite prefiks samo ako plan adresa doista želi zajedničku podmrežu na toj vezi, i učinite to kao promjenu plana, a ne kao korak otklanjanja pogrešaka.

Povezani članci