Nič v sockete si nepamätá, ktoré rozhranie prenieslo požiadavku, takže predvolená trasa VPN s plným tunelom môže zachytiť odpoveď, ktorá patrí do WAN. Služba neignoruje prichádzajúce rozhranie; Linux smeruje lokálne vytvorenú odpoveď podľa cieľa a zásady zdroja. Pravidlo založené na zdroji môže namiesto toho posielať iba odpovede služby cez úplnú tabuľku WAN a nechať bežný výstup v tuneli. Port zostáva otvorený, kým odpoveď odchádza nesprávnou cestou, a preto sa príznak javí jednostranne.

Mylná predstava: odpovede nasledujú rozhranie, na ktorom prišli

Zdá sa logické, že paket, ktorý príde na eth0, má odísť na eth0. Bezstavové paketové filtre sa dajú tak napísať a tcpdump na vstupnej strane ukazuje požiadavku presne tam, kde sa očakáva. Smerovanie tak nefunguje pre prevádzku, ktorú vytvára samotný hostiteľ.

Keď služba prijme spojenie, jej odpoveď je nový lokálne vytvorený paket. Jádro skontroluje pravidlá smerovania pre cieľ a zdroj odpovede a predvolená trasa VPN je úplne platná odpoveď. Nič v sockete si nepamätá, ktoré rozhranie prenieslo požiadavku.

Preto sa príznak javí jednostranne: požiadavky prichádzajú, odpovede miznú. Preto ani pridanie pravidla firewallu pre vstupný port nič nezmení. Paket nie je blokovaný na ceste dnu; je smerovaný inam na ceste von. Sledujte odpoveď vyhľadaním kvalifikovaným zdrojom a obchádzka sa stane viditeľnou.

Čo jadro skutočne smeruje: zdrojovú adresu

Úchyt, ktorý potrebujete, je lokálna adresa, ktorú služba používa pre odpovede. Na hostiteľovi s ilustračnou adresou eth0 192.0.2.10/24 a bránou 192.0.2.1 je táto adresa prítomná na rozhraní. Na cloudovom VM môže byť verejná adresa preložená vyššie a v hosťovi chýbať, preto použite adresu, ktorú hostiteľ skutočne má.

Pred rezervovaním čísla tabuľky alebo priority pravidla skontrolujte aktuálny stav. Existujúce pravidlá zásad môžu nové zatieniť a stará tabuľka s rovnakým číslom už môže niesť nesúvisiace trasy:

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

Potom vyberte tabuľku podľa zdroja. Pravidlo zodpovedá odpovediam, ktoré už nesú 192.0.2.10, teda presne lokálne ukončenej prevádzke, ktorú chcete vyňať. Preposielaná prevádzka a pakety z iných lokálnych adries nezodpovedajú.

Postavte úplnú návratovú tabuľku, nie polovicu predvolenej trasy

Tabuľka len s predvolenou trasou nestačí. Jádro musí stále vyriešiť bránu a toto riešenie potrebuje pripojený prefix v tej istej tabuľke. Tabuľka, ktorej tento prefix chýba, zlyhá pri riešení brány, aj keď jej predvolená trasa vyzerá správne. Pridajte oboje a potom nasmerujte pravidlo zdroja na tabuľku:

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

Použite skutočný prefix a bránu namiesto kopírovania príkladu. Cloudové rozhranie nakonfigurované ako /32 s on-link bránou potrebuje inú pripojenú trasu a tabuľka postavená z nesprávneho prefixu zlyhá na prvom skoku. Atribút src uvádza preferovaný zdroj pre tú trasu; nenahrádza pravidlo zdroja.

Aj poradie je dôležité. Široké pravidlo s nižším číslom priority sa vyhodnocuje prvé, preto sa k pravidlu zdroja musí dostať skôr než k akémukoľvek pravidlu, ktoré by túto prevádzku poslalo späť do hlavnej tabuľky. Skontrolujte priority pomocou ip rule show po pridaní, nie iba pri štarte.

Overte vyhľadaním kvalifikovaným zdrojom

Požiadajte jadro, aby smerovalo testovací cieľ z adresy služby. Odpoveď by mala uviesť eth0 a bránu WAN, nie tunel:

ip -4 route get 198.51.100.25 from 192.0.2.10

Potom vytvorte nové autorizované spojenie a pozorujte oba smery. Vyhľadanie, ktoré vyberie správnu tabuľku, kým živé spojenie stále zlyháva, ukazuje na filtrovanie spätnej cesty alebo pravidlo firewallu, nie na tabuľku. Skontrolujte tieto kontroly predtým, než niečo globálne vypnete.

Umiestnite konečné trasy a pravidlo pod správcu siete, ktorému rozhranie patrí. Zmeny adresy, obnovenie DHCP a opätovné pripojenia VPN prepisujú stav jadra a pravidlo pridané ručne zmizne alebo ukazuje na zastaranú bránu po ďalšej udalosti.

Kde sa táto výnimka končí

Pravidlo vyňa lokálne ukončenú prevádzku z jednej zdrojovej adresy. Nepokrýva porty publikované Dockerom, DNAT ani služby preposielané cez hostiteľa, pretože tieto pakety sa smerujú ako preposielaná prevádzka a nikdy nenesú lokálny zdroj hostiteľa rovnakým spôsobom. Takéto návrhy zvyčajne potrebujú značku nastavenú na vstupe a pravidlo, ktoré značke zodpovedá.

Nespôsobí ani, že sa verejná adresa hostiteľa objaví na rozhraní. Keď túto adresu vlastní nadradený NAT, odpoveď stále musí odísť cestou, ktorú tento NAT očakáva, a preto musí tabuľka WAN zrkadliť pôvodnú bránu a prefix, nie odhadovaný verejný rozsah.

Udržiavajte výnimku zdokumentovanú s číslom tabuľky, prioritou pravidla a presnou zdrojovou adresou. Ďalšia zmena vo VPN alebo rozhraní ju môže ticho pokaziť a poznámka, ktorá vymenúva tri hodnoty, sa kontroluje rýchlejšie než opätovné objavenie príznaku zo správy zákazníka.

Ak služba stále odpovedá nesprávnou cestou po úspešnom vyhľadaní kvalifikovanom zdrojom, porovnajte zdrojovú adresu živého socketu s tou v pravidle. Služba viazaná na zástupnú adresu môže zvoliť iný zdroj než testovaná adresa, a tento nesúlad je zostávajúca medzera.

Súvisiace články