Prvi put objavljeno 2012-01-10.
Postavljanje proksij-servera u lokalnoj mreži omogućava:
ubrzavanje pristupa internetu zahvaljujući lokalnom čuvanju i kasnijem deljenju iz keša često zahtevanih resursa (stranica, slika, CSS);
konfigurisanje blokiranja reklama (ili drugog neželjenog sadržaja) na jednom mestu, odmah za sve korisnike lokalne mreže.
Transparentni HTTP proksij se tako naziva zato što svi klijenti koji se obraćaju spoljnim veb-serverima iz unutrašnje mreže prolaze kroz njega automatski, bez unosa bilo kakvih promena u podešavanja na svojoj strani (bez eksplicitnog navođenja proksija u svim korišćenim programima, od kojih neki možda uopšte nemaju podršku za proksij).
Razmotrimo kako da obezbedimo ovu veoma praktičnu transparentnost istovremeno za IPv4 i IPv6.
U donjim primerima podrazumeva se:
koristite ruter na bazi GNU/Linux-a;
na njemu je instaliran proksij-server Squid 3.1+ (opis instalacije i konfiguracije Squida je van okvira ovog članka);
u operativnom sistemu se koristi Linux kernel verzije 2.6.37+ i paket iptables 1.4.10+;
unutrašnji interfejs rutera se zove eth0.
IPv4
IPv4 veze se preusmeravaju na proksij pomoću mehanizma NAT. Izgleda prilično jednostavno:
iptables
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8084
Dodajte ovu liniju u već korišćeni iptables skript.
Squid
Sa strane Squida potrebno je dodati u /etc/squid3/squid.conf:
http_port 8084 transparent
Port možete koristiti bilo koji drugi po vašem izboru, važno je samo da nije zauzet ničem drugim i da bude isti i u pravilu iptables i u konfiguracionom fajlu Squida.
IPv6
Budući da ip6tables ne podržava NAT, transparentni proksij za IPv6 se realizuje na malo drugačiji način. Konfiguracija izgleda malo složenije, međutim, zahvaljujući odsustvu potrebe za NAT-om, postiže se važna prednost: iako veze prolaze kroz proksij, udaljeni veb-server kao adresu klijenta vidi IPv6 adresu krajnje mašine, a ne adresu proksija.
iproute & ip6tables
#!/bin/sh
# === Brisanje prethodnih podešavanja (ako su postojala) ===========
ip -6 route flush table 64
ip -6 rule del from all fwmark 0x6
ip6tables -t mangle -F
ip6tables -t mangle -X DIVERT
# === Unos nove konfiguracije =====================
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
Vrednosti table 64 i fwmark 0x6 su ovde izabrane proizvoljno; ako u vašem sistemu već postoje višestruke tabele rutiranja i pravila firewall-a koja koriste oznake (na primer, za omogućavanje rada više WAN konekcija), uverite se da ovaj skript ne dolazi u sukob sa već postojećim podešavanjima.
Squid
U /etc/squid3/squid.conf potrebno je dodati:
http_port 8086 tproxy
Kao i u gore opisanom procesu konfiguracije za IPv4, port možete izabrati i neki drugi.
Primenjivanje podešavanja
Da biste primenili izmene u squid.conf, dovoljno je naterati Squid da ponovo pročita taj fajl; na primer, u Debian baziranim distribucijama za to je dovoljno izvršiti /etc/init.d/squid3 reload.
ip/iptables/ip6tables podešavanja stupaju na snagu odmah nakon izvršavanja odgovarajućih komandi. Da biste ih primenjivali pri svakom pokretanju sistema, dodajte ih u vaš skript za firewall (u arno-iptables-firewall koji koristim, korisnička proširenja se mogu upisati u /etc/arno-iptables-firewall/custom-rules), ili ih jednostavno dodajte u /etc/rc.local.
Provera
S bilo kog računara u lokalnoj mreži (ali ne i sa samog servera) izvršite:
curl -I4 http://version6.ru/
curl -I6 http://version6.ru/
U oba slučaja, u izlazu curl-a treba da se pojave sledeće linije:
X-Cache: MISS from vašproxy
X-Cache-Lookup: MISS from vašproxy:port
Ako ih nema, ili se veza ne uspostavlja, nešto nije pravilno podešeno. U slučaju da ne uspete da podesite, pridružite se našem IRC kanalu, možda će neko moći da pomogne.
