>> freebsd7.3, есть настроенный PF с балансировкой round-robin по двум внешним каналам
>> задача: сделать редирект 80го порта на сквида
>> вообщем все работает, однако никак не могу до конца понять отношения pf
>> и сквида.
>> когда работаем без сквида, то тут видно (по pftop) что пакетики бегут
>> то в один канал то в другой, все нормально, но что
>> происходит когда идет редирект на сквида? куда он дальше шлет пакеты?
>> на шлюз по-умолчанию?
> Если в PFе не указано другого, то да, на шлюз по умолчанию.я видимо не очень понимаю как работает сквид... и вообще прокси-сервер..
вообщем при таком конфиге:
какой путь у пакета с 80м портом назначения?
попадет он под балансировку?
pf.conf:
--------------------------------------------------------
ext_if1="rl0" #внешний интерфейс 1го прова
ext_if2="rl2" #внешний интерфейс 2го прова
ext_gw1="192.168.1.8" #шлюз 1го прова
ext_gw2="192.168.1.8" #шлюз 2го прова
int_if="rl1" #локальный интерфейс
localnet="172.16.1.0/24" #локальная сеть
den_host="172.16.1.2" #моё
set skip on lo0
set loginterface rl0
set loginterface rl1
set loginterface rl2
#нормализация трафа
scrub in all
scrub out all
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
#редирект на сквида
rdr on $int_if proto tcp from $localnet to any port 80 -> 127.0.0.1 port 3128
#натим внешние интерфейсы
nat on $ext_if1 from $int_if:network to any -> ($ext_if1)
nat on $ext_if2 from $int_if:network to any -> ($ext_if2)
#редирект на ftp-proxy
rdr pass on $int_if proto tcp from $den_host to any port {ftp,ftp-data} -> 127.0.0.1 port 8021 #редирект на ftp-proxy
block all #блок всего по-умолчанию
antispoof quick for { lo0 $int_if }
anchor "ftp-proxy/*"
pass out log on $int_if from any to $localnet
#пропускаем все пакеты для шлюза из локали
pass in quick log on $int_if from $localnet to $int_if
#балансировка
pass in route-to { ($ext_if1 $ext_gw1), ($ext_if2 $ext_gw2) } round-robin from $localnet to any
#основные выпускающие правила
pass out log on $ext_if1 proto tcp from any to any flags S/SA modulate state
pass out log on $ext_if1 proto {udp, icmp} from any to any
pass out log on $ext_if2 proto tcp from any to any flags S/SA modulate state
pass out log on $ext_if2 proto {udp, icmp} from any to any
pass out on $ext_if1 route-to ($ext_if2 $ext_gw2) from $ext_if2 to any
pass out on $ext_if2 route-to ($ext_if1 $ext_gw1) from $ext_if1 to any
-----------------------------------------------------------------------------------
squid собран с поддержкой pf-transparent
squid.conf
----------------------------------------------------------------------------------
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl localnet src 172.16.1.0/24 # RFC1918 possible internal network
acl CONNECT method CONNECT
http_access allow manager localhost
#http_access deny manager
http_access allow localnet
http_access allow localhost
http_access deny all
http_port 127.0.0.1:3128 intercept
hierarchy_stoplist cgi-bin ?
cache_dir ufs /usr/local/squid/cache 256 16 256
coredump_dir /usr/local/squid/cache
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
cache_mem 128 MB
maximum_object_size 64 MB
cache_store_log /usr/local/squid/logs/store.log
visible_hostname pavlik
-----------------------------------------------------------------
очень большое желание представлять всю схему досканально :)