Pravidlo NAT, ktoré malo dať jednému poolu klientov VPN vlastnú verejnú adresu, stojí na nule paketov, zatiaľ čo ten istý pool stále odchádza s nesprávnym zdrojom. Pravidlo sa zvyčajne nemýli v adrese; mýli sa v rozhraní. -o eth0:0 ukazuje na zariadenie, ktoré neexistuje, pretože eth0:0 je označenie priradené adrese na eth0. Pozeranie na počítadlá je najrýchlejší spôsob, ako to potvrdiť, a oprava je menšia, než naznačuje vyšetrovanie.

Skontrolujte, ako jadro nazýva zariadenie

Prečítajte oba pohľady oddelene, skôr než čokoľvek zmeníte:

ip link show
ip address show dev eth0
ip route get 203.0.113.20

Zoznam prepojení zobrazuje rozhrania. Zoznam adries môže zobraziť druhú adresu IPv4, ktorá nesie označenie eth0:0, a zariadením pre tú adresu je stále eth0. Príručka adries iproute2 považuje označenie za názov adresy, nie za druhé prepojenie, a práve na tomto rozdiele stojí celý problém.

História vysvetľuje zmätok. Stará ifconfig eth0:0 syntax naozaj vyzerala ako nové rozhranie a skripty z tej doby sa naň stále odvolávajú. V dnešnom systéme je alias označenie na adrese a nič na ceste smerovania ani netfilter s ním nezaobchádza ako so samostatným výstupným bodom.

Skontrolujte, na čo pravidlo skutočne pasovalo

Počítadlá čítajte spolu so zoznamom pravidiel, nie z pamäte:

iptables -t nat -L POSTROUTING -v -n --line-numbers

Pravidlo, ktorého počítadlo paketov zostáva na nule, kým prechádza zodpovedajúca premávka, sa nevyhodnocuje, a podmienka výstupného rozhrania, ktorá pomenúva eth0:0 je častá príčina. Výstupné zariadenie, ktoré vybrala trasa, je eth0, takže podmienka hľadajúca iný názov sa nikdy nestane pravdivou, bez ohľadu na to, ktorú zdrojovú adresu jadro vybralo.

Zmeňte podmienku na skutočné zariadenie a označenie nechajte mimo nej. Ak potrebujete rozlíšiť dva pooly klientov, ktoré zdieľajú to zariadenie, rozlíšte ich podľa zdrojového prefixu, nie podľa názvu rozhrania, ktoré nemôže existovať. Dve pravidlá s neprekrývajúcimi sa -s zhodami sú čitateľné a testovateľné; jedno pravidlo s vymysleným zariadením nie je ani jedno, ani druhé. Ku každému pravidlu pridajte komentár, ktorý pomenúva pool, pretože o pol roka samotný prefix nikomu nepovie, prečo tam je.

Skontrolujte trasu, ktorá vybrala zariadenie

NAT postrouting beží po tom, čo trasa už vybrala výstupné rozhranie, takže rozhranie v pravidle musí byť to, ktoré vybrala trasa. Spýtajte sa jadra priamo pomocou ip route get na reprezentatívnu adresu klienta a prečítajte aj zariadenie, aj hlásený zdroj.

Ak odpoveď pomenúva eth0, časť pravidla týkajúca sa rozhrania je vyriešená. Ak pomenúva tunelové zariadenie, paket sa nikdy nedostane k pravidlu, ktoré upravujete, a hľadanie sa presúva na smerovaciu tabuľku a jej priority. Pravidlo, ktoré nikdy nepasuje, pretože paket vyšiel inde, vyzerá vo výstupe počítadiel rovnako ako pravidlo s nesprávne napísaným zariadením. Predtým, než čokoľvek upravíte, potvrďte, ktorý z dvoch prípadov máte, pretože druhý si vyžaduje zmenu smerovania, nie textu.

Vedome vyberte prekladaný zdroj

Keď je zariadenie správne, zdrojová adresa je samostatné rozhodnutie. Toto je len ilustratívny pool IPv4 a príklad adresy:

iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 \
  -j SNAT --to-source 203.0.113.20

Zápis adresy do --to-source nespôsobí, že ju niekto bude smerovať späť k vám. Poskytovateľ nadradenej siete alebo vlastník adresy musí doručovať odpovede pre tú adresu na tohto hostiteľa, a adresa musí byť taká, ktorú smiete používať. Ak nie je, pravidlo bude pasovať a prekladať a odpovede aj tak pôjdu inde.

Zmena zdrojovej adresy nie je to isté ako zmena nadradeného spoja. Keď je skutočnou požiadavkou iná fyzická cesta, smerovacia politika musí najprv vybrať tú cestu; potom SNAT prepíše zdroj na zariadení, ktoré politika vybrala. Viac označení na eth0 nedáva ani trasu, ani oprávnenie.

Overte na spojení, ktoré ste práve otvorili

Otvorte nové klientske spojenie namiesto opätovného použitia existujúceho. Sledovanie spojení si ponecháva preklad zaznamenaný na začiatku toku, takže stará relácia môže ďalej používať predchádzajúcu zdrojovú adresu a spôsobiť, že správne nové pravidlo vyzerá pokazené. Sledujte, ako počítadlo rastie, a potom pozrite prekladaný zdroj na linke alebo na vzdialenom konci.

Keď viac poolov zdieľa jedno rozhranie, dajte každému výslovnú zhodu zdroja a vlastnú adresu prekladu, držte ich v spravovanej konfigurácii firewallu a poznamenajte poradie, v ktorom sa vyhodnocujú. Potom zapíšte, čo ste overili: zariadenie z ip route get, počítadlo, ktoré sa pohlo, a zdroj, ktorý videla vzdialená strana. Ten záznam odpovie na ďalšiu správu bez opakovania zmätku s aliasom.

Súvisiace články