Ništa u socketu ne pamti koji je interfejs prenio zahtjev, pa zadana ruta VPN-a s punim tunelom može uhvatiti odgovor koji pripada WAN-u. Usluga ne ignoriše dolazni interfejs; Linux usmjerava lokalno generisani odgovor prema odredištu i politici izvora. Pravilo zasnovano na izvoru može umjesto toga poslati samo odgovore usluge kroz potpunu WAN tablicu, ostavljajući običan izlaz na tunelu. Port ostaje otvoren dok odgovor izlazi pogrešnom putanjom, zbog čega simptom izgleda jednostrano.

Pogrešna predstava: odgovori slijede interfejs na kojem su stigli

Djeluje logično da paket koji stigne na eth0 treba i otići na eth0. Bezdržavni filteri paketa mogu se tako napisati, a tcpdump na ulaznoj strani pokazuje zahtjev tačno tamo gdje se očekuje. Usmjeravanje ne funkcioniše tako za saobraćaj koji sam host generiše.

Kada usluga prihvati vezu, njen odgovor je novi lokalno generisani paket. Kernel konsultuje pravila usmjeravanja za odredište i izvor odgovora, a zadana ruta VPN-a je sasvim valjan odgovor. Ništa u socketu ne pamti koji je interfejs prenio zahtjev.

Zato simptom izgleda jednostrano: zahtjevi dolaze, odgovori nestaju. Zato ni dodavanje firewall pravila za dolazni port ništa ne mijenja. Paket se ne blokira na putu unutra; on se usmjerava negdje drugdje na putu van. Pratite odgovor pretragom kvalifikovanom izvorom i skretanje postaje vidljivo.

Šta kernel zaista usmjerava: adresa izvora

Ručka koja vam treba je lokalna adresa koju usluga koristi za odgovore. Na hostu sa ilustrativnom eth0 adresom 192.0.2.10/24 i mrežnim prolazom 192.0.2.1, ta adresa postoji na interfejsu. Na cloud VM-u javna adresa može biti prevedena iznad i odsutna iz gosta, pa koristite adresu koju host zaista drži.

Pregledajte trenutno stanje prije rezervisanja broja tablice ili prioriteta pravila. Postojeća politička pravila mogu zasjeniti novo, a stara tablica s istim brojem može već nositi nepovezane rute:

ip -4 addr show dev eth0
ip -4 rule show
ip -4 route show table all

Zatim izaberite tablicu prema izvoru. Pravilo odgovara odgovorima koji već nose 192.0.2.10, tačno lokalno završenom saobraćaju koji želite izuzeti. Proslijeđeni saobraćaj i paketi s drugih lokalnih adresa ne odgovaraju.

Izgradite potpunu povratnu tablicu, a ne pola zadane rute

Tablica sa samo zadanom rutom nije dovoljna. Kernel još mora razriješiti mrežni prolaz, a to razrješenje zahtijeva povezani prefiks u istoj tablici. Tablica kojoj taj prefiks nedostaje pada pri razrješenju prolaza čak i kada njena zadana ruta izgleda ispravno. Dodajte oboje, pa usmjerite pravilo izvora na tablicu:

ip -4 route add table 100 192.0.2.0/24 dev eth0 src 192.0.2.10
ip -4 route add table 100 default via 192.0.2.1 dev eth0
ip -4 rule add priority 1000 from 192.0.2.10/32 lookup 100

Koristite stvarni prefiks i prolaz umjesto kopiranja primjera. Cloud interfejs konfigurisan kao /32 s prolazom na linku zahtijeva drugačiju povezanu rutu, a tablica izgrađena od pogrešnog prefiksa pada na prvom skoku. Atribut src navodi preferirani izvor za tu rutu; on ne zamjenjuje pravilo izvora.

Redoslijed je takođe važan. Široko pravilo s nižim brojem prioriteta ocjenjuje se prvo, pa se do pravila izvora mora doći prije bilo kojeg pravila koje bi vratilo ovaj saobraćaj u glavnu tablicu. Provjerite prioritete pomoću ip rule show nakon dodavanja, ne samo pri podizanju.

Provjerite pretragom kvalifikovanom izvorom

Zamolite kernel da usmjeri testno odredište s adrese usluge. Odgovor treba da navede eth0 i WAN prolaz, a ne tunel:

ip -4 route get 198.51.100.25 from 192.0.2.10

Zatim uspostavite novu autorizovanu vezu i posmatrajte oba smjera. Pretraga koja bira ispravnu tablicu dok živa veza još pada ukazuje na filtriranje obrnute putanje ili firewall pravilo, a ne na tablicu. Provjerite te kontrole prije nego bilo šta globalno isključite.

Stavite konačne rute i pravilo pod mrežnog menadžera koji posjeduje interfejs. Promjene adresa, obnavljanje DHCP-a i ponovna povezivanja VPN-a prepisuju stanje kernela, a pravilo dodano rukom nestaje ili pokazuje na zastarjeli prolaz nakon sljedećeg događaja.

Gdje se ovo izuzeće zaustavlja

Pravilo izuzima lokalno završen saobraćaj s jedne adrese izvora. Ono ne pokriva portove koje objavljuje Docker, DNAT ni usluge proslijeđene kroz host, jer se ti paketi usmjeravaju kao proslijeđeni saobraćaj i nikada ne nose lokalni izvor hosta na isti način. Takvi dizajni obično zahtijevaju oznaku postavljenu na ulazu i pravilo koje odgovara oznaci.

Ono takođe ne čini da se javna adresa hosta pojavi na interfejsu. Kada uzvodni NAT posjeduje tu adresu, odgovor ipak mora izaći putanjom koju taj NAT očekuje, zbog čega WAN tablica mora preslikati izvorni prolaz i prefiks, a ne pretpostavljeni javni opseg.

Držite izuzeće dokumentovano s brojem tablice, prioritetom pravila i tačnom adresom izvora. Sljedeća promjena VPN-a ili interfejsa može ga tiho pokvariti, a bilješka koja imenuje tri vrijednosti brže se provjerava od ponovnog otkrivanja simptoma iz izvještaja korisnika.

Ako usluga i dalje odgovara pogrešnom putanjom nakon što pretraga kvalifikovana izvorom prođe, uporedite adresu izvora žive utičnice s onom u pravilu. Usluga vezana za zamjensku adresu može izabrati drugačiji izvor od testirane adrese, a taj nesklad je preostali jaz.

Povezani članci