On Tue, 2009-07-28 at 16:56 +0200, Kosa Attila wrote:
Hello! Valaki meg tudna szanni, es megmondana, hogy melyik doksit kellene elolvasnom ahhoz, hogy legalabb nyomokban megprobalhassam megerteni az uj mukodest? A tproxy.txt fajlt hiaba olvasom, nem igazan ertem hogyan is kellene mukodnie...
Ezt meg ertem is... # ip rule add fwmark 1 lookup 100 De ezt mar nem annyira. Miert 0.0.0.0/0 es miert "lo"? # ip route add local 0.0.0.0/0 dev lo table 100
ez kenyszeriti ki, hogy az 1-el megmarkolt csomagok a lokalis IP stackhez menjenek IP cimtol fuggetlenul. Amugy itt a "local" a kulcsszo, ld. route type-ok: ip route help: TYPE := [ unicast | local | broadcast | multicast | throw | unreachable | prohibit | blackhole | nat ] a local azt jelenti, hogy a lokalis stacknek menjenek a csomagok.
Ez csak siman letrehozza a DIVERT chain-t. # iptables -t mangle -N DIVERT Ez beletolja a tcp forgalmat a DIVERT chain-be. # iptables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
marmint azokat a forgalmakat, amire az "-m socket" matchel. ami arra matchel, amihez van lokalis socket.
Ez megjeloli a DIVERT chain forgalmat. De miert van ketto is belole a doksiban? # iptables -t mangle -A DIVERT -j MARK --set-xmark 0x1/0xffffffff # iptables -t mangle -A DIVERT -j MARK --set-mark 1
ha a mark-ot bitenkent akarod allokalni (aminek azert lehet ertelme), akkor az elsot hasznalod. ha a teljes markot csak erre hasznalod, akkor eleg a masodik.
Ez csak engedelyezi a DIVERT forgalmat. # iptables -t mangle -A DIVERT -j ACCEPT
igen, miutan ratette a markot.
Ez a 80-as portra tarto forgalmat feltolja az 50080-as portra. # iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY \ --tproxy-mark 0x1/0x1 --on-port 50080
lookupolja az 50080-as portot azon az IP cimen, ahonnan az aktualis csomag eppen erkezik. (ez ugyanaz a mukodes, mint eddig), es ha ott van tproxy-s socket, akkor bebillenti az 1-es markot.
Amit nem ertek: - Ebbol hogyan derul ki, hogy melyik interfeszre kell bind-olni a zorp-ot?
oda, ahova eddig. a TPROXY target a bejovo interface elso IP cimet hasznalja lookuphoz.
- Hogyan jut el a forgalom a zorp-hoz? Ugyanis a fentieket megcsinalva nem kerul fel...
a Zorpnak hallgatoznia kell a fenti porton, es be kell billentenie az IP_TRANSPARENT setsockopt-ot. strace-ben nezd meg, hogy ezt megteszi-e. milyen zorp verzio? most megneztem a 3.1.15c-ben benne van a szukseges kod: static gint z_do_tp40_bind(gint fd, struct sockaddr *sa, socklen_t salen, guint32 sock_flags) { gint on = 1, res; z_enter(); if (sock_flags & ZSF_TRANSPARENT || sock_flags & ZSF_MARK_TPROXY) { if (setsockopt(fd, SOL_IP, IP_TRANSPARENT, &on, sizeof(on)) < 0) setsockopt(fd, SOL_IP, IP_FREEBIND, &on, sizeof(on)); } res = z_do_ll_bind(fd, sa, salen, sock_flags); z_return(res); } itt az IP_TRANSPARENT a lenyeg.
- Ha kettonel tobb halokartyam van, akkor regebben tobb interfeszre is bindolhattam ugyanazon portra (eth0 - 50080, eth1 - 50080 stb.) Ezt most hogy tudom elkovetni?
ugyanugy. -- Bazsi