Здравейте,
след много ровене из google, малко питане и безсмислени и безрезултатни проби стигнах до тук.



Имам следната ситуация:
eth0 - local net (192.168.0.x)
eth1 - ISP1
eth2 - ISP2

И на eth1 и на eth2 има пуснат SNAT:
>> Chain POSTROUTING (policy ACCEPT 223K packets, 19M bytes)
>> pkts bytes target prot opt in out source destination >> 188K 12M SNAT all -- any eth1 anywhere anywhere to:85.x.x.x >> 823 50110 SNAT all -- any eth3 anywhere anywhere to:10.0.0.51

На практика IPS2 не се използва изобщо. Всичко минава през IPS1. В определени моменти искам да прекарам един и точно един хост от локалната мрежа да ползва ISP2. За целта използвам policy routing:

ip rule add from 192.168.0.7 table viphost
ip route add default via 10.0.0.1 table vipohost
ip route flush cache

Всичко изглежда нормално, нали?

Но това се случва в реално време и всички работещи сесии от машината 192.168.0.7 започват да излизат от eth2. Особеното е, че те излизат през eth2 SNAT-нати ___със IP адреса на eth1___. Това първоначално ме шокира. В последствие си го обясних с факта, че ядрото естествено следи сесиите и не може просто така да ги промени. След като въпросните сесии умрат, всички нови дошли на тяхно място излизат правилно. Това се отнася като цяло за всички нови сесии.

Проблемът идва в това, че от 192.168.0.7 работи пинг към yahoo.com например, постоянно. След като пренасоча 192.168.0.7 през eth2 пингът продължава да излиза с адреса на eth1. Спирам го, пускам го, но той продължава да излиза грешно. Едва когато го спра за дълго време, например 10мин., всичко тръгва коректно. А когато пусна пинг към друг хост _след_ прехвърлянето проблеми нямам.


Има ли някакъв начин да рестартирам всичко, което ядрото помни за даден хост, защото освен проблемите с пинга може да има и други, които аз не съм хванал все още.

Reply via email to