Ažurira li naziv hosta Pi pristupnika statične rute sam od sebe?
DNS naziv za vaš Pi pristupnik nikada ne prepisuje instalirani sljedeći skok. Pogledajte što jezgra pamti i tko mora ažurirati rutu.
Usmjeravanje statične rute na naziv pristupnika izgleda kao da bi trebalo preživjeti promjenu adrese, a ne preživi. Naziv živi u DNS-u, dok ruta stoji u klijentovoj tablici usmjeravanja kao numerički sljedeći skok. Kad se Pi preseli na drugu adresu, svaki potrošač koji je već instalirao stari skok nastavlja slati promet na isti broj. Nijedan se razrješivač ne spaja na tablicu prosljeđivanja, pa ništa ne prepisuje taj zapis umjesto vas.
DNS odgovor i ruta su različiti objekti
Recimo da vaš Pi odgovara na vpn-gw.lan i prosljeđuje 10.44.0.0/16 u tunel. Klijenti na 192.168.30.0/24 dolaze do njega preko statične rute. Kad se adresa Pi računala preselila s 192.168.30.4 na 192.168.30.11, zapis je slijedio unutar svog TTL-a, a rute nisu.
Dva se pogleda razilaze na način koji je lako propustiti, jer oba izgledaju uvjerljivo kad ih pitate odvojeno:
$ ip route get 10.44.0.1
10.44.0.1 via 192.168.30.4 dev eth0 src 192.168.30.20
$ dig +short vpn-gw.lan
192.168.30.11
Samo prvi redak odlučuje kamo paketi idu. Drugi redak odgovara na pitanje koje jezgra nikad nije postavila. Zapis s nekoliko A zapisa također ne postaje politika prebacivanja pri kvaru, jer svaka adresa i dalje mora biti upotrebljiv sljedeći skok na tom segmentu.
Što ostaje u tablici nakon što naredba završi
Linux ruta bilježi dvije stvari koje su ovdje važne: sljedeći skok kao adresu protokola i izlazno sučelje kao broj indeksa. rtnetlink atributi rute nazivaju to prvo polje RTA_GATEWAY, a ono drži bajtove. Jednom kad je zapis na mjestu, na njega nije prikvačen nikakav TTL i nikakvo pozadinsko pretraživanje ga ne osvježava.
Zato ip route add 10.44.0.0/16 via vpn-gw.lan može izgledati kao da radi. Alat razrješava naziv dok naredba radi, upisuje dobivenu adresu i potpuno zaboravlja naziv. Pokrenite ip route show 10.44.0.0/16 nakon toga i dobit ćete doslovnu adresu natrag.
To ponašanje vrijedi znati prije nego okrivite tunel.
Alati koji umjesto vas razrješavaju naziv, i kada
Neki usmjerivači i vatrozidi doista prihvaćaju nazive hostova u polju rute ili pristupnika. Važno je kada se razrješavanje dogodi. Ako uređaj razrješava naziv samo dok primjenjujete konfiguraciju, pohranjeni je zapis jednako statičan kao upisana adresa, a kasnija promjena adrese traži još jedno primjenjivanje. To što polje prihvaća naziv ne govori vam ništa o osvježavanju.
Upravljane postavke obično dijele posao. DHCP rezervacija ili statički najam drži Pi na jednoj adresi, a DNS zapis jednostavno slijedi najam. Ništa ne mora pratiti pokretnu metu jer se meta ne pomiče.
Nadzirani alat za ažuriranje drugi je legitiman uzorak i treba mu vlasnik.
Prikvačite adresu ili sami pokrenite alat za ažuriranje
Za mali LAN rezervacija na DHCP poslužitelju najjeftinije je rješenje. Odaberite adresu izvan dinamičkog skupa, vežite je uz MAC adresu Pi računala i potvrdite je s ip -4 addr show dev eth0 nakon sljedeće obnove najma. Zatim usmjerite sljedeći skok klijenata na tu adresu jednom. Sada imate stabilan pristupnik i zapis koji ga opisuje, a to je redoslijed u kojem odnos zapravo funkcionira.
Ako se Pi doista mora preseliti, držite popravak rute na jednom mjestu umjesto ručnog uređivanja svakog klijenta. Kratka skripta koja razrješava, uspoređuje i zamjenjuje dovoljna je da korak učini ponovljivim:
new=$(dig +short vpn-gw.lan | head -n1)
cur=$(ip route get 10.44.0.1 | awk '{print $3}')
if [ "$new" != "$cur" ]; then
ip route replace 10.44.0.0/16 via "$new"
fi
ip route get 10.44.0.1
Posljednja naredba prihvatni je test jer ispisuje pristupnik koji će jezgra doista koristiti. Ako je ispisana adresa još stara, skripta je radila u pogrešnom mrežnom prostoru naziva ili nije imala dopuštenje, a DNS strana je nevažna.
Provjerite i povratni put. Pi mora znati kako doći do klijentske podmreže, a njegov vatrozid mora dopuštati promet tunela. Zadana ruta dodana da prekrije nesklad obično skriva pravu prazninu i tjedan dana kasnije slomi nešto drugo.