Много в интернете есть статей как перенаправить с помощью PF веб-трафик на SQUID. Тема обсуждалась не одну сотню раз.Вопрос! Как перенаправить трафик на SQUID с помощью PF для определенных подсетей?
Обычно в PF создается правило, которые перенаправляет ВЕСЬ трафик на прокси.
Я хочу чтобы трафик на определенные хостинг-ресурсы, чьи подсети я знаю, перенаправлялся из моей клиентской подсети на SQUID, таким образом, чтобы остальные пакеты шли тразитом через внутреннюю таблицу маршрутизации, не попадая на прокси.
Куда копать?
> Много в интернете есть статей как перенаправить с помощью PF веб-трафик на
> SQUID. Тема обсуждалась не одну сотню раз.
> Вопрос! Как перенаправить трафик на SQUID с помощью PF для определенных подсетей?
> Обычно в PF создается правило, которые перенаправляет ВЕСЬ трафик на прокси.
> Я хочу чтобы трафик на определенные хостинг-ресурсы, чьи подсети я знаю, перенаправлялся
> из моей клиентской подсети на SQUID, таким образом, чтобы остальные пакеты
> шли тразитом через внутреннюю таблицу маршрутизации, не попадая на прокси.
> Куда копать?SQUID на сервере где и PF или отдельный сервер?
приблизительно такой будет конфиг:
int_if="em0"
ext_if="em1"-- локальная сеть
lan = "192.168.1.0/24"
-- хостинг сети
nets = "{ 10.8.0.0/16, 192.168.50.0/24 }"
-- сервер squid
squid = "192.168.1.15"rdr on $int_if proto tcp from $lan to $nets port 80 -> $squid port 3128
pass in on $int_if inet proto tcp from $lan to $squid port 3128 keep state
pass out on $ext_if inet proto tcp from $squid to any port 80 keep state
>[оверквотинг удален]
> -- хостинг сети
> nets = "{ 10.8.0.0/16, 192.168.50.0/24 }"
> -- сервер squid
> squid = "192.168.1.15"
> rdr on $int_if proto tcp from $lan to $nets port 80 ->
> $squid port 3128
> pass in on $int_if inet proto tcp from $lan to $squid port
> 3128 keep state
> pass out on $ext_if inet proto tcp from $squid to any port
> 80 keep stateда, SQUID на той железке что и PF
>[оверквотинг удален]
>> nets = "{ 10.8.0.0/16, 192.168.50.0/24 }"
>> -- сервер squid
>> squid = "192.168.1.15"
>> rdr on $int_if proto tcp from $lan to $nets port 80 ->
>> $squid port 3128
>> pass in on $int_if inet proto tcp from $lan to $squid port
>> 3128 keep state
>> pass out on $ext_if inet proto tcp from $squid to any port
>> 80 keep state
> да, SQUID на той железке что и PFтогда значение переменной $squid нужно будет указать 127.0.0.1
>[оверквотинг удален]
>>> -- сервер squid
>>> squid = "192.168.1.15"
>>> rdr on $int_if proto tcp from $lan to $nets port 80 ->
>>> $squid port 3128
>>> pass in on $int_if inet proto tcp from $lan to $squid port
>>> 3128 keep state
>>> pass out on $ext_if inet proto tcp from $squid to any port
>>> 80 keep state
>> да, SQUID на той железке что и PF
> тогда значение переменной $squid нужно будет указать 127.0.0.1такая конфигурация не работает, но после 8 часов потрахушек и изучения документации заработала вот какая конфига PF
int_if="re0"
ext_if="re1"
bridge="bridge0"rdr on $int_if inet proto tcp from any to 213.180.0.0/16 port www -> 127.0.0.1 port 3128
pass in quick on $int_if route-to lo0 inet proto tcp from any to 127.0.0.1 port 3128 keep stateда, забыл сказать, что у меня только 1 IP-адрес и Squid висит на loopback интерфейсе, с чем были связаны ошибки вида:
Invalid URL
Some aspect of the requested URL is incorrect.
Some possible problems are:
Missing or incorrect access protocol (should be "http://" or similar)
Missing hostname
Illegal double-escape in the URL-Path
Illegal character in hostname; underscores are not allowed.
Your cache administrator is root.а в логах сквида ошибки:
WARNING: Forwarding loop detected for:
GET /Artwork/SN.png HTTP/1.1
Host: www.squid-cache.orgпри обращении к любой странице. Исправил заменой
http_port 127.0.0.1:3128
http_port 127.0.0.1:3129 interceptна
http_port 127.0.0.1:3128 accel vhost allow-direct
Может кому поможет.
>>[оверквотинг удален]
>>>> -- сервер squid
> при обращении к любой странице. Исправил заменой
> http_port 127.0.0.1:3128
> http_port 127.0.0.1:3129 intercept
> на
> http_port 127.0.0.1:3128 accel vhost allow-direct
> Может кому поможет.мой конфиг PF рабочий, все зависит какие у вас правила PF для loopback были. вам показали дверь в которую нужно зайти, а идти без света или с светом ваше решение :). рад был помочь
да верно, без accel не заработает. SQUID должен работать в прозрачном режиме в виде акселератора, иначе все зациклится. примерно такими доп. опциями в SQUID:
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
>[оверквотинг удален]
> -- хостинг сети
> nets = "{ 10.8.0.0/16, 192.168.50.0/24 }"
> -- сервер squid
> squid = "192.168.1.15"
> rdr on $int_if proto tcp from $lan to $nets port 80 ->
> $squid port 3128
> pass in on $int_if inet proto tcp from $lan to $squid port
> 3128 keep state
> pass out on $ext_if inet proto tcp from $squid to any port
> 80 keep stateсегодня до сервера доберусь, потестирую, отпишусь