N-am fost prea atent la thread dar am impresia ca nu exista vreo problema. E normal ca router-ul sa genereze pachete in functie de ruta pe care o are spre destinatie atunci cand raspunde. Regulile sunt:

1) daca am ruta spre el il arunc pe unde am ruta
2) daca n-am ruta spre el atunci il dau pe ruta default
3) IP-ul sursa al pachetului generat local e cel al interfetei prin care am ruta (daca nu se aplica vreo regula desteapta de SNAT sau alta dracie) 4) daca am mai multe IP-uri pe acea interfata atunci raspund cu ala "primar"

Din cauza regulii 3) putem intelege de ce, pentru routere care au 2 interfete spre InterNET, atunci cand dai traceroute spre ceva din spatele lor, la hop-ul reprezentat de router vezi un IP care aparent n- are ce cauta acolo. Acelasi lucru pentru situatia cu multiple IP-uri pe o singura interfata externa.

E un comportament firesc si nu-nteleg *unde* ar fi problema.

On Mar 19, 2008, at 7:18 PM, Vlad Georgescu wrote:

wolfy, cred ca problema e mai complexa de atat ...

nu pot sa marchez pachetele UDP (pe care le trimite traceroute) in INPUT pt. ca nici macar nu trec pe acolo ... nefiind adresate router- ului, ajung direct in FORWARD ... si chiar daca le-asi marca in FORWARD nu rezolv nimic, pt. ca buba nu este a le routa pe astea ci de a routa corect ICMP-urile de raspuns din partea router-ului ...

deasemenea nici --ctorigdst nu ma ajuta pt. ca nu stiu nici sursa si nici destinatia ... adica pachetul UDP pe care il vede router-ul are o sursa aleatoare din net, iar destinatia este la fel de aleatoare din subnet-urile mele (S1 sau S2) ... singurul lucru pe care-l vede router-ul este TTL-ul care a ajuns la 1 si atunci se sesizeaza "din oficiu" ;) si trimite ICMP-ul de raspuns catre sursa ...

solutia ar fi sa marchez in FORWARD conexiunile si nu pachetele, iar apoi sa le "prind" (pe conexiuni) in OUTPUT

din pacate nici chestia asta nu merge pt. ca kernelul se comporta ca si cum ICMP-urile de raspuns din OUTPUT n-ar fi din aceeasi conexiune cu UDP-urile care au trecut anterior prin FORWARD

uite cum arata ce ajunge in FORWARD
IN=eth1 OUT=eth2 SRC=y.y.y.y DST=z.z.z.z LEN=68 TOS=0x00 PREC=0x00 TTL=1 ID=14678 PROTO=UDP SPT=37103 DPT=33452 LEN=48

si ce iese prin OUTPUT:
IN= OUT=eth0 SRC=x.x.x.x DST=y.y.y.y LEN=96 TOS=0x00 PREC=0xC0 TTL=64 ID=7524 PROTO=ICMP TYPE=11 CODE=0 [SRC=y.y.y.y DST=z.z.z.z LEN=68 TOS=0x00 PREC=0x00 TTL=1 ID=14678 PROTO=UDP SPT=37103 DPT=33452 LEN=48 ]

unde x.x.x.x e IP al router-ului (in cazul de fata de pe placa ailalta ... adica eth1), y.y.y.y e IP din net, iar z.z.z.z e IP din DMZ

am incercat sa le marchez cu:
$IPTABLES -t mangle -A FORWARD -i $P1_NIC -j CONNMARK --set-mark 0x1
$IPTABLES -t mangle -A FORWARD -i $P2_NIC -j CONNMARK --set-mark 0x2

si sa le prind cu:
$IPTABLES -t mangle -A OUTPUT -m connmark --mark 0x1 -j LOG
$IPTABLES -t mangle -A OUTPUT -m connmark --mark 0x2 -j LOG

... nema ... nica ... nici urma ...

in schimb cu:
$IPTABLES -t mangle -A FORWARD -o $P1_NIC -m connmark --mark 0x1 -j LOG $IPTABLES -t mangle -A FORWARD -o $P2_NIC -m connmark --mark 0x2 -j LOG

le prind pe alea care vin inapoi din DMZ (tot ICMP-uri)

sa moara peshte prajit daca stiu de unde s-o apuc ...

vlad


lonely wolf a scris:
ai mai multe variante. de pilda sa marchezi pachetele la intrare
  iptables -t mangle -A INPUT -i $INT1 -set-mark 1
  iptables -t mangle -A INPUT -i $INT2 -set-mark 2
si apoi sa rutezi functie de mark.
alternativ te poti folosi de conntrack si --ctorigdst


_______________________________________________
RLUG mailing list
RLUG@lists.lug.ro
http://lists.lug.ro/mailman/listinfo/rlug

Raspunde prin e-mail lui