rp_filter versus snat (for kernel hackers)

Rybarik, Michal mrybarik na tronet.sk
Pondělí Prosinec 22 17:21:26 CET 2003


hello all,

mam podozrenie ze v kerneli nie je nieco s kostolnym poriadkom. skor nez
zacnem otravovat na vyssich miestach, hodte na to prosim oko, co si o tom
myslite vy.

situacia zjednodusene:
stroj 10.65.2.20 v LAN pinga host na internete (napr. 217.67.20.139). 
ping prechadza mojim routerom (equinox), tam sa ma cez SNAT prelozit
na 10.1.9.20, prechadza druhou desiatkovou sietou (nie mojou), preklada
sa za verejnu IP-cku a ide internetom. vygeneruje sa reply, De-SNATuje
sa do prvej desiatkovej (cudzej) siete, prichadza na moj ruter (equinox),
tu by sa mal opat de-SNATovat a poslat klientovi. malo by to teda vyzerat
nejak takto (cesta icmp echo reply cez moj router na koncovy stroj):

Dec 22 16:55:35 equinox kernel: mangle-PREROUTING-eth0 IN=eth0 OUT= 
  MAC=00:06:29:b0:1b:22:00:50:fc:e7:d0:86:08:00 SRC=217.67.20.139 
  DST=10.1.9.20 LEN=84 TOS=0x00 PREC=0x00 TTL=117 ID=27706 PROTO=ICMP 
  TYPE=0 CODE=0 ID=8194 SEQ=0

Dec 22 16:55:35 equinox kernel: mangle-FORWARD-eth0 IN=eth0 OUT=eth2 
  SRC=217.67.20.139 DST=10.65.2.20 LEN=84 TOS=0x00 PREC=0x00 TTL=116 
  ID=27706 PROTO=ICMP TYPE=0 CODE=0 ID=8194 SEQ=0

Dec 22 16:55:35 equinox kernel: filter-FORWARD-eth0 IN=eth0 OUT=eth2 
  SRC=217.67.20.139 DST=10.65.2.20 LEN=84 TOS=0x00 PREC=0x00 TTL=116 
  ID=27706 PROTO=ICMP TYPE=0 CODE=0 ID=8194 SEQ=0

paket vchadza interfacom eth0. v mangle-PREROUTING je cielova IP este z 
cudzej desiatkovej siete. v mangle-FORWARD je uz prelozena na moju desiatkovu
IP a koretne sa doruci.

takto to funguje, ked mam nastavenu default GW smerom na eth0. ked si 
nastavim default gw na iny interface, a na eth0 posielam icmp echo requesty cez 
iproute2 rule (source routing), pokasle sa to:

Dec 22 16:49:49 equinox kernel: mangle-PREROUTING-eth0 IN=eth0 OUT= 
  MAC=00:06:29:b0:1b:22:00:50:fc:e7:d0:86:08:00 SRC=217.67.20.139 
  DST=10.1.9.20 LEN=84 TOS=0x00 PREC=0x00 TTL=117 ID=35198 PROTO=ICMP 
  TYPE=0 CODE=0 ID=7938 SEQ=0

Dec 22 16:49:49 equinox kernel: martian source 10.65.2.20 from 217.67.20.139, on dev eth0

v prvom kroku je este vsetko OK. v druhom kroku je paket zahodeny, co je 
IMHO zle. podla logu sudim ze sa najprv spravil De-SNAT a potom sa uplatnil 
rp_filter. cielova ip-cka uz nezodpoveda interfacu ktorym paket prisiel, a je 
vyhlaseny za martana. sudim ze by to malo byt naopak, najprv by sa mal filtrovat 
a az potom De-SNATovat. zaujimavy a pre mna nepochopitelny je vplyv default 
gateway na tieto operacie... je tu niekto natolko ostrielany aby vedel povedat, 
kde je problem?

dakujem vsetkym

michal rybarik


Další informace o konferenci Linux