Zašto net.ipv4.conf.default.forwarding ostavlja tun0 na miru
default.forwarding samo sije nove interfejse, ne i živi tunel. Uporedite ip_forward, šablon i interfejs u namespace-u koji ga posjeduje.
Postavili ste net.ipv4.conf.default.forwarding=1, restartovali VPN, a tunel i dalje odbacuje pakete koje bi gateway trebao rutirati. Postavka u datoteci izgleda ispravno, a interfejs i dalje javlja da je prosljeđivanje onemogućeno. Ništa nije pokvareno: promijenili ste vrijednost koju nasljeđuju budući interfejsi, a ne onu koju koristi živi tunel.
Prođite kroz ovo na hostu koji posjeduje tunel, u mrežnom namespace-u u kojem tunel zaista postoji. Kontejner ili mrežni namespace može držati interfejs dok host pokazuje druge brojeve.
Čitajte tri vrijednosti zajedno
Počnite poređenjem prekidača na nivou gatewaya, šablona za nove interfejse i interfejsa koji vas zanima. Zamijenite tun0 stvarnim ulaznim interfejsom i pročitajte i povratni interfejs, jer se prosljeđivanje procjenjuje na mjestu gdje paket stiže.
sysctl net.ipv4.ip_forward
sysctl net.ipv4.conf.default.forwarding
sysctl net.ipv4.conf.tun0.forwardingČest rezultat je ip_forward = 0, default.forwarding = 1 i tun0.forwarding = 0. Prve dvije se ne slažu o ulozi hosta, a treća pokazuje šta interfejs zaista radi. Ta kombinacija odgovara hostu koji nikada nije konfigurisan kao ruter, već je dobio samo vrijednost šablona. Tri broja nisu u suprotnosti; ona odgovaraju na tri različita pitanja. Ni zapisivanje vrijednosti šablona ne odlučuje o ulozi hosta.
Zašto se pomjera baš globalni prekidač
net.ipv4.ip_forward je kontrola na nivou gatewaya. Njegova promjena ažurira postavke prosljeđivanja po interfejsu kao dio iste operacije, zato jedan upis može natjerati postojeći tunel da počne prosljeđivati. default.forwarding samo sije interfejse koji se inicijaliziraju nakon toga, pa tunel koji je već postojao zadržava vrijednost s kojom je rođen.
Dokumentacija kernela označava ip_forward kao poseban iz povezanog razloga: njegova promjena resetuje skup drugih IPv4 parametara na zadane vrijednosti za host ili ruter. To ga čini tupim alatom. Postaviti ga jednom u sklopu uspostavljanja uloge gatewaya je u redu; prebacivati ga iznova kao trik za otklanjanje grešaka može tiho prepisati konfiguraciju koju ste pažljivo doveli u red.
Vrijednosti po interfejsu takođe postoje s razlogom. Namjerno vođen gateway može držati prosljeđivanje isključeno na interfejsu koji nikada ne bi trebao rutirati, čak i dok host prosljeđuje negdje drugdje. Zato je važno čitati živi interfejs i zato samo globalna vrijednost nije cijeli odgovor. Takav izuzetak čitajte kao svjesnu odluku i zapišite zašto je taj interfejs drugačiji. Inače će ga sljedeći inženjer rado "popraviti".
Učinite postavku trajnom na pravom mjestu
Uspješan jednokratni sysctl -w dokazuje da kernel prihvata vrijednost. Ne preživljava restart, a ni mrežnog menadžera koji pri ponovnom povezivanju ponovo primjenjuje svoju zamisao o konfiguraciji interfejsa. Stavite ulogu gatewaya u sysctl konfiguracijsku datoteku ili u mrežni menadžer koji posjeduje host, pa zatim restartujte servis koji je primjenjuje.
Redoslijed je važan kod tunela. Ako menadžer stvara interfejs pri podizanju i primjenjuje prosljeđivanje poslije, interfejs može naslijediti stari default. Restart servisa koji ponovo stvara tunel takođe je događaj stvaranja i lako se propusti kad unit izgleda zdravo. Provjerite slijed, ne samo konačan sadržaj datoteke.
Pročitajte ponovo iste tri vrijednosti nakon što se VPN ponovo poveže i još jednom nakon restarta. Novo stvoreni tunel je novi interfejs, a novi interfejs uzima default koji važi u trenutku stvaranja. Ako se brojevi mijenjaju kroz te događaje, konfiguraciju primjenjuje nešto što još niste identifikovali.
Ne popravljajte ovo pogrešnim alatom
Kad je prosljeđivanje izgledalo pokvareno, iskušenje je isprazniti firewall ili dodati masquerading. Ni jedno ni drugo ne rješava prekidač prosljeđivanja. Stanje prosljeđivanja, dozvola za prosljeđivanje, ruta do odredišta i povratni put su četiri odvojena zahtjeva, a samo prvi je sysctl.
Testirajte i ispravnim tokom. Zahtjev upućen na samom gatewayu uopće ne vježba prosljeđivanje; to je lokalno generisan saobraćaj. Pitanje je da li se paket koji dolazi od VPN klijenta ili LAN hosta prihvata i dalje rutira, pa test mora nastati iza gatewaya.
Držite IPv6 slučaj odvojeno
Ovdje je sve IPv4. IPv6 prosljeđivanje, oglasi rutera i ponašanje accept_ra imaju svoje kontrole, a kopiranje ipv4 puta u ipv6 postavku stvara datoteku koja izgleda uvjerljivo i ne radi ništa korisno. Gateway s dva steka treba svjesno konfigurisati oba skupa.
Još jedna provjera: nakon što se vrijednosti slože, potvrdite da je ruta tunela odabrana za odredište i da povratni put postoji. Prosljeđivanje uključeno na interfejsu bez rute i dalje je crna rupa, a taj kvar izgleda isto s klijentove strane.