eth0:0 je oznaka, ne uređaj: ispravite SNAT podudaranje
Brojač na nuli znači da pravilo imenuje sučelje koje ne može postojati. Pročitajte stvarni uređaj, ispravite -o podudaranje i zatim svjesno odaberite prevedenu adresu.
NAT pravilo koje je trebalo dati jednom bazenu VPN klijenata njegovu vlastitu javnu adresu stoji na nula paketa, dok isti bazen i dalje izlazi pod pogrešnim izvorom. Pravilo obično nije pogrešno u adresi; pogrešno je u sučelju. -o eth0:0 upućuje na uređaj koji ne postoji, jer eth0:0 je oznaka pridružena adresi na eth0. Gledanje brojača najbrži je način da se to potvrdi, a ispravak je manji nego što istraga sugerira.
Provjerite kako jezgra naziva uređaj
Pročitajte dva prikaza odvojeno prije nego što bilo što promijenite:
ip link show
ip address show dev eth0
ip route get 203.0.113.20
Popis veza prikazuje sučelja. Popis adresa može prikazati drugu IPv4 adresu koja nosi oznaku eth0:0, a uređaj te adrese i dalje je eth0. Priručnik za adrese iproute2 tretira oznaku kao naziv adrese, ne kao drugu vezu, i upravo je ta razlika ono na čemu cijeli problem počiva.
Povijest objašnjava zbrku. Stara ifconfig eth0:0 sintaksa doista je izgledala kao novo sučelje, i skripte iz tog vremena još se na njega pozivaju. Na današnjem sustavu alias je oznaka na adresi i ništa na putu usmjeravanja ili netfiltera ne tretira je kao zasebno izlazište.
Provjerite što je pravilo stvarno pogodilo
Pročitajte brojače uz popis pravila, a ne po sjećanju:
iptables -t nat -L POSTROUTING -v -n --line-numbers
Pravilo čiji brojač paketa ostaje na nuli dok prolazi odgovarajući promet ne procjenjuje se, a uvjet izlaznog sučelja koji imenuje eth0:0 češt je uzrok. Izlazni uređaj koji je odabrala ruta je eth0, pa uvjet koji traži drugo ime nikada ne postaje istinit, bez obzira na to koju je izvornu adresu jezgra odabrala.
Promijenite uvjet na stvarni uređaj i ostavite oznaku izvan njega. Ako trebate razlikovati dva bazena klijenata koji dijele taj uređaj, razlikujte ih po izvornom prefiksu, a ne po nazivu sučelja koji ne može postojati. Dva pravila s nepreklapajućim -s podudaranjima čitljiva su i provjerljiva; jedno pravilo s izmišljenim uređajem nije ni jedno ni drugo. Svakom pravilu dajte komentar koji imenuje bazen, jer za šest mjeseci prefiks sam neće nikome reći zašto je ondje.
Provjerite rutu koja je odabrala uređaj
Postrouting NAT izvodi se nakon što je ruta već odabrala izlazno sučelje, pa sučelje u pravilu mora biti ono koje je ruta odabrala. Pitajte jezgru izravno s ip route get za reprezentativnu adresu klijenta i pročitajte i uređaj i izvor koji prijavi.
Ako odgovor imenuje eth0, dio pravila koji se odnosi na sučelje je riješen. Ako imenuje tunelski uređaj, paket nikada ne stiže do pravila koje uređujete i potraga se seli na tablicu usmjeravanja i njezine prioritete. Pravilo koje nikada ne odgovara jer je paket otišao drugamo izgleda u izlazu brojača isto kao pravilo s pogrešno napisanim uređajem. Potvrdite koji od dvaju slučajeva imate prije nego što išta uredite, jer drugi traži promjenu usmjeravanja, a ne promjenu teksta.
Svjesno odaberite prevedeni izvor
Kad je uređaj točan, izvorna adresa zasebna je odluka. Ovo je samo ilustrativni IPv4 bazen i primjer adrese:
iptables -t nat -A POSTROUTING -s 10.8.1.0/24 -o eth0 \
-j SNAT --to-source 203.0.113.20
Upisivanje adrese u --to-source ne čini to da je netko usmjeri natrag k vama. Davatelj uzvodne veze ili vlasnik adrese mora dostavljati odgovore za tu adresu na ovo računalo, a adresa mora biti ona koju smijete koristiti. Ako nije, pravilo će se podudariti i prevesti, a odgovori će ipak otići negdje drugdje.
Promjena izvorne adrese nije isto što i promjena uzlazne veze. Kad je stvarni zahtjev drugi fizički put, politika usmjeravanja mora prvo odabrati taj put; SNAT zatim prepisuje izvor na uređaju koji je politika odabrala. Dodavanje više oznaka na eth0 ne daje ni rutu ni ovlaštenje.
Provjerite vezom koju ste upravo otvorili
Otvorite novu vezu klijenta umjesto da ponovno koristite postojeću. Praćenje veza zadržava prijevod koji je zabilo na početku toka, pa stara sesija može nastaviti koristiti prethodnu izvornu adresu i učiniti ispravno novo pravilo pokvarenim. Gledajte kako brojač raste, zatim pogledajte prevedeni izvor na žici ili na udaljenom kraju.
Kad više bazena dijeli jedno sučelje, dajte svakome izričito podudaranje izvora i vlastitu adresu prijevoda, držite ih u upravljanoj konfiguraciji vatrozida i zabilježite redoslijed kojim se procjenjuju. Zatim zabilježite što ste provjerili: uređaj iz ip route get, brojač koji se pomaknuo i izvor koji je vidjela udaljena strana. Taj zapis odgovara na sljedeće izvješće bez ponavljanja zbrke oko aliasa.