Poprvé publikováno 2012-01-10.
Nastavení proxy serveru v lokální síti umožňuje:
urychlit přístup k Internetu díky lokálnímu ukládání a následnému sdílení často požadovaných zdrojů (stránek, obrázků, CSS) z mezipaměti;
centralizovaně nastavit blokování reklam (nebo jiného nežádoucího obsahu) pro všechny uživatele lokální sítě najednou.
Transparentní HTTP proxy se nazývá tak proto, že všichni klienti přistupující z vnitřní sítě k externím webovým serverům procházejí přes ni automaticky, aniž by museli měnit nastavení na své straně (aniž by explicitně zadávali proxy ve všech používaných aplikacích, z nichž některé mohou proxy vůbec nepodporovat).
Podívejme se nyní, jak zajistit tuto velmi pohodlnou transparentnost současně pro IPv4 i IPv6.
V následujících příkladech se předpokládá:
používáte router založený na GNU/Linux;
na něm je nainstalován proxy server Squid 3.1+ (popis instalace a nastavení Squidu přesahuje rámec tohoto článku);
v operačním systému je použito jádro Linux verze 2.6.37+ a balíček iptables 1.4.10+;
vnitřní rozhraní routeru se jmenuje eth0.
IPv4
Připojení IPv4 jsou přes mechanismus NAT přesměrována na proxy. Vypadá to poměrně jednoduše:
iptables
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8084
Přidejte tento řádek do vašeho již používaného skriptu iptables.
Squid
Na straně Squidu je třeba přidat do /etc/squid3/squid.conf:
http_port 8084 transparent
Port můžete použít jakýkoliv jiný podle vašeho výběru, důležité je, aby nebyl obsazen ničím jiným a aby byl stejný jak v pravidle iptables, tak v konfiguraci Squidu.
IPv6
Poněvadž ip6tables nepodporuje NAT, transparentní proxy pro IPv6 se realizuje trochu jiným způsobem. Nastavení vypadá o něco složitěji, avšak díky absenci nutnosti používat NAT dosahujeme důležité výhody: ačkoli spojení procházejí přes proxy, vzdálený webový server jako adresu klienta vidí IPv6 adresu koncového počítače, nikoliv adresu proxy.
iproute & ip6tables
#!/bin/sh
# === Odstranění předchozí konfigurace (pokud existovala) ===========
ip -6 route flush table 64
ip -6 rule del from all fwmark 0x6
ip6tables -t mangle -F
ip6tables -t mangle -X DIVERT
# === Vložení nové konfigurace =====================
ip -6 route add local default dev lo table 64
ip -6 rule add from all fwmark 0x6 lookup 64
ip6tables -t mangle -N DIVERT
ip6tables -t mangle -A DIVERT -j MARK --set-mark 6
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 -i eth0 --dport 80 -j TPROXY --tproxy-mark 0x6 --on-port 8086
Hodnoty table 64 a fwmark 0x6 jsou zde vybrány libovolně; pokud ve vašem systému již používáte více tabulek směrování a pravidla firewallu využívající značky (například pro zajištění fungování více WAN připojení), ujistěte se, že tento skript nebude konfliktovat s vašimi již existujícími nastaveními.
Squid
Do /etc/squid3/squid.conf je třeba přidat:
http_port 8086 tproxy
Stejně jako v popsaném procesu nastavení pro IPv4 můžete zvolit i jiný port.
Aplikace nastavení
Aby se projevily změny provedené v souboru squid.conf, stačí Squidu nařídit, aby tento soubor znovu načtl; například v distribucích založených na Debianu k tomu stačí spustit příkaz /etc/init.d/squid3 reload.
Nastavení ip/iptables/ip6tables se projeví ihned po provedení příslušných příkazů. Aby se uplatňovala při každém spuštění systému, přidejte je do skriptu vašeho firewallu (v používáném arno-iptables-firewall lze uživatelská rozšíření zapsat do /etc/arno-iptables-firewall/custom-rules), nebo je jednoduše přidejte do /etc/rc.local.
Ověření
Z libovolného počítače v lokální síti (ale ne ze samotného serveru) spusťte:
curl -I4 http://version6.ru/
curl -I6 http://version6.ru/
V obou případech by se ve výstupu curlu měly objevit řádky:
X-Cache: MISS from vášproxy
X-Cache-Lookup: MISS from vášproxy:port
Pokud se neobjevují nebo se nedaří navázat spojení, znamená to, že něco není nastaveno správně. Pokud se vám to nepodaří nastavit, navštivte náš kanál IRC, možná vám někdo pomůže.
