Transparens proxy v6-on

Sziasztok,

valaki csinált már, vagy van ötlete hogyan lehet megvalósítani? NAT ugye nincs, így a v4 féle redirect sem lehetséges. Kicsit gugliztam, találtam egy tproxy nevű modult, de ezzel az a probléma, hogy nincs modulja ip6tables-hez (iptables-szel megy rendesen).

Hozzászólások

A TPROXY ipv6-ot csak a 2.6.37-es kernel óta tud, és ha jól emlékszem minimum 1.4.11-es ip(6)tables kell hozzá.

Külön vicces egyébként, hogy az Ubuntuban pl 2.6.38-as kernel van de csak 1.4.10-es iptables.

Egyébként a fejlesztők magyarok (Balabit), és a tproxy levlistán (angolul) segítőkészek.

Frissítettem, így már megeszi, de nem megy át a forgalom a squiden:

ip6tables -t mangle -N DIVERT
ip6tables -t mangle -A DIVERT -j MARK --set-mark 1
ip6tables -t mangle -A DIVERT -j ACCEPT

ip6tables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
ip6tables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129

Pedig ennek így mennie kellene...
--
Discover It - Have a lot of fun!

Bocs persze az ipv6-os megfelelőjét kell megadni.

ip -6 rule add fwmark 1 lookup 100
ip -6 route add local default dev lo table 100

Nem fogja elrontani a default utat.
Ez a policy routing bejegyzés azért kell, mert különben a kernel a csomagot kiküldené a normál útvonalon, ezzel kényszeríted rá, hogy a nem a gépnek szóló csomagokat mégiscsak feldolgozza, ehhez persze a megfelelő módosítások kellenek az alkalmazásban is (SOL_IP, IP_TRANSPARENT), de a Squid-ban (3.1-től?) ez implementálva van ha bekapcsolod a tproxy támogatást.

Bővebben itt:

http://www.mjmwired.net/kernel/Documentation/networking/tproxy.txt

Nagyjából azokat, amit itt beszéltünk, illetve a tproxy dokumentációban írnak.

A kernel verzió rendben volt, viszont iptables csak .40-es volt, úgyhogy hozzáadtam a netfilter repot (http://download.opensuse.org/repositories/security:/netfilter/openSUSE_…) és frissítettem az iptablest. A squidnek adtam még egy 'http_port 3129 tproxy' sort, illetve a tűzfal kiegészítés:


ip -6 rule add fwmark 1 lookup 100
ip -6 route add local default dev lo table 100

ip6tables -t mangle -N DIVERT
ip6tables -t mangle -A DIVERT -j MARK --set-mark 1
ip6tables -t mangle -A DIVERT -j ACCEPT

ip6tables -t mangle -A PREROUTING -p tcp -m socket -j DIVERT
ip6tables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129

(Meg persze egyéb alap magától értetődő dolgok amik kellenek, pl. v6 routing engedélyezése, dhcpd6 és radvd konfigolása, filterező tűzfalszabály, bind-ba a v6 tartomány hozzáadása az allow-queryhez, squidben a v6 tartomány hozzáadása a localnethez.... Nagyjából ennyi)
--
Discover It - Have a lot of fun!

Közben felmerült még egy kérdés:
Honnan tudom meg egy adott gép ID-jét, hogy a dhcpbe fix ipt adjak neki, és squiden a v4-hez hasonlóan tudjam tiltani vagy korlátozni?
--
Discover It - Have a lot of fun!

Milyen dhcpv6 ipmlementációt használsz?

A wide-dhcpv6 kliens ide teszi a DUID-ot:

/var/lib/dhcpv6/dhcp6c_duid

Ha debug módban indítod a klienst akkor kiírja egyébként.

Valami hasonlót kell megadni a wide-dhcpv6 szerver konfigban:

host valamihost {
duid 00:03:00:06:08:00:27:0c:5f:2b;
address 2001:aaa:0ab8:1::a infinity;
};

Bővebben itt:

http://www.rjsystems.nl/en/2100-dhcpv6-stateful-autocfg.php

Windows esetében egyébként az ipconfig /all parancs is kiírja a DUID-ot tudtommal.

Egyébként többféle szabvány létezik a DUID generálására az RFC3315-ben vannak ezek definiálva.

A röhej az, hogy az írható nem felejtő tárolót tartalmazó eszközök számára a DUID-LLT-t javasolják. Ez a MAC cím+2000.01.01 óta eltelt idő alapján generálódik a dhcp kliens első indításakor, ebből aztán az következik, hogy ha újratelepíted a gépet, vagy a dhcp kliens konfigja elveszik új azonosítót kap a gép.

Szóval érdemes ezt jól elrakni, vagy statikus azonosítót generáltatni a dhcp klienssel (DUID-LL pl), ha ezt tudja vagy állítható.

Nem volt az utóbbi időben érkezésem ezzel foglalkozni, most belenéztem.
Nos, nem az radvd+dhcp-vel van problémám, az tökéletesen működik most is. A kérdés az volt, hogy van egy adott kliensem, meg egy jelenleg működő felállás, hogyan tudom azt elérni, hogy az a kliens mindig egy adott címet kapjon, azt, amit én mondok. Ennek radvd oldaláról milyen beállítás kell?
--
Discover It - Have a lot of fun!

Azt a kliens dönti el, hogy milyen módon generál magának címet, DHCP szerver nem szükséges hozzá. A radvd-ben kell a managed flaget kikapcsolni, és az autonomous flaget be. Linux esetén EU64, Windows 7/Vista viszont random generálódik a cím alapértelmezetten.
Ha nincsen közvetlen ráhatásod a kliensekre akkor igazán jó megoldás nincs. Én megpatcheltem az ISC DHCP szervert, hogy a kliens L2 MAC címe alapján osszon IP-t. Nyilván ha relay van a rendszerben, akkor ez nem játszik.

szerk:
Az ISC szerver tud olyat, hogy a DUID-LLT/LL-ből kibányássza a mac címet és az alapján azonosít. Ennek két hátulütője lehet:
1. Hálókártya cserékor nem íródik át DUID, tehát marad a régi mac cím.
2. Egy DUID van a rendszerben, tehát egy hálózati csatoló mac címe fog számítani, bármennyi van a gépben. Windows esetén ez - ha jól emlékszem - a legalacsonyabb ID-jű kártya.