Dva inženjera sa istim OpenBSD pristupnikom često će ti dati dva različita skupa pravila za dosezanje udaljene mreže, a oba se mogu braniti. Izbor između prevođenja izvora i povratne rute nije uopšte pitanje sintakse. Sve se svodi na to što suprotna strana već zna o 192.168.88.0/24 i što treba da zadržiš u svojim zapisima. Pogrešiš li u tome, nat-to linija izgledaće savršeno ispravno dok odgovori nestaju u udaljenom podrazumevanom pristupniku.

Usmeravanje i prepisivanje odgovaraju na različita pitanja

Tabela usmeravanja odlučuje da je 172.20.0.0/16 dostupan preko tun0, i ta odluka se donosi pre nego što se konsultuje bilo kakvo pf prevođenje. Prevođenje izvora zatim menja zaglavlje paketa tako da udaljeni kraj vidi adresu tunela pristupnika umesto računara na LAN-u. Nijedan mehanizam ne zamenjuje drugi: nat pravilo ne može da stvori rutu, a ruta ne može da ubedi udaljeni usmerivač koji nikad nije čuo za tvoju privatnu podmrežu. Kad udaljenoj strani nedostaje povratni put, odgovori se odbacuju ili prosleđuju njenom podrazumevanom pristupniku, i nikakvo podešavanje pravila to ne ispravlja.

Jednostavno rečeno, prosleđivanje odgovara kuda saobraćaj ide, a prevođenje odakle izgleda da dolazi. Drži ih u odvojenim mentalnim kutijama dok osmišljavaš skup pravila.

Tri uslova koja odlučuju

Postavi tri pitanja po redu i dizajn se obično sam izabere. Ima li udaljena mreža statičku rutu koja pokazuje na adresu tunela za 192.168.88.0/24, ili njen administrator kontroliše usmerivače na tom putu? Ako da, pusti LAN adrese da putuju nepromenjene i potpuno preskoči prevođenje. Treba li ti vidljivost po klijentu na suprotnoj strani, bilo za pravila pristupa bilo za revizijski trag? Ako da, čuvanje izvora vredi truda oko usmeravanja. Je li adresa tunela dovoljno stabilna da se upiše u udaljenu rutu, ili se menja između ponovnih povezivanja?

Ako je bilo koji odgovor ne ili nepoznat, nat-to je pragmatična opcija, a ujedno i povratna. Pravilo prevođenja uklanja se jednim redom kad udaljena strana doda ispravnu rutu. Povratna ruta koja nikad nije ugrađena stoji te jedne niti podrške svaki put kad neko pita zašto tunel radi samo u jednom smeru.

Smeštanje ulomka tako da ga pf doista vrednuje

Ulomak u nastavku pretpostavlja da je LAN 192.168.88.0/24, udaljena mreža 172.20.0.0/16, a interfejs tunela tun0. Ništa u njemu ne bira sledeći skok. On samo prepisuje izvor na paketima koji već izlaze kroz tunel.

match out on tun0 inet from 192.168.88.0/24 to 172.20.0.0/16 nat-to (tun0)
pass in on em0 inet from 192.168.88.0/24 to any keep state

Dva detalja u tom prvom redu nose najveći teret. Zagrade oko tun0 govore pf-u da pročita adresu interfejsa svaki put kad gradi zapis stanja, što je važno kad se tunel ponovo numeriše nakon ponovnog povezivanja. Reč match znači da pravilo prepisuje i zatim propada dalje, pa zasebno pass pravilo još mora da propusti tok. Interfejs naveden u match redu takođe mora biti onaj koji bira tabela usmeravanja, inače pf vrednuje pravilo na drugom izlaznom putu od onoga kojim paket stvarno ide.

Ne zaboravi stranu jezgra. IPv4 prosleđivanje mora biti omogućeno, a stateful pass pravila za tunel i LAN moraju postojati pre nego što išta od ovoga ima smisla. Odeljak PF NAT u OpenBSD FAQ-u pravi je izvor za redosled ključnih reči ovde.

Proveri skup pravila pre nego što poveruješ saobraćaju

Najpre proveri sintaksu sa pfctl -nf /etc/pf.conf, koji analizira datoteku bez njenog učitavanja. Zatim učitaj pravila i pročitaj šta jezgro stvarno drži, jer pravilo koje je čisto analizirano može ipak biti zasenjeno ili pridruženo pogrešnom interfejsu. pfctl -sn ispisuje pravila prevođenja u njihovom učitanom obliku, a pfctl -sr ispisuje pravila filtriranja po redosledu vrednovanja.

Zatim posmatraj žicu. Na pristupniku tcpdump -ni tun0 'host 172.20.0.10' pokazuje da li je izvorna adresa koja izlazi iz tunela adresa tunela ili LAN računara. Brzi netstat -rn -f inet potvrđuje na koji se interfejs odredište razrešava. Kad saobraćaj poteče, pfctl -ss ispisuje zapise stanja; ako tok nije stvorio stanje, paket nikad nije pogodio pravilo koje ga stvara.

Ako strana tunela izgleda ispravno, a odgovori još ne dolaze, prestani da uređuješ pf. Preostali kvar je na udaljenom usmerivaču, gde se odgovor šalje prema privatnoj adresi koju ta strana ne može dosegnuti.

Kad prevođenje košta više nego što štedi

Prevođenje skriva klijente, a ponekad je to upravo pogrešna razmena. Preklapajuće podmreže jedan su slučaj: ako udaljena strana interno takođe koristi 192.168.88.0/24, predstavljanje LAN računara kao pristupnika pogoršava sudar umesto da ga poboljša. IPsec pravila koja biraju saobraćaj po paru adresa drugi su slučaj, jer se baza sigurnosnih pravila upoređuje pre prevođenja i nikad ne vidi tvoj prepisani paket. Svako postavljanje koje naplaćuje, ograničava ili revidira po korisniku takođe gubi identitet koji mu treba u trenutku kad se izvor svede na jednu adresu.

Prenosivi pf derivati zasebna su zamka. Proizvodi koji sami generiraju datoteke pravila očekuju da se NAT konfiguriše kroz njihov interfejs, a ručno uređeni ulomci bivaju prepisani pri sledećem učitavanju. Skupovi pravila prepisani iz vodiča napisanih pre nego što je ključna reč match postojala neće se učitati na trenutnom jezgru, pa prenesi sintaksu i pročitaj grešku umesto da nagađaš.

Pravilo odlučivanja koje preživi susret sa pravim mrežama kratko je: ugradi povratnu rutu kad možeš, prevedi kad ne možeš, i zapiši koji od tri uslova te je naveo na taj izbor. Ta beleška štedi sledećoj osobi celo poslepodne.

Povezani članci