Re: [zorp-hu] virtualis ip cimak hasznalata ?
SNAT osztalyt valahogy igy kell letrehoznod:
class MySNAT(AbstractNAT): def performTranslation(self, session, addr, nat_type = NAT_SNAT): return SockAddrInet('xxx.xxx.xxx.xxx', 12345)
a fuggveny testeben lehet barmi, ami pythonban engedelyezett. Tovabbi peldakent a standard NAT osztalyokat megtalalod a NAT.py allomanyban.
Ok, ezt ertem. Az SNAT-nal nincs jelentosege a forrasportnak nem ? Vagyis az 12345 helyett a 0 is jo ha jol gondolom.
ha a cel cimet hamisitom, akkor : - router=TransparentRouter() (itt nem csinalok semmit, kerdes, hogy ha be kell irni a celportot, akkor azt hogy kell megcsinalni ?) vagy, ha virtualis cimra jott (egy gepeseten) : - router=DirectedRouter(SockAddrInet('192.168.253.11', ? )) (ide mit kell irni a celporthoz, ha ugyanaz mint amire jott ? ha nem ugyanaz, akkor termeszetesen beirom, hogy hova kell kuldeni...)
A portot jelenleg kotelezo kiirni, bar egy kb ket soros patch segitsegevel megvalosithato, hogy 0-s port eseten az eredeti port a default.
Miert van erre szukseg?
Azert mert elofordulhat, hogy egy port tartomanyt akarok atengedni (a 2100-tol a 3100-as portig egy csomo portot hasznal az alkalmazas es nem akarom mindet felsorolni, hanem csak megadom, hogy mettol meddig menjenek at a csomagok) Ebben az esetben kellene valahogy az eredeti port es azt tudnam betenni a DNAT-hoz vagy a DirectedRouterhez. pl port(orig(akarmi)) visszaadna azt a portot amire eredetileg ment a csomag. Ha egy port van , akkor ez nem problema, de ha tobb portot fel akarok solorlni, vagy egy port tartomanyt adok meg, akkor elore nem irhatom be, hogy melyik portra kell menni (arra kell menni, amire eredetileg ment a csomag) Ha egy konkret portra kell mindent atiranyitani azt persze meg tudom csinalni, de most nem ez a feladat.
vagy, ha virtualis cimre jott (tobb gen eseten) - router=myDirectedRouter()
(A 192.168.253.111 a virtualis cim) Itt is erdekelne, hogy ez a myDirectedRouter hogy nezzen ki. Attol fuggoean, hogy milyen cimre jott a csomag hova kell tovabbitani. Ezt valahogy le kellene vizsgalni es e szerint cselekedni. Az is kerdes, hogy a portot (ha ugyanaz, ill ha valtozik) hogy tudom betenni ?
A forras- ill. celnat-ot ugyanaz az osztaly vegzi, a nat_type argumentumban megkapja, hogy konkretan mirol is van szo.
Ok, de meg mindig nem vilagos, hogy ha egy proxyval akaok lekezelni tobb virtualis cimet, akkor azt hogy oldjam meg.(es nm mappingrol van szo) Valami if - else szeruseget kell betenni a myDNAT-ba, de nem tudom ennek mi a pontos szintaktikaja. (Persze meg is tanulhatnek pythonul, de gondoltam hatha megmondjatok, hogy ezt hogy kell betenni ide...) Ezt a feladatot pl Alf-ban eleg jol es egyszeruen le lehet kezelni. Gondolom itt sincs ez maskepp. Csak a szintaktikat nem tudom. (hova kell az if-eket irni...) Ezek az esetek nem agyafurt modon megkrealt szituacios gyakorlatok, hanem igy mukodik nehany rendszer. Arpi irt erre egy sajat 'Zorp'-pt,de en szeretnem a standard eljarasok segitsegevel megoldani a problemat, hogy ne kelljen minden tuzfalra raszabni a Zorpot, hanem egyfelekeppen le tudjunk kezelni minden lehetoseget. Igazabol mar odaig eljutottam, hogy a OneToOneMultiNAT alkalmazasara egy reszletes pelda is eleg lenne a virtualis cimek kezelesehez. Udv! Lajos -- Bazsi PGP info: KeyID 9AF8D0A9 Fingerprint CD27 CFB0 802C 0944 9CFD 804E C82C 8EB1 _______________________________________________ zorp-hu mailing list zorp-hu@lists.balabit.hu https://lists.balabit.hu/mailman/listinfo/zorp-hu
On Wed, Aug 21, 2002 at 01:38:43PM +0200, nagy_l@vaxst2.tii.matav.hu wrote:
SNAT osztalyt valahogy igy kell letrehoznod:
class MySNAT(AbstractNAT): def performTranslation(self, session, addr, nat_type = NAT_SNAT): return SockAddrInet('xxx.xxx.xxx.xxx', 12345)
a fuggveny testeben lehet barmi, ami pythonban engedelyezett. Tovabbi peldakent a standard NAT osztalyokat megtalalod a NAT.py allomanyban.
Ok, ezt ertem. Az SNAT-nal nincs jelentosege a forrasportnak nem ? Vagyis az 12345 helyett a 0 is jo ha jol gondolom.
igen. a 0 azt jelenti, hogy dinamikusan keressunk forrasportot, a nem 0 azt, hogy az adott portrol akarsz menni. (persze ez nem biztos, hogy sikerul)
ha a cel cimet hamisitom, akkor : - router=TransparentRouter() (itt nem csinalok semmit, kerdes, hogy ha be kell irni a celportot, akkor azt hogy kell megcsinalni ?) vagy, ha virtualis cimra jott (egy gepeseten) : - router=DirectedRouter(SockAddrInet('192.168.253.11', ? )) (ide mit kell irni a celporthoz, ha ugyanaz mint amire jott ? ha nem ugyanaz, akkor termeszetesen beirom, hogy hova kell kuldeni...)
A portot jelenleg kotelezo kiirni, bar egy kb ket soros patch segitsegevel megvalosithato, hogy 0-s port eseten az eredeti port a default.
Miert van erre szukseg?
Azert mert elofordulhat, hogy egy port tartomanyt akarok atengedni (a 2100-tol a 3100-as portig egy csomo portot hasznal az alkalmazas es nem akarom mindet felsorolni, hanem csak megadom, hogy mettol meddig menjenek at a csomagok) Ebben az esetben kellene valahogy az eredeti port es azt tudnam betenni a DNAT-hoz vagy a DirectedRouterhez. pl port(orig(akarmi)) visszaadna azt a portot amire eredetileg ment a csomag.
Ha egy port van , akkor ez nem problema, de ha tobb portot fel akarok solorlni, vagy egy port tartomanyt adok meg, akkor elore nem irhatom be, hogy melyik portra kell menni (arra kell menni, amire eredetileg ment a csomag) Ha egy konkret portra kell mindent atiranyitani azt persze meg tudom csinalni, de most nem ez a feladat.
oke, felveszem a todo-ra.
vagy, ha virtualis cimre jott (tobb gen eseten) - router=myDirectedRouter()
(A 192.168.253.111 a virtualis cim) Itt is erdekelne, hogy ez a myDirectedRouter hogy nezzen ki. Attol fuggoean, hogy milyen cimre jott a csomag hova kell tovabbitani. Ezt valahogy le kellene vizsgalni es e szerint cselekedni. Az is kerdes, hogy a portot (ha ugyanaz, ill ha valtozik) hogy tudom betenni ?
A forras- ill. celnat-ot ugyanaz az osztaly vegzi, a nat_type argumentumban megkapja, hogy konkretan mirol is van szo.
Ok, de meg mindig nem vilagos, hogy ha egy proxyval akaok lekezelni tobb virtualis cimet, akkor azt hogy oldjam meg.(es nm mappingrol van szo) Valami if - else szeruseget kell betenni a myDNAT-ba, de nem tudom ennek mi a pontos szintaktikaja. (Persze meg is tanulhatnek pythonul, de gondoltam hatha megmondjatok, hogy ezt hogy kell betenni ide...)
az elozo levelemben volt egy pelda, ezt az osztalyt tedd be a peldanydefinicioid ele: class MySNAT(AbstractNAT): def performTranslation(self, session, addr, nat_type = NAT_SNAT): if nat_type == NAT_SNAT: if addr < InetDomain('192.168.0.0/24'): # a forditando cim benne van a 192.168.0.0/24-ben return SockAddrInet('1.2.3.4', 0) else: return addr Egy kicsit ertelmesebb NAT osztaly pl a HashNAT: class HashNAT(AbstractNAT): def __init__(self, ip_hash, default_reject=TRUE): AbstractNAT.__init__(self) self.ip_hash = ip_hash self.default_reject = default_reject def performTranslation(self, session, addr, nat_type=NAT_SNAT): try: if nat_type == NAT_SNAT: ip = self.ip_hash[session.client_address.ip_s] return SockAddrInet(ip, 0) else: ip = self.ip_hash[addr.ip_s] return SockAddrInet(ip, addr.port) except KeyError: if self.default_reject: raise DACException, 'IP not within the required range.' else: return addr
Ezek az esetek nem agyafurt modon megkrealt szituacios gyakorlatok, hanem igy mukodik nehany rendszer. Arpi irt erre egy sajat 'Zorp'-pt,de en szeretnem a standard eljarasok segitsegevel megoldani a problemat, hogy ne kelljen minden tuzfalra raszabni a Zorpot, hanem egyfelekeppen le tudjunk kezelni minden lehetoseget.
Igazabol mar odaig eljutottam, hogy a OneToOneMultiNAT alkalmazasara egy reszletes pelda is eleg lenne a virtualis cimek kezelesehez.
Ez egy OneToOneNAT-os pelda: Service("prot_PLUG", PlugProxy, dnat=OneToOneNAT(InetDomain('10.0.0.1/32'), InetDomain('192.168.1.2/32'), default_reject=FALSE)) MultiNAT-os pelda: Service("prot_PLUG", PlugProxy, dnat=OneToOneMultiNAT([(InetDomain('10.0.0.1/32'), InetDomain('192.168.1.2/32')), (InetDomain('10.0.0.3/32'), InetDomain('192.168.1.3/32'))], default_reject=FALSE)) termeszetesen az adott cimek teljes cimtartomanyok is lehetnek. -- Bazsi PGP info: KeyID 9AF8D0A9 Fingerprint CD27 CFB0 802C 0944 9CFD 804E C82C 8EB1
participants (2)
-
Balazs Scheidler
-
nagy_l@vaxst2.tii.matav.hu