eth0:0 estas etikedo, ne aparato: riparu la kongruon de SNAT
Nula nombrilo signifas, ke la regulo nomas interfacon, kiu ne povas ekzisti. Legu la realan aparaton, riparu la kongruon -o kaj poste elektu la tradukatan adreson konscie.
NAT-regulo, kiu devus doni al unu klienta VPN-grupo sian propran publikan adreson, staras je nulo da pakaĵoj, dum la sama grupo daŭre eliras sub la malĝusta fonto. La regulo kutime ne eraras pri la adreso; ĝi eraras pri la interfaco. -o eth0:0 montras al aparato, kiu ne ekzistas, ĉar eth0:0 estas etikedo ligita al adreso sur eth0. Rigardi la nombrilojn estas la plej rapida maniero konfirmi tion, kaj la riparo estas pli malgranda ol la esploro sugestas.
Kontrolu, kiel la kerno nomas la aparaton
Legu la du vidojn aparte antaŭ ol ŝanĝi ion ajn:
ip link show
ip address show dev eth0
ip route get 203.0.113.20
La ligila listo montras interfacojn. La adresa listo povas montri duan IPv4-adreson portantan la etikedon eth0:0, kaj la aparato por tiu adreso ankoraŭ estas eth0. La adresa manlibro de iproute2 traktas la etikedon kiel nomon de la adreso, ne kiel duan ligilon, kaj ĝuste tiu distingo estas la kerno de la tuta problemo.
La historio klarigas la konfuzon. La malnova ifconfig eth0:0 sintakso vere aspektis kiel nova interfaco, kaj skriptoj el tiu epoko ankoraŭ rilatas al unu. Sur nuntempa sistemo la alinomo estas etikedo sur adreso, kaj nenio en la enkursiga aŭ netfiltra vojo traktas ĝin kiel apartan elirejon.
Kontrolu, kion la regulo efektive kongruigis
Legu la nombrilojn kune kun la regula listo anstataŭ el memoro:
iptables -t nat -L POSTROUTING -v -n --line-numbers
Regulo, kies pakaĵa nombrilo restas je nulo dum kongrua trafiko fluas, ne estas taksata, kaj elira-interfaca kondiĉo nomanta eth0:0 estas ofta kaŭzo. La elira aparato elektita de la enkursigo estas eth0, do kondiĉo serĉanta alian nomon neniam fariĝas vera, sendepende de tio, kiun fontadreson la kerno elektis.
Ŝanĝu la kondiĉon al la reala aparato kaj lasu la etikedon ekstere. Se vi bezonas distingi du klientajn grupojn, kiuj dividas tiun aparaton, distingi ilin laŭ fonta prefikso, ne laŭ interfaca nomo, kiu ne povas ekzisti. Du reguloj kun neinterkovrantaj -s -kongruoj estas legeblaj kaj testeblaj; unu regulo kun fikcia aparato estas nek unu nek la alia. Donu al ĉiu regulo komenton, kiu nomas la grupon, ĉar post duonjaro la prefikso sola ne diros al iu, kial ĝi staras tie.
Kontrolu la enkursigon, kiu elektis la aparaton
Postrouting-NAT funkcias post kiam la enkursigo jam elektis eliran interfacon, do la interfaco en la regulo devas esti tiu, kiun la enkursigo elektis. Demandu la kernon rekte per ip route get por reprezenta klienta adreso kaj legu kaj la aparaton kaj la fonton, kiun ĝi raportas.
Se la respondo nomas eth0, la interfaca parto de la regulo estas solvita. Se ĝi nomas tunelan aparaton, la pakaĵo neniam atingas la regulon, kiun vi redaktas, kaj la serĉo moviĝas al la enkursiga tabelo kaj ĝiaj prioritatoj. Regulo, kiu neniam kongruas ĉar la pakaĵo eliris aliloken, aspektas en la nombrila eligo same kiel regulo kun misliterumita aparato. Konfirmu, kiun el la du vi havas, antaŭ ol vi redaktos ion, ĉar la dua bezonas enkursigan ŝanĝon anstataŭ tekstan ŝanĝon.
Elektu la tradukatan fonton konscie
Post kiam la aparato estas ĝusta, la fontadreso estas aparta decido. Ĉi tio estas nur ilustra IPv4-grupo kaj ekzempla adreso:
iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 \
-j SNAT --to-source 203.0.113.20
Skribi adreson en --to-source ne igas iun enkursigi ĝin reen al vi. La provizanto supre aŭ la adresa posedanto devas liveri respondojn por tiu adreso al ĉi tiu gastiganto, kaj la adreso devas esti unu, kiun vi rajtas uzi. Se ĝi ne estas, la regulo kongruos kaj tradukos, kaj la respondoj ankoraŭ iros aliloken.
Ŝanĝi la fontadreson ne samas kiel ŝanĝi la supran ligilon. Kiam la vera postulo estas alia fizika vojo, la enkursiga politiko devas unue elekti tiun vojon; SNAT tiam reskribas la fonton sur kiu ajn aparato, kiun la politiko elektis. Aldoni pliajn etikedojn al eth0 liveras nek la vojon nek la rajtigon.
Kontrolu per konekto, kiun vi ĵus malfermis
Malfermu novan klientan konekton anstataŭ reuzi ekzistantan. Konekta spurado konservas la tradukon, kiun ĝi registris kiam la fluo komenciĝis, do malnova sesio povas daŭre uzi la antaŭan fontadreson kaj igi ĝustan novan regulon aspekti difektita. Observu la nombrilon pliiĝi, poste observu la tradukatan fonton sur la drato aŭ ĉe la malproksima fino.
Por pluraj grupoj, kiuj dividas unu interfacon, donu al ĉiu eksplicitan fontan kongruon kaj sian propran tradukan adreson, tenu ilin en la administrata agordo de la fajroŝirmilo kaj notu la ordon, en kiu ili estas taksataj. Poste registru, kion vi kontrolis: la aparaton el ip route get, la nombrilon, kiu moviĝis, kaj la fonton, kiun vidis la malproksima flanko. Tiu registro respondas al la sekva raporto sen ripeti la alinoman konfuzon.