На FreeBSD 7.0 стоит Squid 2.6.20 и ipfw.В squid.conf есть (192.168.2.61 - адрес прокси в локалке):
*****
http_port 192.168.2.61:3128 transparent
#http_port 3128 transparent #по сути, аналогично строке выше*****
В ipfw.sh так (естественно, укорочено):
*****
$cmd 0200 divert natd ip from any to any in via $out_if
...
# как только я не извращался...
#$cmd 0202 fwd 127.0.0.1,3128 tcp from $user_IP to any 80 via $out_if
#$cmd 0202 fwd 127.0.0.1,3128 tcp from $user_IP to any 80 recv $local_if
$cmd 0202 fwd 127.0.0.1,3128 tcp from $user_IP to any 80
...
*****При попытке открыть сайт без указания прокси получаю в ответ (в броузере):
*****
ОШИБКА
Запрошенный URL не может быть доставлен.
Во время обработки запроса:
GET /?clid=139085 HTTP/1.1
User-Agent: Opera/9.80 (Windows NT 6.1; U; Yandex Browser; ru)
Host: www.yandex.ru
...
Произошла следующая ошибка:
Неверный запрос.Некоторые аспекты HTTP запроса неправильны. Возможные проблемы:
Отсутствует либо неизвестен метод запроса (GET, POST)
Отсутствует URL
Отсутствует HTTP идентификатор (HTTP/1.0)
Запрос слишком велик
Не указан Content-Length для запросов POST или PUT
Недопустимый символ в имени сервера; подчёркивания недопустимы.
_____
Generated Thu, 03 Feb 2011 07:48:00 GMT by InternetPC (squid/2.6.STABLE20)
*****Т.е. судя по ответу, мои запросы к проксе доходят (т.е. форвардинг работает, Squid получает запрос). Но вот почему вместо сайта я получаю ошибку - не ясно. Если проксю указать вручную, все работает.
ВОПРОС: че я делаю не так?
>[оверквотинг удален]
> Запрос слишком велик
> Не указан Content-Length для запросов POST или PUT
> Недопустимый символ в имени сервера; подчёркивания недопустимы.
> _____
> Generated Thu, 03 Feb 2011 07:48:00 GMT by InternetPC (squid/2.6.STABLE20)
> *****
> Т.е. судя по ответу, мои запросы к проксе доходят (т.е. форвардинг работает,
> Squid получает запрос). Но вот почему вместо сайта я получаю ошибку
> - не ясно. Если проксю указать вручную, все работает.
> ВОПРОС: че я делаю не так?в сквиде
вместо http_port 192.168.2.61:3128 transparent
попробовать http_port 127.0.0.1:3128 transparentили в ipfw
вместо $cmd 0202 fwd 127.0.0.1,3128 tcp from $user_IP to any 80
указать $cmd 0202 fwd 192.168.2.61,3128 tcp from $user_IP to any 80что-то одно из двух ;)
собиралось с поддержкой ipfw?
посмотрите в access.log как записан urlи с ip определитесь
Большое спасибо за комментарии, исправлений оказалось несколько.1. (я в шоке) в squid.conf первой строкой стояло http_port 3128!!! Я в конфиге не заметил (!!!!) первую строку. Естественно, дальше все мои потуги с разными http_port работать не должны были.
2. Перед правилом NAT поставил следующую переадресацию:
*****
# Redirect to local proxy
$cmd 0170 fwd 127.0.0.1,3128 tcp from 192.168.2.0/24 to any 80# NAT
$cmd 0200 divert natd ip from any to any in via $out_if
...
*****Все работает. Еще раз спасибо!