[linux] neposlusny source routing

Rybarik, Michal mrybarik na tronet.sk
Pondělí Prosinec 22 11:53:40 CET 2003


hello all,

mam jeden problem, ktoremu neviem prist na koren. stravil som na nom uz desiatky 
hodin, manualy k iproute2 a iptables poznam uz pomaly naspamat, google dostal 
riadne zabrat. a nic. pritom to bude nejaka jednoducha volovina, asi pre oci nevidim. 

mam router s dvoma vonkajsimi a jednym vnutornym interface. vsetci useri z vnutorneho 
interface maju ist vonku cez prvy vonkajsi interface (ISP1, NAT 1:n), okrem niektorych
- ti maju ist von cez druhy verejny iface (ISP2), a maju mat robeny NAT 1:1.

default route mam na routeri nastavenu na ISP1, a podla toho ako je to popisane v
http://www.linuxdocs.org/HOWTOs/Adv-Routing-HOWTO-4.html#ss4.1
som spravil dalsiu routovaciu tabulku, v nej je akurat default route na ISP2,
a hadzem do nej pakety omarkovane podla zdrojovej adresy. na oboch vonkajsich 
interfacoch robim v POSTROUTINGU SNAT.

problem je ten, ze to nechodi :o) paket sa mi spravne omarkuje, spravne vlezie do 
inej routovacej tabulky, spravne odide spravnym verejnym interfacom, spravne sa
preSNATuje. opacka cesta vsak nefunguje - paket mi pride verejnym interfacom
do routera, ale uz neodide na vnutorny. strati sa bohvie kde. hladal som ho na
vsetkych moznych interfacoch, nenasiel som ho nikde. na pingu to vyzera takto:

z vnutornej siete (iface eth2) z masiny 10.65.2.20 (12-bit netmask) pingam 
www.sme.sk. tento host by mal byt na routeri natovany na 10.1.9.20 a odist cez 
eth0. na eth0 (vonkajsi iface, ISP2) to vyzera takto:

10:33:33.810465 10.1.9.20 > www.sme.sk: icmp: echo request (DF)
10:33:33.851274 www.sme.sk > 10.1.9.20: icmp: echo reply
10:33:34.810577 10.1.9.20 > www.sme.sk: icmp: echo request (DF)
10:33:34.883375 www.sme.sk > 10.1.9.20: icmp: echo reply

echo request je spravne pre NATovany, ochadza, dostavame odpoved.  odpoved vsak
uz smerom k stroju ktory request povodne poslal nedorazi (vypis z routera,
vnutorny if, host este nie je preNATovany, requesty prichadzaju, reply nie):

10:33:50.811625 10.65.2.20 > www.sme.sk: icmp: echo request (DF)
10:33:51.811725 10.65.2.20 > www.sme.sk: icmp: echo request (DF)
10:33:52.811760 10.65.2.20 > www.sme.sk: icmp: echo request (DF)

zistil som ze ked zmenim na routeri default gw na eth0, zacne to chodit.
routovacia tabulka (vynechal som ostatne veci ktore s tym nesuvisia):

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
62.65.x.y       0.0.0.0         255.255.255.255 UH    0      0        0 ppp0
10.1.9.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.64.0.0       0.0.0.0         255.240.0.0     U     0      0        0 eth2
0.0.0.0         62.65.x.y       0.0.0.0         UG    0      0        0 ppp0

markovanie paketov (divoku masku si nevsimajte, je to tak naschval, tu problem nie je):
iptables -t mangle -A PREROUTING -s 10.64.2.0/255.240.7.0 -i eth2 -j MARK --set-mark 0x1a 

# ip rule show
0:      from all lookup local 
32765:  from all fwmark       1a lookup ISP2
32766:  from all lookup main 
32767:  from all lookup default 

# ip route show table ISP2
default via 10.1.9.1 dev eth0 

// prenatovanie ip-cky
iptables -t nat -A POSTROUTING -o eth0 -s 10.65.2.20 -j SNAT --to-source 10.1.9.20 

# ip addr show (je tu nahodena ta ip-cka za ktoru natujem)
2: eth0: <BROADCAST,MULTICAST,ALLMULTI,UP> mtu 1500 qdisc pfifo_fast qlen 100
    link/ether 00:06:29:b0:1b:22 brd ff:ff:ff:ff:ff:ff
    inet 10.1.9.10/24 brd 10.1.9.255 scope global eth0
    inet 10.1.9.20/24 brd 10.1.9.255 scope global secondary eth0
(10.1.9.10 je moj ruter, 10.1.9.1 router providera, 10.1.9.20 je klientske PC)

skusal som zapnut proxy-arp, skusal som tiez zduplikovat celu routovaciu tabulku 
(okrem defaultroute) do routovacej tabulky ISP2, nic nepomohlo. trapne a zbytocne 
som v zufalstve skusal aj DNATovat prichodzie pakety. rozmyslal som aj na stateless 
NATovanim ktore je sucast iproute2, bohuzial to bolo len v 2.2 jadrach. osobne mam 
dojem ze bud nefunguje de-SNATovanie, alebo je nieco nedobre v routovacej tabulke a 
de-SNATnuty paket nevie najst cestu kam ma ist. hladal som ho na vsetkych interfacoch, 
nenasiel som ho nikde. po zmene default route na ISP2 to zacne chodit. ked nahodim 
staticku route na nejake adresy ktore su u ISP2, zacnu fungovat aj tie.

prosim poradte, ja uz neviem kadial von z konopi..

michal rybarik



Další informace o konferenci linux