[ pisac @ 29.03.2012. 09:24 ] @
Imam 3 mrežne kartice sa sopstvenim IP adresama u sopstvenim mrežama. Svaka od njih dodaje i svoju default rutu 0.0.0.0 preko njenog gejtveja. Znači, imam 3 default rute. Servisi koji nisu bindovani na određenu karticu, primaju zahteve sa bilo koje, a šalju zahteve preko eth0.

I to radi... na debianu 4.0 (etch).

Međutim, ta ista konfiguracija sa istim karticama i istim adresama i rutama, ne radi na Ubuntu 10.04!

Ne mogu od spolja da pingujem nijednu karticu, niti imam ikakav pristup sa Ubuntu ka Internetu. Sve dok ne ostavim samo jednu default rutu 0.0.0.0 preko gejtveja sa jedne od mreža, i onda sav saobraćaj ide preko te IP adrese. I onda od spolja mogu da pingujem samo tu jednu IP adresu čiji GW koristim. Što znači da mi ne vredi da bindujem neke servise na neku od drugih kartica.

Aj da pomenem opet da je sva konfiguracija, "route -n" i slično, potpuno identična i na Ubuntu i na Debianu, ali na Debianu radi a na Ubuntu ne radi.

Ima li neko ideju gde je problem?
[ pisac @ 30.03.2012. 12:53 ] @
Identična situacija je i sa samo 2 interfejsa.

Tcpdump jedva radi na ubuntu dok god postoji više od jedne default rute sa istim prioritetima (0), odnosno pakete jedva prikazuje sa nekim neverovatnim kašnjenjem od preko 3-4 minuta, i ne može uopšte da se prekine sa ctrl-c već samo za ctrl-z. Ali zato kad ugasim jednu od default ruta, sve radi kao sat (uključujući i ctrl-c).

Kada dodam opet drugu default rutu ali prioritet 1 (route add default gw ..... metric 1), onda nema problema sa tcdpump-om ali dotični drugi interfejs ne radi. Prima pakete, recimo ping (što se vidi sa tcpdump) ali jednostavno ne odgovara.

Međutim, problem sam locirao negde u firewallu (iptables), ali mi nije jasno kada i kako nastaje. Kada firewall ugasim i upalim sve proradi bez problema, kao što bi i trebalo.
[ pisac @ 30.03.2012. 17:53 ] @
Držim ja monolog ovde

Nije ništa do firewall-a, jer sada i bez firewalla opet ne radi. Očigledno ima nešto što mu smeta, i što je posle restartovanja firewall-a u jednom trenutku bilo "popravljeno", ali to je sada opet pokvareno, i ništa mu ne pomaže.

Postoji li neko ko na Ubuntu 10.04 ima više mrežnih kartica sa default (0.0.0.0) rutama?

Ako ne namestim ovo, vidim da ću Ubuntu da pošaljem (po ko zna koji put) u recycle bin. Već sam ranijih godina nekoliko puta pokušavao da instaliram/podesim Ubuntu da radi nešto korisno, ali uvek neki glupavi problemi koje ne mogu da rešim u razumnom roku (ako treba da potrošim nedelju dana za rešavanje problema, onda neka hvala ima distribucija koje rade to bez mučenja). I uvek se posle dužeg vremena predomislim i rešim da ga recikliram i probam ponovo. Jel sam ja to neki baksuz ili je taj Ubuntu stvarno neka brljotina?
[ maksvel @ 30.03.2012. 19:25 ] @
Ovo mi "miriše" na neki issue sa Network Managerom.
Da nemaš neki NAT, DNAT, nešto..? Netfilter isključen, ali da nije
ostalo nešto u nat-u što pravi problem?
Šta li mu stoji tamo u /etc/NetworkManager/system-connections/ethX?
Ima vazda nekih settingsa, možda mu neki smeta. Pominju neki
ignore-auto-routes da treba da bude TRUE...
[ pisac @ 30.03.2012. 20:36 ] @
Nemam ja network manager. Pretpostavljam da je to neka komponenta gnome-a, a ovde ne postoji gnome jer je u pitanju čisto serverska mašina. Nego, proučavao sam problem malo pobliže uz tcpdump, i došao do sledećih činjenica:

Na Debianu može da se ostavi default ruta samo jedne mrežne kartice, i opet će sve da radi. Recimo da ostavim default rutu kartice eth0, onda sistem radi ovako:
- Ako pingujem od spolja eth1, ping ulazi na eth1 a odgovor izlazi na eth0 koristeći adresu eth1 kartice. I sve radi savršeno.
- Ako je neki servis bindovan na ip adresu eth2 kartice, saobraćaj tog servisa izlazi preko eth0 kartice koristeći adresu eth2 kartice, a udaljeni odgovor naravno dolazi na eth2 karticu. I opet sve radi savršeno. Recimo squid proxy šalje zahteve preko eth0 koristeći ip sa eth2, i odgovor dolazi na eth2 i surfovanje radi.

Na Ubuntu to radi isto tako, ali u stvari ne radi:
- Ako pingujem od spolja eth1, ping ulazi na eth1 a odgovor ne izlazi nigde.
- Ako je neki servis bindovan na ip adresu eth2 kartice, saobraćaj tog servisa izlazi preko eth0 kartice koristeći adresu eth2 kartice, a udaljeni odgovor naravno dolazi na eth2 karticu. Međutim, ništa se ne dešava! Servis jednostavno ne vidi odgovor koji je došao na eth2 karticu. U gore navedenom primeru proksija, proksi šalje zahteve preko eth0 koristeći ip sa eth2, odgovor stiže na eth2 ali ... ništa.

Iz priloženog se zaključuje da na Ubuntu sve što uđe na kartice koje nemaju svoju default rutu ubačenu u ruting tabelu, ne stiže do servisa kome je namenjeno. Znači, ping ulazi ali nema odgovora jer nije pokrenuo potreban proces. Dolazni saobraćaj namenjen nekom servisu takođe ulazi, ali takođe ne proizvodi nikakvu reakciju jer jednostavno ne dospeva do tog servisa.

I kad svaka kartica ima svoju default rutu ubačenu, na Debianu naravno i dalje radi a na Ubuntu i dalje ne radi

[Ovu poruku je menjao pisac dana 30.03.2012. u 21:48 GMT+1]
[ pisac @ 30.03.2012. 22:31 ] @
Našao sam dušmanina!

Citat:
rp_filter is a functionality which automatically rejects incoming packets if the routing table entry for their source address doesn't match the network interface they're arriving on. Normally, this has security advantages because it prevents the so-called IP-spoofing, but in our situation ( several IP addresses on different interfaces ) it can pose problems.


echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter


U stvari, ja sam odavno dodao net.ipv4.conf.all.rp_filter=0 u /etc/sysctl.conf, međutim trebao sam slično tome da izmenim i u /etc/sysctl.d/10-network-security.conf

Eto da znate
[ maksvel @ 30.03.2012. 22:37 ] @
Aferim!
:)
[ pisac @ 30.03.2012. 22:57 ] @
Ah, da, možda je simpatično da napomenem da je na Debianu uključen taj filter i u /etc/sysctl.conf, i u /proc/sys/net/ipv4/conf/eth1/rp_filter, pa sve ipak radi.