eth0:0 on silt, mitte seade: paranda SNAT-i vastavus
Null-loendur tähendab, et reegel nimetab liidest, mida ei saa olemas olla. Loe tegelik seade, paranda -o vastavus ja vali siis tõlgitud aadress teadlikult.
NAT-reegel, mis pidi andma ühele VPN-kliendi poolile oma avaliku aadressi, seisab nulli paketi juures, samal ajal kui sama pool lahkub ikka vale lähteaadressiga. Reegel ei eksi tavaliselt aadressi, vaid liidese osas. -o eth0:0 viitab seadmele, mida olemas ei ole, sest eth0:0 on silt, mis on kinnitatud aadressile eth0. Loendurite vaatamine on kiireim viis seda kinnitada ja parandus on väiksem, kui uurimine vihjab.
Kontrolli, kuidas kernel seadet nimetab
Loe kahte vaadet eraldi enne, kui midagi muudad:
ip link show
ip address show dev eth0
ip route get 203.0.113.20
Lingi loend näitab liideseid. Aadressi loend võib näidata teist IPv4-aadressi, mis kannab silti eth0:0, ja selle aadressi seade on endiselt eth0. iproute2 aadressijuhend käsitleb silti aadressi nimena, mitte teise lingina, ja just see erinevus on kogu probleemi tuum.
Ajalugu seletab segadust. Vana ifconfig eth0:0 süntaks nägi tõesti välja nagu uus liides, ja selle ajastu skriptid viitavad endiselt ühele. Praeguses süsteemis on alias silt aadressi peal ja miski marsruutimise ega netfilteri teel ei käsitle seda eraldi väljundpunktina.
Kontrolli, millega reegel tegelikult vastas
Loe loendureid koos reeglite loendiga, mitte mälu järgi:
iptables -t nat -L POSTROUTING -v -n --line-numbers
Reegel, mille paketiloendur jääb nulli, kui sobiv liiklus voolab, ei ole hindamisel, ja väljundliidese tingimus, mis nimetab eth0:0 on tavaline põhjus. Marsruudi valitud väljundseade on eth0, seega tingimus, mis otsib teist nime, ei saa kunagi tõeseks, ükskõik millise lähteaadressi kernel valis.
Muuda tingimus tegeliku seadme peale ja jäta silt sellest välja. Kui pead eristama kahte kliendipooli, mis seda seadet jagavad, erista neid lähteprefiksi, mitte liidese nime järgi, mida olemas olla ei saa. Kaks reeglit, mille -s vasted ei kattu, on loetavad ja testitavad; üks reegel väljamõeldud seadmega ei ole kumbki. Anna igale reeglile kommentaar, mis nimetab pooli, sest poole aasta pärast ei ütle prefiks üksi kellelegi, miks see seal on.
Kontrolli marsruuti, mis seadme valis
Postrouting-NAT töötab pärast seda, kui marsruut on juba väljundliidese valinud, seega peab reegli liides olema see, mille marsruut valis. Küsi kerneli käest otse käsuga ip route get esindusliku kliendi aadressi kohta ja loe nii seade kui ka lähe, mida see teatab.
Kui vastus nimetab eth0, on reegli liideseosa selge. Kui see nimetab tunneliseadet, ei jõua pakett kunagi reeglini, mida muudad, ja otsing liigub marsruutimistabeli ja selle prioriteetide juurde. Reegel, mis ei sobi kunagi, sest pakett lahkus mujalt, näeb loenduri väljundis samasugune välja nagu reegel valesti kirjutatud seadmega. Kinnita, kumb kahest sul on, enne kui midagi muudad, sest teine vajab marsruutimise, mitte teksti muutmist.
Vali tõlgitud lähteaadress teadlikult
Kui seade on õige, on lähteaadress eraldi otsus. See on ainult näitlik IPv4-pool ja näidisaadress:
iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 \
-j SNAT --to-source 203.0.113.20
Aadressi kirjutamine reeglisse --to-source ei pane kedagi seda sulle tagasi marsruutima. Ülemvõrgu pakkuja või aadressi omanik peab selle aadressi vastused sellele hostile toimetama ja aadress peab olema selline, mida tohid kasutada. Kui ei ole, reegel vastab ja tõlgib ning vastused lähevad ikkagi mujale.
Lähteaadressi muutmine ei ole sama, mis ühendusliini muutmine. Kui tegelik nõue on teine füüsiline tee, peab marsruutimispoliitika selle tee kõigepealt valima; SNAT kirjutab seejärel lähte ümber sellel seadmel, mille poliitika valis. Rohkem silte seadmele eth0 ei anna ei marsruuti ega luba.
Kontrolli äsja avatud ühendusega
Ava uus kliendiühendus, mitte ära kasuta olemasolevat uuesti. Ühenduse jälgimine hoiab tõlke, mille see voolu alguses kirjutas, seega vana sessioon võib jätkata eelmise lähteaadressi kasutamist ja panna korraliku uue reegli katkisena näima. Jälgi, kuidas loendur kasvab, ja vaata siis tõlgitud lähet juhtmel või kaugemas otsas.
Kui mitu pooli jagavad üht liidest, anna igaühele selge lähtevaste ja oma tõlkeaadress, hoia neid tulemüüri hallatavas konfiguratsioonis ja pane kirja, mis järjekorras neid hinnatakse. Seejärel kirjuta üles, mida kontrollisid: seade käsust ip route get, loendur, mis liikus, ja lähe, mida vastaspool nägi. See kirje vastab järgmisele raportile ilma aliase segadust kordamata.