Настройка сквида на уровне нуба - нужна диагностика

yroslavasako

Поставил сквид. Пока хочется, чтобы он просто работал (форвардил). Собрал, сконфижил примитивно (по большей части дефолты запустил на тестовый поюз. Обнаружилось замечательное поведение. Допустим я захожу на баш. Сам баш он открывает, но видимо только то, что содержится непосредственно на странице. Текст появляется, дизайн баша - нет. При этом страница открывается долго-долго и ждёт всякий сторонний трафик вроде yandex.ru (не дожидается по таймауту)
Фрейм с рекламой тоже не загрузился. Нажал открыть фрейм в отдельной вкладке. http://lol.bash.org.ru/_ad.php?zone=zone:3 не открывается, выводится сообщение об ошибке от прокси: Connection Failed, system returned (110) Connection Time Out
Без проксика открывается рекламный фрейм.
Может H&S поставить диагноз по перечисленным симптомам? Я пока читаю мануалы

katrin2201

Логи?
Сквид локальный? У машинки, на которой сквид стоит, точно проблем с инетом никаких нету?
Еще можно попробовать телнетом к сквиду подрубиться, и поспрашивать его так и сяк.

katrin2201

в качестве телепатической догадки могу предложить следующее, хотя на твою проблему и не похоже
Can't connect to some sites through Squid
When using Squid, some sites may give erorrs such as ``(111) Connection refused'' or ``(110) Connection timed out'' although these sites work fine without going through Squid.
Some versions of linux implement Explicit Congestion Notification (ECN) and this can cause some TCP connections to fail when contacting some sites with broken firewalls or broken TCP/IP implementations.
To work around such broken sites you can disable ECN with the following command:
echo 0 > /proc/sys/net/ipv4/tcp_ecn
Found this on the FreeBSD mailing list:
From: Robert Watson
As Bill Fumerola has indicated, and I thought I'd follow up in with a bit more detail, the behavior you're seeing is the result of a bug in the FreeBSD IPFW code. FreeBSD did a direct comparison of the TCP header flag field with an internal field in the IPFW rule description structure. Unfortunately, at some point, someone decided to overload the IPFW rule description structure field to add a flag representing "ESTABLISHED". They used a flag value that was previously unused by the TCP protocol (which doesn't make it safer, just less noticeable). Later, when that flag was allocated for ECN (Endpoint Congestion Notification) in TCP, and Linux began using ECN by default, the packets began to match ESTABLISHED rules regardless of the other TCP header flags. This bug was corrected on the RELENG_4 branch, and security advisory for the bug was released. This was, needless to say, a pretty serious bug, and good example of why you should be very careful to compare only the bits you really mean to, and should seperate packet state from protocol state in management structures, as well as make use of extensive testing to make sure rules actually have the effect you describe.

yroslavasako

сквид - локальный. У машинки проблем с интом нету, она ходит на сайты (80 порт) через другой сквид. Я решил настроить прокси на глобальном уровне, заставил iptables делать прозрачное перенаправление на свой сквид. Обнаружив глюки, потушил iptables и сделал сквиду явный порт (чтобы избежать наведённых багов). Проблема осталась.
А вот предложение посмотреть логи своевременно. Судя по ним (ICP не разрешён) я скорее всего неправильно настроил работу с вышестоящим прокси

yroslavasako

все ошибки в логах победил. Но работать лучше не стало (при этом в логе закаченных всякие яваскрипты и гугл-аналитики есть). Вот только браузер их не получает

family

А конфиг можно полный привести?

yroslavasako

А конфиг можно полный привести?
комменты вырезал.
acl CONNECT method CONNECT
acl localhost src 127.0.0.1/32
acl manager proto cache_object
acl purge method PURGE
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
cache_peer example.proxy.ru parent 3128 7 proxy-only no-query default no-digest
coredump_dir /var/cache/squid
forwarded_for off
hierarchy_stoplist cgi-bin ?
htcp_access allow localnet
htcp_access deny all
http_access allow localhost
http_access allow localnet
http_access deny all
http_access allow manager localhost
http_access allow purge localhost
http_access deny manager
http_access deny purge
http_access deny !Safe_ports
http_port 3128 transparent
http_port 4128
icp_access allow localhost
icp_access allow localnet
icp_access deny all
no_cache deny all
refresh_pattern . 0 20% 4320
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440

yroslavasako

хм, мне казалось я словил достаточно типичный баг. Что-то вроде ограничения на одновременно открытые сессии или около того.
Что проще
1) настроить-таки squid
2) настроить 3proxy на транспарент режим
3) сделать ебилд для стороннего софта, которое умеет это из каробки?

hiper-hoper

а сквид при старте не ругается на отсутсвие localnet и Safe_ports?

yroslavasako

а сквид при старте не ругается на отсутсвие localnet и Safe_ports?
нет. видимо я не весь конфиг вытащил. Завтра напишу греп позабористее и конфиг выдам

YUAL

Обнаружив глюки, потушил iptables
как конкретно потушил иптайблс?
iptables -F
iptables -X
а потом попробуй опять.

hiper-hoper

кстати, было бы неплохо написать версию сквида (ну и, подозревая наличие в треде гентушника, - USE флаги и параметры компиляции).

yroslavasako

как конкретно потушил иптайблс?
иптайблс я тушить умею :)

#!/bin/bash

IPTABLES=/sbin/iptables

$IPTABLES -t nat -F
$IPTABLES -t nat -X
$IPTABLES -t mangle -F
$IPTABLES -t mangle -X
$IPTABLES -t filter -F
$IPTABLES -t filter -X

А raw таблички нету

yroslavasako

вот конфиг целиком:

acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl Safe_ports port 80 # http
acl purge method PURGE
acl CONNECT method CONNECT
http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !Safe_ports
http_access allow localnet
http_access allow localhost
http_access deny all
icp_access allow localnet
icp_access allow localhost
icp_access deny all
htcp_access allow localnet
htcp_access deny all
http_port 3128 transparent
http_port 4128
cache_peer example.proxy.ru parent 3128 7 proxy-only no-query default no-digest
hierarchy_stoplist cgi-bin ?
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern (cgi-bin|\?) 0 0% 0
refresh_pattern . 0 20% 4320
no_cache deny all
forwarded_for off
coredump_dir /var/cache/squid

yroslavasako

кстати, было бы неплохо написать версию сквида (ну и, подозревая наличие в треде гентушника, - USE флаги и параметры компиляции).
1) вывод eix

[I] net-proxy/squid
Available versions: 2.7.6-r2 2.7.7 3.0.18-r1!t 3.0.19!t (~)3.0.20-r1!t [M](~)3.1.0.14_beta [M](~)3.1.0.15_beta-r1!t {caps ecap elibc_uclibc +epoll icap-client ipf-transparent ipv6 kerberos kernel_linux kqueue ldap logrotate mysql nis pam pf-transparent postgres radius samba sasl selinux snmp sqlite ssl test zero-penalty-hit}
Installed versions: 3.0.20-r1!t(13:09:44 05.03.2010caps epoll kerberos kernel_linux ldap mysql pam postgres samba sasl snmp sqlite ssl -elibc_uclibc -icap-client -ipf-transparent -kqueue -logrotate -nis -pf-transparent -radius -selinux -zero-penalty-hit)
Homepage: http://www.squid-cache.org/
Description: A full-featured web proxy cache

как точно узнать какими CFLAGS собиралось не ведаю.

yroslavasako

3) сделать ебилд для стороннего софта, которое умеет это из каробки?
сделал ebuild, написал /etc/conf.d и /etc/init.d для transproxy (tproxy). Работает. А сквид отправился на свалку истории. Посоветовавшись с парой людей, я лишь только узнал "а у меня всё работает, конфиг как конфиг" и понять что же было не так не смог

hiper-hoper

документацию не пробовал почитать?
где
never_direct allow all
?

yroslavasako

мне кажется, что моё поведение было тактически неверным. Если бы я с самого начала написал провокационный пост в стиле squid - гавно, то как мне кажется, получил бы совет гораздо быстрее. Таково свойство человеческой натуры, видимо. Если просишь помощь по хорошему - то тебя игнорируют, а если обосрёшь хорошо знакомое и кем-то любимое, он все силы положит, чтобы доказать обратное.
Но теперь поздно. Если уж я настроил tproxy, то вряд ли от него откажусь, он замечательно делает свою работу: редактирует один заголовок и добавляет ещё один. При этом ресурсов потребляет в разы меньше сквида.
А сквид всё-таки гавно (по крайней мере в том, что относится конфигурации).Посудите сами. Нормальные программы умеют понимать прокси и использовать только его. Хорошие ещё умеют работать со списком исключений (не весь трафик пускают через прокси). И только весьма оригинальные программы имеют дефолтный список исключений, причём ничем логически не обоснованный. Я понимаю если бы ещё этот дефолтный список прописывали в дефолтном конфиге. А вот хрен - при пустом конфиге он всё равно включается. Итого: squid ни хрена не юзер френдли, а писали его маньяки.

hiper-hoper

ну извини, мой друг, вовсе не я виноват в том, что ты не смог сразу выложить весь свой конфиг, как только у меня дошли руки до форума, я так тебе сразу и написал в чем твоя ошибка. а дефолтный параметр для never_direct и always_direct - none и по крайней мере в комментариях к моему конфигу об этом честно сказано.

yroslavasako

да знаю, что сказано.
Но почему он тогда не работает? Почему при том и другом установленном в none, squid применяет хитрую политику дискриминации запросов - что-то отправляет через прокси, что-то пытается закачать сам? Почему в конфиге нет никаких регэкспов или чего-то подобного, благодаря чему сквид решает, для чего использовать исключение в прокси? Это ни хрена не интуитивно. Нужно ещё догадаться, что эту хитрую функциональность нужно отключать.

hiper-hoper

Почему в конфиге нет никаких регэкспов или чего-то подобного, благодаря чему сквид решает, для чего использовать исключение в прокси?
напиши сам - делов-то.
Нужно ещё догадаться, что эту хитрую функциональность нужно отключать.
если бы она была отключена по дефолту, то нашелся бы другой умник, который не прочитав документации сказал бы, что эту функциональность надо ещё догадаться включить.

yroslavasako

если бы она была отключена по дефолту, то нашелся бы другой умник, который не прочитав документации сказал бы, что эту функциональность надо ещё догадаться включить.
ну-ну. Где ты таких встречал? Которые хотят по-дефолту такой странной работы?
По дефолту поведение должно быть упрощено. Если ты указываешь одно проксти, то весь трафик должен идти через него. Если несколько - то уже нужно писать политики разделения трафика.

hiper-hoper

странность - понятие относительное. для меня вот странно ставить прокси на сервер, на котором нет интернета, я же не афиширую это.
ты представь ситуацию - ставит администратор два прокси-сервера, и хочет между ними распределить нагрузку, естественно прописывает в конфиг каждого из них одну проксю.
если при этом каждая из них будет пытаться пройти исключительно через проксю и не будут пытаться пройти напрямую, то от одного единственного запроса оба сервера сдохнут. как ты думаешь, это не будет для админа "странным" поведением?

yroslavasako

странность - понятие относительное. для меня вот странно ставить прокси на сервер, на котором нет интернета, я же не афиширую это.
я же сказал точную задачу: system-wide конфигурация прокси, которая работает на всех веб-клиентах, даже на тех, которые не умеют работать с прокси. Для решения задачи необходимы iptables (есть) и простенький прокси для правки заголовков.

hiper-hoper

ты, судя по всему, болеешь пенартуризмом, поскольку отвечаешь не на мои сообщения, а на выдуманные тобой.
я не говорил что мне неизвестны такие задачи, я сказал что считаю это странным, поскольку по-хорошему нужно конфигурировать ту проксю к которой ты в итоге обращаешься.

yroslavasako

бывают такие удивительные провайдеры, которые не дают конфигурить свою проксю.

hiper-hoper

удивительного провайдера, у которого доступ в интернет только через проксю, причем не прозрачную, надо слать нахуй и надолго.

yroslavasako

во-первых, не в инет, а только на 80 порт.
Во-вторых, он прав - прозрачная прокся это неэтично. Пользователь должен быть предупреждён.

hiper-hoper

и много ты знаешь приложений, которые можно настроить так чтобы они ходили на 80-й порт с проксей а на остальные - без нее (без хитровыебанного способа с установкой локального прозрачного прокси)?
а если у пользователя не PC, на котором такая проблема пусть и с некоторомы геморроем, но решается, а девайс (например PS3, xbox) в котором производитель не учел таких хитрожопых провайдеров и не встроил в них кнопку "ходить на 80-й порт через прокси, на остальные - через вот этот гейт", что ему делать?
и учитывыя все это для тебя дефолтное поведение сквида - "странно", а предупредить пользователя пунктом в договоре - "неэтично"? да вы, батенька, пенартур.

yroslavasako

в чём проблема? прокси не только 80 порт отдавать может. Просто перекрыт именно 80. И 25 кажись. И я знаю множество приложений, которые умеют работать через http прокси. Даже в говняном ff есть настройки отдельно по протоколам.
Прозрачная прокси понадобилось для приложения которое в принципе что это такое не знает. Большинство приставок о существовании прокси осведомлены.

hiper-hoper

Даже в говняном ff есть настройки отдельно по протоколам.
ты опять отвечаешь на вопросы, которые я не задавал - не по протоколам, а по портам.

yroslavasako

насчёт портов я уже написал. Закрыт только 80
Оставить комментарий
Имя или ник:
Комментарий: