VPN klienti sa pripoja, ale internet nefunguje: tri chýbajúce diely
Tunel, ktorý odpovedá na ping, stále potrebuje preposielanie, preklad a preposielacie pravidlo. Zistite, ktorý z troch dielov chýba, skôr než budete klienta znova upravovať.
Klient dostane adresu, server odpovedá na ping a každá stránka napriek tomu vyprší. Väčšina ľudí v tomto bode začne upravovať profil klienta, čo je zvyčajne zbytočná práca: keď tunel stojí, server sa musí správať ako router. Tri podmienky musia platiť súčasne, kým paket odíde a vráti sa odpoveď, a príznak je rovnaký, nech chýba ktorákoľvek z nich.
Prečo funkčný tunel stále nemá cestu von
Jadro musí preposielať pakety medzi rozhraniami, čo je vo väčšine distribúcií Linuxu predvolene vypnuté. Prevádzka musí byť preložená na adresu, na ktorú dokáže vonkajší svet odpovedať, pokiaľ každý nadradený router už nepozná spiatočnú cestu do podsiete tunela. Preposielacia cesta firewallu musí prepúšťať prevádzku oboma smermi, vrátane odpovedí.
Každú z nich možno opraviť samostatne, a v tom je pasca. Zapnutie preposielania bez pravidla prekladu necháva pakety odchádzať so súkromným zdrojom a bez spiatočnej cesty. Pridanie prekladu bez preposielacieho pravidla nechá jadro paket zahodiť o krok neskôr.
Preto testujte tri vrstvy namiesto klienta a meňte po jednom, aby výsledok niečo znamenal.
Preposielanie je prepínač jadra, ktorý musíte natrvalo nastaviť
Pred zmenou skontrolujte aktuálnu hodnotu, potom ju nastavte a potvrďte, že zmena nadobudla účinnosť.
sysctl net.ipv4.ip_forward
sysctl -w net.ipv4.ip_forward=1
sysctl net.ipv4.ip_forwardPrvý príkaz hlási aktuálnu hodnotu, druhý ju nastaví počas behu a tretí dokazuje, že zápis prešiel. Hodnota počas behu zmizne pri ďalšom reštarte, a preto sa funkčné sedenie môže po údržbe pokaziť bez akejkoľvek zmeny konfigurácie.
Nastavte ju natrvalo v súbore pod /etc/sysctl.d/ a potom tento súbor aplikujte namiesto reštartu, aby ste to zistili. Na FreeBSD je ekvivalentom net.inet.ip.forwarding, pre trvalosť gateway_enable=YES v rc.conf. Zariadenie, ktoré hlási vypnuté preposielanie, vysvetľuje celú triedu hlásení „pakety dorazia a nič sa nevráti”. Nastavenie kontrolujte aj po každej aktualizácii, pretože prestavané jadro alebo vymenený obraz zariadenia ho môžu resetovať bez toho, aby to niekomu povedali.
Vyberte masquerade alebo jednu pevnú prekladovú adresu
Pri dynamickej vonkajšej adrese je masquerading najjednoduchšia správna forma. Ako zdroj uveďte podsieť tunela a ako výstup vonkajšie rozhranie.
iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -o eth0 -j MASQUERADEPri statickej verejnej adrese je preklad zdroja na presne túto adresu predvídateľnejší a ľahšie auditovateľný.
iptables -t nat -A POSTROUTING -s 10.9.0.0/24 -j SNAT --to-source 198.51.100.10Druhá forma nesie pascu údržby: pevne zapísaná adresa, ktorá sa neskôr zmení, drží tunel funkčný, zatiaľ čo prístup na internet ticho prestane. Buď použite masquerade, alebo pravidlo aktualizujte vždy, keď vás poskytovateľ presunie. Rozhranie je tiež dôležité, pretože router, ktorý zdieľa svoj vlastný nadradený tunel, musí prekladať cez tento tunel, nie cez fyzický WAN.
Filtrovacia tabuľka je tretia brána
Preposielanie aj preklad môžu byť správne, a paket napriek tomu umiera vo filtrovacej tabuľke. ufw je častý vinník: jeho preposielacia politika sa dodáva ako DROP a zvyšok nastavenia môže vyzerať úplne správne, zatiaľ čo to jedno nastavenie zabíja prevádzku. Zdvihnúť ju je vedomé bezpečnostné rozhodnutie, nie zaškrtávacie políčko.
iptables -A FORWARD -i tun0 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o tun0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTPrvé pravidlo povoľuje novú prevádzku z tunela von, druhé len odpovede späť. Zúžte obe na podsieť tunela a zamýšľaný cieľ, pretože plošné povolenie na rozhraní tunela mení VPN na otvorený výstupný bod pre každého, kto sa dokáže autentizovať.
Premostený tunel potrebuje inú odpoveď. Adresa patrí mostu, nie fyzickému portu, takže podriadenie rozhrania odoberie adresu, ktorú predtým malo, a hostiteľ vyzerá nedostupný, kým samotný most nedostane adresu, čo môže dodať dhclient br0. Tá porucha vyzerá ako problém VPN a je to problém druhej vrstvy. Skontrolujte vlastnú adresu mosta, skôr než sa dotknete firewallu, pretože zmena filtra neopraví hostiteľa, ktorý už nemá adresu, z ktorej by odosielal.
Kam sa pozerať, keď sa stránka nikdy nenačíta
Pingnite adresu tunela servera, aby ste dokázali, že tunel existuje. Potom spustite traceroute z klienta na verejnú adresu a čítajte, kde sa zastaví: na serveri paket dorazí, ale nie je preposlaný ani preložený; za serverom je problém vyššie a mimo vašich rúk.
ping -c 3 10.9.0.1
traceroute -n 198.51.100.10Prvý príkaz dokazuje, že tunel nesie prevádzku k samotnému serveru, a druhý ukazuje, ako ďaleko sa paket dostane von. Stopa, ktorá končí na adrese tunela, ukazuje na preposielanie alebo preklad na serveri, zatiaľ čo stopa, ktorá sa zastaví o jeden skok neskôr, ukazuje na poskytovateľa alebo spiatočnú cestu nadradeného routera.
Na serveri sledujte vonkajšie rozhranie, zatiaľ čo klient načítava stránku. Prevádzka odchádzajúca so súkromnou zdrojovou adresou znamená, že chýba preklad, a úplná absencia odpovede znamená, že ju zahadzuje preposielacia cesta alebo nadradená spiatočná trasa.
Ak sa vzdialení klienti musia dostať aj na hostiteľov v LAN servera, pamätajte, že LAN potrebuje spiatočnú trasu do podsiete tunela. To je smerovanie, nie preklad, a je to krok, na ktorý sa najčastejšie zabúda, keď cesta na internet konečne funguje.