Odvojen izlaz: VPN bazen na usb0, promet pristupnika na eth0
Proslijeđeni VPN klijenti mogu izlaziti kroz usb0 dok pristupnik zadržava svoj eth0 zadani put. Izgradite potpunu odabranu tablicu, a zatim učinite da kvar zatvara umjesto da propušta.
Klijenti se povezuju i provjeravaju identitet, a zatim njihov promet izlazi kroz pogrešan uzlazni link, jer jedini zadani put na uređaju pripada samom pristupniku. Zamjena tog zadanog puta slomila bi vlastita ažuriranja uređaja i pristup za upravljanje, pa odabir mora biti uži od „sveg prometa“. Radni oblik je pravilo politike vezano uz unutarnju izvornu adresu klijentskog bazena, koje pokazuje na drugu tablicu usmjeravanja koja posjeduje alternativni WAN. Odande nadalje kontrolni popis govori o potpunosti i ponašanju pri kvaru, a ne o samom pravilu.
Potvrdite da izvorna adresa preživljava do odluke o usmjeravanju
Pravilo politike koje odgovara rasponu izvora aktivira se samo kad paket još nosi taj izvor u trenutku pretraživanja. Proslijeđeni klijentski promet to čini, sve dok ga nešto uzvodno nije prepisalo prije usmjeravanja. Promet koji generira pristupnik to ne čini, i upravo zato njegov vlastiti zadani put može ostati gdje jest.
Ovdje lokalni testovi zavaravaju. Pokretanje curl na pristupniku lokalno je generiran tok s adresom pristupnika, pa uzima glavnu tablicu i ne dokazuje ništa o klijentskom putu. Testirajte s povezanog klijenta ili generirajte promet s izvorom koji doista pripada bazenu.
Započnite tako da zapišete stvarne vrijednosti: prefiks bazena, sučelje tunela koje ga nosi, adresu i sljedeći skok drugog WAN-a te broj tablice koji namjeravate koristiti. Očistite stara pravila iz bilo kojeg prethodnog pokušaja prije dodavanja novih, jer udvostručena pravila na različitim prioritetima daju kvarove koji izgledaju slučajno.
Izgradite odabranu tablicu koja je potpuna
Tablica nije zadani put s prijateljem. Potrebno joj je dovoljno ruta da se svako pretraživanje razriješi unutar nje, uključujući povezanu rutu za WAN podmrežu kako bi sljedeći skok bio dostupan. Za bazen 10.77.0.0/24 na tun1, WAN adresu 203.0.113.20/24 sa sljedećim skokom 203.0.113.1 i tablicu 600:
ip -4 route replace 203.0.113.0/24 dev usb0 src 203.0.113.20 table 600
ip -4 route replace 10.77.0.0/24 dev tun1 table 600
ip -4 route replace default via 203.0.113.1 dev usb0 table 600
ip -4 rule add priority 1500 from 10.77.0.0/24 lookup 600
Pravilo stoji na prioritetu ispod bilo kojeg postojećeg pravila koje hvata sve, pa odgovarajući klijenti prvo udaraju u tablicu 600, a sve ostalo pada u glavnu tablicu. Referenca za ip-rule u cijelosti opisuje model poredanog pretraživanja i sintaksu selektora.
Zatim razmislite što tablica ne sadrži. Odredište koje ima rutu samo u glavnoj tablici, poput upravljačke podmreže dostupne kroz eth0, neće se naći u tablici 600 i neće se vratiti u glavnu kad ondje postoji zadani put. Ako su ti putevi važni, dodajte ih izričito u odabranu tablicu, što je obično točan odgovor za tablicu VPN izlaza.
Držite vlastiti promet slušača izvan politike
Slušač OpenVPN ima vlastitu vanjsku vezu, nošenu onim uzlaznim linkom kojim ga je klijent dosegnuo. Taj promet mora zadržati povratni put s kojim je stigao, a široko pravilo koje pokriva javnu adresu poslužitelja ili cijelo sučelje tunela može ga povući u alternativnu tablicu. Ograničite pravilo na unutarnji bazen i ništa drugo.
Filtriranje povratnog puta zaslužuje pogled iz istog razloga. Kad odgovori klijentima izlaze kroz usb0 dok je zahtjev stigao drugim linkom, stroga postavka rp_filter može odbaciti pakete koje politika usmjeravanja smatra valjanima. Provjerite djelotvorne sysctl vrijednosti na oba sučelja prije nego zaključite da je pravilo zakazalo.
Redoslijed je važan i u odnosu na sve drugo na uređaju. Docker mostovi, drugi VPN i sva postojeća pravila iz slike pružatelja dodaju prioritete, pa pročitajte cijeli popis pravila umjesto da pretpostavite da je prioritet 100 sam.
Uskladite prosljeđivanje i prevođenje s rutom
Usmjeravanje bira uzlazni link; ono ne daje dopuštenje za prosljeđivanje. Jezgra mora imati omogućeno IPv4 prosljeđivanje, a vatrozid mora prihvatiti smjer od klijenta prema WAN-u i povratni promet. Ispravna tablica s FORWARD lancem koji odbacuje tok daje isti simptom kao nedostajuća ruta, zato se oboje provjerava u istom prolazu.
Ako drugi WAN neće usmjeravati privatni bazen natrag prema vama, prevedite izvor na tom izlazu. Za sučelje s dinamičkom adresom uobičajen je izbor usko masquerade pravilo ograničeno na bazen i sučelje:
iptables -t nat -A POSTROUTING -s 10.77.0.0/24 -o usb0 -j MASQUERADE
Ovdje je opseg važniji od cilja. Masquerade pravilo koje odgovara bilo kojem izlaznom sučelju prepisat će i promet koji ispravno izlazi kroz eth0, a to skriva pogreške usmjeravanja umjesto da ih ispravi. Prevođenje se izvodi nakon odluke o usmjeravanju, pa nikada ne može popraviti paket poslan na pogrešan uzlazni link.
Trošak tunela također traži pažnju kad se putevi razlikuju. Ako klijenti ugovore velik TCP MSS, a alternativni WAN ima niži MTU ili tunel unutar sebe, veliki segmenti zapinju dok mali rade. Stezanje MSS-a na putu prosljeđivanja pretvara to u predvidljivo ponašanje umjesto povremenog zastajanja.
Odlučite što se događa kad usb0 nestane
Prazna tablica nije stanje zatvaranja pri kvaru. Ako odgovarajuća ruta nestane, pretraživanje se nastavlja na sljedeće pravilo, dolazi do glavne tablice i uzima eth0 zadani put. Promet koji je trebao izaći kroz drugi WAN tiho izlazi kroz prvi, što je za postavljanje s usmjeravanjem po politici obično ishod koji najmanje želite.
Gdje je taj povratak neprihvatljiv, dodajte izričitu terminalnu rutu u tablicu 600, poput blackhole zadanog puta, ili odbacite bazen u vatrozidu dok je sučelje dolje. Bilo koji od tih izbora je odluka koju možete zapisati; šutnja nije.
Trajnost je posljednja stavka. Tko god upravlja obama linkovima, bio to mrežni upravitelj, skripta otpremnika ili životni ciklus veze, mora ponovno stvoriti rute i pravilo pri svakom ponovnom spajanju bez dodavanja duplikata. Provjerite zahtjevom sa stvarnog klijenta i zasebnim zahtjevom s pristupnika, potvrdite opaženi izlaz na obama, zatim izvucite drugi WAN i gledajte koji se od dva ishoda koja ste osmislili doista događa. IPv6 treba vlastitu tablicu, pravilo i prevođenje; gornje pravilo za IPv4 o tome ne govori ništa.