eth0:0 je oznaka, ne naprava: popravite ujemanje SNAT
Števec na ničli pomeni, da pravilo navaja vmesnik, ki ne more obstajati. Preberite resnično napravo, popravite ujemanje -o in nato zavestno izberite prevedeni naslov.
Pravilo NAT, ki naj bi enemu naboru odjemalcev VPN dalo njegov javni naslov, stoji na nič paketov, medtem ko isti nabor še vedno odhaja z napačnim virom. Pravilo se običajno ne moti glede naslova; moti se glede vmesnika. -o eth0:0 kaže na napravo, ki ne obstaja, ker eth0:0 je oznaka, pritrjena na naslov na eth0. Gledanje števcev je najhitrejši način, da to potrdite, in popravek je manjši, kot nakazuje preiskava.
Preverite, kako jedro imenuje napravo
Preden karkoli spremenite, preberite oba pogleda ločeno:
ip link show
ip address show dev eth0
ip route get 203.0.113.20
Seznam povezav prikazuje vmesnike. Seznam naslovov lahko prikaže drugi naslov IPv4, ki nosi oznako eth0:0, in naprava za ta naslov je še vedno eth0. Priročnik za naslove iproute2 obravnava oznako kot ime naslova, ne kot drugo povezavo, in prav na tem razlikovanju stoji celoten problem.
Zgodovina pojasnjuje zmedo. Stara ifconfig eth0:0 sintaksa je res izgledala kot nov vmesnik, in skripte iz tistega časa se še vedno sklicujejo nanjo. V današnjem sistemu je alias oznaka na naslovu in nič na poti usmerjanja ali netfilterja je ne obravnava kot ločeno izhodno točko.
Preverite, na kaj je pravilo dejansko ujemalo
Števce berite skupaj s seznamom pravil, ne po spominu:
iptables -t nat -L POSTROUTING -v -n --line-numbers
Pravilo, katerega števec paketov ostane na ničli, medtem ko teče ustrezen promet, se ne vrednoti, in pogoj izhodnega vmesnika, ki navaja eth0:0 je pogost vzrok. Izhodna naprava, ki jo je izbrala pot, je eth0, zato pogoj, ki išče drugo ime, nikoli ne postane resničen, ne glede na to, kateri izvorni naslov je izbralo jedro.
Spremenite pogoj v resnično napravo in oznako pustite zunaj njega. Če morate razlikovati dva nabora odjemalcev, ki si delita to napravo, ju razlikujte po izvorni predponi, ne po imenu vmesnika, ki ne more obstajati. Dve pravili z neprekrivajočimi se -s ujemanji sta berljivi in preverljivi; eno pravilo z izmišljeno napravo ni ne eno ne drugo. Vsakemu pravilu dodajte komentar, ki poimenuje nabor, ker čez pol leta sama predpona nikomur ne bo povedala, zakaj je tam.
Preverite pot, ki je izbrala napravo
NAT postrouting se izvede po tem, ko je pot že izbrala izhodni vmesnik, zato mora biti vmesnik v pravilu tisti, ki ga je izbrala pot. Jedro vprašajte neposredno z ip route get za reprezentativni naslov odjemalca in preberite tako napravo kot vir, ki ga poroča.
Če odgovor navaja eth0, je del pravila, ki se nanaša na vmesnik, razrešen. Če navaja tunelsko napravo, paket nikoli ne doseže pravila, ki ga urejate, in iskanje se premakne na usmerjevalno tabelo in njene prioritete. Pravilo, ki se nikoli ne ujema, ker je paket odšel drugam, je v izpisu števcev videti enako kot pravilo z napačno napisano napravo. Preden karkoli uredite, potrdite, kateri od obeh primerov imate, ker drugi zahteva spremembo usmerjanja in ne besedila.
Zavestno izberite prevedeni vir
Ko je naprava pravilna, je izvorni naslov ločena odločitev. To je samo ponazoritveni nabor IPv4 in primer naslova:
iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 \
-j SNAT --to-source 203.0.113.20
Zapis naslova v --to-source ne povzroči, da bi ga kdo usmerjal nazaj k vam. Ponudnik nadrejenega omrežja ali lastnik naslova mora dostavljati odgovore za ta naslov na tega gostitelja, in naslov mora biti tak, ki ga smete uporabljati. Če ni, se bo pravilo ujemalo in prevedlo, odgovori pa bodo šli vseeno drugam.
Sprememba izvornega naslova ni isto kot sprememba nadrejene povezave. Ko je resnična zahteva druga fizična pot, mora usmerjevalna politika najprej izbrati to pot; SNAT nato prepiše vir na napravi, ki jo je izbrala politika. Več oznak na eth0 ne daje ne poti ne dovoljenja.
Preverite s povezavo, ki ste jo pravkar odprli
Odprite novo odjemalsko povezavo, namesto da bi znova uporabili obstoječo. Sledenje povezavam ohrani prevod, ki ga je zabeležilo ob začetku toka, zato lahko stara seja še naprej uporablja prejšnji izvorni naslov in naredi pravilno novo pravilo videti pokvarjeno. Opazujte, kako števec narašča, nato poglejte prevedeni vir na žici ali na oddaljenem koncu.
Ko si več naborov deli en vmesnik, vsakemu dajte izrecno ujemanje vira in svoj prevodni naslov, hranite jih v upravljani konfiguraciji požarnega zidu in zabeležite vrstni red, v katerem se vrednotijo. Nato zapišite, kaj ste preverili: napravo iz ip route get, števec, ki se je premaknil, in vir, ki ga je videla oddaljena stran. Ta zapis odgovori na naslednje poročilo brez ponavljanja zmede z aliasom.