Dva klijentska pula, jedan gateway i plan izgleda trivijalno: jedno pravilo šalje prvi pul kroz brzi uplink, drugo šalje drugi pul kroz partnerski tunel. Zatim su pravila na mjestu, a drugi pul i dalje izlazi preko zadane rute. Pravilo nije pokvareno. Izvor paketa nije ono što je autor očekivao u trenutku pretrage, jer se prevođenje i pretraga odvijaju na različitim točkama putovanja istog paketa, a redoslijed je suprotan mentalnoj shemi koju većina ljudi crta.

Pretraga se događa prije nego što se izvor prepiše

Za paket koji se prosljeđuje od VPN klijenta, kernel izvodi fiksan slijed. Dolazi na tunelsko sučelje, prolazi kroz prerouting gdje žive conntrack i DNAT, zatim se donosi odluka o usmjeravanju, zatim prosljeđivanje, zatim postrouting gdje se SNAT primjenjuje posljednji. Pravilo oblika from promatra se tijekom te odluke o usmjeravanju, što znači da vidi izvornu adresu klijenta, a ne prevedenu.

Dodavanje masquerade pravila dakle ne mijenja to koja politika odgovara odlaznom toku. Mijenja ono što vidi udaljeni kraj, a time i koja povratna putanja postoji. To su dvije različite posljedice i pregledi promjena ih stalno miješaju. Razdvojite ih i dizajn obično postane jasan unutar minute.

Prevedena adresa pojavljuje se u pravilima u smjeru odgovora. Paket koji se vraća na gateway adresiran je na prevedenu adresu, i ako imate pravila politike vezana uz odredište ili uz sučelje s kojeg je došao, to je vrijednost koju ćete uspoređivati. Ista veza, različit izvor istine u svakom smjeru.

StageSource the kernel seesWhat it means for your rule
PreroutingClient address, 172.31.7.42Where marks and DNAT are applied
Routing decisionStill 172.31.7.42This is where from rules match
PostroutingBecomes 198.51.100.9What the far end and its return route see

Dva pula s različitim izvorima doista trebaju različite tablice i dizajn je ispravan. Ono što gornja tablica isključuje jest prečac da se pogrješka traži gledanjem onoga što je primilo udaljeno odredište i izvlačenjem pravila iz toga.

Test s gatewaya nije test pula

Promet koji gateway sam stvara nikada ne prolazi kroz prerouting jer nije stigao na sučelje. Usmjerava se u izlaznoj putanji, s adresom samog gatewaya kao izvorom, a pravilo from vezano uz raspon klijenata neće se poklopiti. Svaki tiket u ovom području koji kaže da radi s kutije ali ne s klijenta samo je prepričavanje te činjenice.

Simulirajte klijenta umjesto da ga aproksimirate. Odluku o usmjeravanju može se pitati izravno, uz zadani izvor i ulazno sučelje:

ip route get 198.51.100.9 from 172.31.7.42 iif tun0
ip route get 198.51.100.9 from 172.31.8.42 iif tun0
ip route show table 201

Pokrenite to jednom po pulu. Ako dvije naredbe vrate isto sučelje, pravila ne razdvajaju pulove, a razlog je ili pravilo koje nedostaje ili pravilo višeg prioriteta koje odgovara objema. Ako vrate različita sučelja, ali klijent i dalje ne radi, kvar je nizvodno od pretrage i možete prestati gledati pravila.

Prioritet, a ne položaj u datoteci

Pravila se ocjenjuju uzlaznim redoslijedom prioriteta, a broj je ono što je važno, ne redoslijed kojim ste ih upisali. Tablica local stoji na prioritetu 0, tablica main na 32766, a zadano pravilo na 32767, zato pravilo dodano sa zadanim prioritetom pada blizu kraja popisa i gubi od gotovo svega.

ip rule show
ip rule add from 172.31.8.0/24 lookup 201 priority 1000
ip -4 route show table 201

Izričit prioritet čini namjeravani redoslijed vidljivim u datoteci i pri pregledu. Također sprječava da kasniji dodatak tiho preskoči postojeće pravilo, što je najčešći uzrok politike koja radi pa prestane raditi nakon nepovezane promjene.

Podudarno pravilo koje pokazuje na nepotpunu tablicu druga je zamka. Ako tablica 201 sadrži zadanu rutu ali ne i rutu do odredišta, paket se odbacuje ili šalje na pogrešno mjesto, a pravilo izgleda posve ispravno izolirano. Čitajte tablicu, ne samo pravilo. Pravilo je pokazivač, a prazna tablica je pokazivač u ništa.

Povratna putanja ipak mora postojati

Politika izvora bira izlaz. Ona ne stvara povratnu putanju. Ako drugi pul izlazi kroz partnerski tunel, partner mora znati kako doći do 172.31.8.0/24, bilo rutom natrag prema gatewayu, bilo primanjem prevedenih adresa koje već poznaje.

Odabir između toga je dizajnerska odluka s vidljivim posljedicama. Usmjeravanje raspona klijenata natrag čuva identitet svakog klijenta kod partnera i zahtijeva da prihvati vaš prefiks. Prevođenje skriva pul iza jedne adrese i zahtijeva da partner prihvati samo tu adresu, po cijeni da se vaši i njihovi zapisi više ne slažu o tome tko se povezao.

Što god odaberete, zapišite to uz definiciju pula. Povratna ruta koja postoji samo u nečijem sjećanju upravo je ona vrsta stvari koja preživi dok partner ne promijeni vatrozid, a zatim oduzme dan za rekonstrukciju.

Ne hvatajte vlastiti tunel gatewaya u politici

Pravila koja pišete za klijente primjenjuju se i na promet koji gateway stvara, osim ako ga izuzmete. Široko pravilo vezano uz oznaku ili uz izlazno sučelje može uhvatiti vlastitu vezu gatewaya s partnerom, i tada tunel koji nosi politiku biva usmjeren politikom. To stvara petlju ili prekid koji izgleda kao kvar davatelja usluge.

Ograničite svako pravilo što je moguće usklađenije: prefiks izvora, ulazno sučelje i, gdje je podržano, oznaka koju nose samo klijentski paketi. Zatim testirajte vlastitu povezanost gatewaya nakon svake promjene pravila, jer je kvar samoreferentan i ne pojavljuje se u testu s klijenta.

Stranica priručnika za ip-rule dokumentira semantiku selektora i prioriteta. Kombinirajte je s testom pretrage po pulu i dizajn postaje provjerljiv, što je razlika između političkog usmjeravanja koje preživi godinu i onoga što se svi boje dirati.

Povezani članci