Učinite da IPv4 prosljeđivanje preživi restart VPN pristupnika
Postavite ip_forward u mrežni imenski prostor koji nosi klijentske pakete, dajte postavci jednog vlasnika i dokažite da preživljava restart umjesto da samo uređujete datoteku.
Ping prema pristupniku radi, a dolazak do bilo čega iza njega ne radi, i to je oblik problema s prosljeđivanjem, a ne problema s tunelom. Lokalna dostava do pristupnika dokazuje da se tunel podigao i da je dodjela adrese uspjela; ona ne govori ništa o tome hoće li kernel propustiti paket s jednog sučelja na drugo. Prije nego što dirnete bilo koji sysctl, potvrdite da je računalo namijenjeno usmjeravanju ovog prometa i pronađite mrežni kontekst koji drži sučelje okrenuto klijentu. Zatim pročitajte vrijednost tamo, a ne gdje je posljednji pročitani vodič slučajno pogledao.
Dolazak do pristupnika nije isto što i prosljeđivanje
Unutar kernela odvijaju se dvije odvojene odluke. Dostava na lokalnu adresu završava putovanje paketa; prosljeđivanje ga ponovno šalje kroz drugo sučelje, a tom drugom odlukom upravlja se po mrežnom imenskom prostoru. Pristupnik može biti savršeno dostupan dok je prosljeđivanje isključeno, a s ping upita te dvije greške izgledaju identično.
Zapišite na koje sučelje klijentski paket dolazi i kroz koje sučelje dalji put izlazi. Oba pripadaju jednom imenskom prostoru, a taj imenski prostor drži postavku koja je važna.
Pročitajte vrijednost tamo gdje paketi zaista jesu
Na pristupniku koji usmjerava u host imenskom prostoru, jedna naredba odgovara na pitanje: sysctl net.ipv4.ip_forward. Kada ulazni i dalji put žive u imenovanom imenskom prostoru, pitajte taj prostor: ip netns exec vpn-gw sysctl net.ipv4.ip_forward. Vrijednost hosta nije zamjena za vrijednost imenskog prostora, a jedinica na hostu nije dokaz ničega.
Nema svaki kontekst usmjeravanja oznaku koju možete predati u ip netns. Runtimei kontejnera i servisi stvaraju imenske prostore koji se nikada ne registriraju pod prijateljskim imenom, a za njih koristite alate za inspekciju runtimea. Zamijenite vpn-gw stvarnim imenom, ili mehanizmom runtimea koji doseže isti kontekst, i prestanite nagađati na razini hosta.
Dajte postavci jednog vlasnika
Na konvencionalnom host pristupniku sa systemd, trajni oblik je drop-in datoteka s imenom koje odabere administrator, poput /etc/sysctl.d/60-vpn-forwarding.conf, koja sadrži net.ipv4.ip_forward = 1. Napišite datoteku, zatim učitajte upravo tu datoteku da se promijeni i živo stanje: sudo sysctl -p /etc/sysctl.d/60-vpn-forwarding.conf, nakon čega slijedi ponovno čitanje. Ime datoteke je primjer, a ne rezervirana VPN putanja, i vodeći broj je važan jer datoteke sortirane kasnije pobjeđuju.
Prioritet je mjesto gdje se trajnost tiho lomi. Provjerite i učitavač distribucije i svoj drop-in, jer procps sysctl --system na kraju također čita /etc/sysctl.conf, dok je sysctl.d redoslijed u systemd posve druga sekvenca. Kasnija dodjela može isti ključ odmah vratiti, ostavljajući vašu datoteku ispravnom, a efektivnu vrijednost pogrešnom. Ne prepisujte postojeću administratorsku datoteku da biste dobili taj spor; pronađite vlasnika i promijenite tamo.
Imenski prostor stvoren nakon podizanja sustava uopće ne kontrolira host drop-in. Njegova postavka pripada onome što ga stvara, bilo da je to runtime kontejnera ili jedinica za pripremu imenskog prostora. Dati kontejneru široke privilegije hosta da bi se izbjeglo pitanje lošija je trgovina od trošenja deset minuta na pronalaženje pravog vlasnika.
Znajte što prekidač košta prije nego što ga okrenete
ip_forward nije bezopasan boolean. Dokumentacija kernela napominje da njegova promjena vraća nekoliko drugih IPv4 parametara na zadane vrijednosti hosta ili usmjerivača, pa dijagnostičko okretanje može odbaciti podešavanja napravljena negdje drugdje i nikada to ne spomenuti. Tretirajte ga kao promjenu konfiguracije s nuspojavama, a ne kao probu koju možete izvesti olako.
To također isključuje isključivanje i uključivanje svaki put kada klijent ne može doći do hosta. Ako je vrijednost već jedinica, kvar je negdje drugdje na putu, a prepisivanje istog ključa treći put ga neće pomaknuti.
Dokažite trajnost, zatim testirajte ostatak puta
Pročitajte vrijednost ponovo u četiri trenutka: odmah nakon promjene, nakon što se VPN sučelje pojavi, nakon ponovnog povezivanja i nakon planiranog restarta. Vrijednost koja se vrati u bilo kojem od tih trenutaka ima drugog vlasnika, a još jedan jednokratni upis samo to skriva do sljedećeg restarta.
Uključeno prosljeđivanje i dalje ostavlja tri stvari za provjeru. Klijentu treba ruta do odredišta, pristupniku treba dalja ruta plus dozvola da je koristi, a odredištu treba povratni put do adrese klijentskog tunela. Privatna usmjerena LAN mreža ne zahtijeva NAT automatski, zato ne dodajte masquerading prije nego što saznate koja od tri stvari nedostaje, i testirajte s predviđenog klijenta, a ne s pristupnika, jer zahtjev nastao na pristupniku nikada ne dotiče put prosljeđivanja koji ste upravo omogućili. IPv6 nosi vlastitu politiku prosljeđivanja i usmjeravanja, pa radni test IPv4 ne govori ništa o njoj.
Držite drop-in putanju, vlasnika imenskog prostora i naredbu za ponovno čitanje zajedno u runbooku. Tko ovo preuzme sljedeći treba moći pročitati vrijednost, vidjeti ko je posjeduje i u roku od minute odlučiti je li problem u trajnosti ili u ostatku puta.