Az eth0:0 címke, nem eszköz: javítsd a SNAT egyezést
A nulla számláló azt jelenti, hogy a szabály olyan interfészt nevez meg, amely nem létezhet. Olvasd ki a valódi eszközt, javítsd a -o egyezést, majd tudatosan válaszd ki a lefordított címet.
Egy NAT-szabály, amelynek egy VPN-ügyfélkészletnek saját nyilvános címet kellett volna adnia, nulla csomagnál áll, miközben ugyanaz a készlet továbbra is a rossz forrással lép ki. A szabály általában nem a címmel téved; az interfésszel téved. -o eth0:0 egy nem létező eszközre utal, mert eth0:0 egy címke, amely egy címen ül, és a hozzá tartozó eszköz eth0. A számlálók nézése a leggyorsabb módja ennek megerősítésére, és a javítás kisebb, mint amit a vizsgálat sugall.
Ellenőrizd, minek nevezi az eszközt a kernel
Olvasd el a két nézetet külön, mielőtt bármit változtatnál:
ip link show
ip address show dev eth0
ip route get 203.0.113.20
A hivatkozáslista interfészeket mutat. A címlista mutathat egy második IPv4-címet, amely a következő címkét viseli: eth0:0, és az ahhoz a címhez tartozó eszköz továbbra is eth0. Az iproute2 címszó szerinti kézikönyve a címkét a cím nevének tekinti, nem második hivatkozásnak, és pontosan ezen a megkülönböztetésen fordul meg az egész probléma.
A történelem magyarázza a zavart. A régi ifconfig eth0:0 szintaxis valóban új interfésznek tűnt, és a korszak szkriptjei még mindig egyre hivatkoznak. Egy mai rendszeren az alias egy címen lévő címke, és semmi az útválasztási vagy netfilter-útvonalon nem kezeli külön kimeneti pontként.
Ellenőrizd, mivel egyezett valójában a szabály
A számlálókat a szabálylistával együtt olvasd, ne emlékezetből:
iptables -t nat -L POSTROUTING -v -n --line-numbers
Egy szabály, amelynek csomagszámlálója nullán marad, miközben megfelelő forgalom halad, nem értékelődik ki, és a kimeneti interfész feltétele, amely eth0:0 nevez meg, gyakori ok. Az útvonal által választott kimeneti eszköz eth0, így a másik nevet kereső feltétel soha nem lesz igaz, függetlenül attól, melyik forráscímet választotta a kernel.
Változtasd a feltételt a valódi eszközre, és hagyd ki belőle a címkét. Ha két olyan ügyfélkészletet kell megkülönböztetned, amelyek ugyanazt az eszközt használják, forrás-előtag szerint különböztesd meg őket, ne olyan interfésznévvel, amely nem létezhet. Két szabály nem átfedő -s egyezéssel olvasható és tesztelhető; egy szabály kitalált eszközzel egyik sem. Minden szabályhoz adj megjegyzést, amely megnevezi a készletet, mert fél év múlva az előtag önmagában senkinek nem mondja meg, miért van ott.
Ellenőrizd az útvonalat, amely az eszközt választotta
A postrouting NAT azután fut, hogy az útvonal már kiválasztott egy kimeneti interfészt, tehát a szabályban szereplő interfésznek annak kell lennie, amelyet az útvonal választott. Kérdezd meg közvetlenül a kernelt a ip route get paranccsal egy reprezentatív ügyfélcímre, és olvasd ki az eszközt és a jelentett forrást is.
Ha a válasz eth0-t nevez meg, a szabály interfészrésze tisztázott. Ha alagúteszközt nevez meg, a csomag soha nem éri el a szerkesztett szabályt, és a keresés az útválasztási táblára és annak prioritásaira tevődik át. Egy szabály, amely soha nem egyezik, mert a csomag máshol lépett ki, ugyanúgy néz ki a számlálókimenetben, mint egy elírt eszközű szabály. Erősítsd meg, melyik eset áll fenn, mielőtt bármit szerkesztenél, mert a második útválasztási változtatást igényel, nem szövegváltoztatást.
Tudatosan válaszd ki a lefordított forrást
Ha az eszköz rendben van, a forráscím külön döntés. Ez csak egy szemléltető IPv4-készlet és egy példacím:
iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 \
-j SNAT --to-source 203.0.113.20
Ha címet írsz a --to-source közé, attól még senki nem fogja visszafelé irányítani hozzád. A felházi szolgáltatónak vagy a cím tulajdonosának kell az arra a címre érkező válaszokat erre a gazdagépre eljuttatnia, és a címnek olyannak kell lennie, amelyet jogosult vagy használni. Ha nem az, a szabály egyezni fog és fordít, a válaszok pedig továbbra is máshová mennek.
A forráscím módosítása nem ugyanaz, mint a felső kapcsolat módosítása. Amikor a valódi követelmény egy másik fizikai útvonal, az útválasztási szabályzatnak először azt az útvonalat kell kiválasztania; a SNAT ezután azon az eszközön írja át a forrást, amelyet a szabályzat választott. További címkék a eth0 eszközön sem az útvonalat, sem a jogosultságot nem adják meg.
Ellenőrizd egy épp most megnyitott kapcsolattal
Nyiss új ügyfélkapcsolatot ahelyett, hogy egy meglévőt használnál újra. A kapcsolatkövetés megtartja azt a fordítást, amelyet a folyam indulásakor rögzített, így egy régi munkamenet továbbra is a korábbi forráscímet használhatja, és egy helyes új szabályt hibásnak láttathat. Figyeld, ahogy a számláló nő, majd nézd meg a lefordított forrást a vezetéken vagy a távoli végén.
Ha több készlet osztozik egy interfészen, adj mindegyiknek kifejezett forrásegyezést és saját fordítási címet, tartsd őket a tűzfal kezelt konfigurációjában, és jegyezd fel az értékelés sorrendjét. Aztán jegyezd fel, mit ellenőriztél: az eszközt a ip route get parancsból, a számlálót, amely elmozdult, és a forrást, amelyet a távoli oldal látott. Ez a feljegyzés válaszol a következő jelentésre anélkül, hogy megismételné az alias körüli zavart.