LINUX.ORG.RU
ФорумAdmin

Squid 3.1.0.15 с Tproxy не работает правильно


0

1

Настроил (по этой статье http://www.bloggik.net/index.php/articles/2010-05-26-14-30-42/18-cisco/38-squ... ) как мне показалось tproxy v4 + squid 3.1.0.15 + linux-2.6.30-gentoo-r4 + iptables 1.4.3.2, и выяснилось, что сквид не пишет в access.log. (про сквид подробнее squid -v: http://paste.org.ru/?m7xsd5)

Начал копать дальше - нагуглил переписку разрабов с таким же горемыкой как и я: http://www.squid-cache.org/mail-archive/squid-users/200903/0535.html. Додумались до того, что запросы не проходят через сквид.

Проверял правила

 acl Deny_mailru dstdomain mail.ru
 acl PATRI0T src 192.168.5.50
 http_access deny PATRI0T Deny_mail
- они не работают, когда клиент через tproxy. (при обычном, transparent режиме, все нормально) При этом, если сквид остановить, то tproxy клиент не работает. Странновато, правда? Также, при работе через tproxy nethogs показывает, что трафик идет не от сквида, а через ядро-netfilter (ИМХО) - pid 0, root, приложение неизвестно.

Конфиг iptables

$IPT -P INPUT ACCEPT
$IPT -P FORWARD ACCEPT
$IPT -P OUTPUT ACCEPT

$IPT -t mangle -N DIVERT
$IPT -t mangle -A DIVERT -j MARK --set-mark 1
$IPT -t mangle -A DIVERT -j ACCEPT

$IPT -t mangle -A PREROUTING -s 192.168.5.50 -p tcp -m socket -j DIVERT
$IPT -t mangle -A PREROUTING -s 192.168.5.50 -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 3129 --on-ip 192.168.200.2
$IPT -A FORWARD -s 192.168.5.50  -j ACCEPT
$IPT -A POSTROUTING -t nat -s 192.168.5.50 -j SNAT --to-source $RUNNET

acl localhost src 127.0.0.1/32
acl localnet src 10.0.0.0/8
http_access allow all
http_access allow localnet
http_access allow localhost
http_port 192.168.200.2:3128 intercept
http_port 192.168.200.2:3129 tproxy
cache_effective_user squid
cache_effective_group squid
cache_dir ufs /opt/squid/var/cache/squid 10240 16 256
access_log /opt/squid/var/logs/access.log squid
cache_log /opt/squid/var/logs/cache.log
cache_store_log /opt/squid/var/logs/store.log
coredump_dir /opt/squid/var/cache/squid
error_directory /opt/squid/etc/errors/Russian-1251
icon_directory /opt/squid/etc/icons
visible_hostname -=Proxy=-

wccp2_router 10.80.2.1
wccp_version 2
wccp2_rebuild_wait on
wccp2_forwarding_method 1
wccp2_return_method 1
wccp2_service standard 0
wccp2_service dynamic 80
wccp2_service dynamic 90
wccp2_service_info 80 protocol=tcp flags=src_ip_hash priority=240 ports=80
wccp2_service_info 90 protocol=tcp flags=dst_ip_hash,ports_source priority=240 ports=80

hierarchy_stoplist cgi-bin ?
coredump_dir /usr/local/squid/var/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

Какие могут быть идеи? Корявый модуль Tproxy? не тот сквид? Не то ядро? Iptables?


Бегло просмотрел твои настройки. Ошибки вроде бы нет. Так что попробуй обновлять по очереди: tproxy, kernel, iptables и на последок сквид. Больше дельных мыслей нет :)

Superuser9
()

А всё остальное отрабатывает нормально? Пакеты на GRE туннеле есть? на маршрутизаторе show ip wccp, счётчик пакетов увеличивается?? В iptables счётчик пакетов увеличивается?

bordac
()
Ответ на: комментарий от bordac

Нет, у меня GRE туннеля вообще нет. У меня более простая схема, чем у вас в статье. Локальная сеть университета, много пользователей, нужен кеширующий прокси сервер + справедливый дележ трафика. До этого все было просто: прозрачное проксирование через сквид, в результате - сквид сам жрал столько, сколько хотел, не было правильного распределения полосы. Теперь с Tproxy думал попробовать сделать все по честному. Т.е. еще раз, у меня схема «Локальная сеть» - Прокси сервер(и файрволл на одной машине ) - Интернет. Думаю, что какая-то проблема либо в ядре, либо в модуле Tproxy, потому что ну очень как-то странно лагает.

Никто не в курсе, как именно работает Tproxy? что он делает с пакетами, что сквид потом на них реагирует соответствующим образом?

PATRI0T
() автор топика
Ответ на: комментарий от bordac

PS. Обновил squid до 3.1.6 - не помогло. Копаю дальше

PATRI0T
() автор топика
Ответ на: комментарий от PATRI0T

А, я понял. Вы хотите настроить сквид, чтобы он каждому приватному ip-адресу выдавал равный канал. Верно? А если нат делать не на этой-же машине, работать будет? Проверяли?

bordac
()
Ответ на: комментарий от bordac

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

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

anonymous
()
Ответ на: комментарий от bordac

Да, правила для пакетов отрабатывают правильно. Проблема в том, что пакеты вообще не перенаправляются в цепочку INPUT. Они все идут через FORWARD. Самое странное, что когда сквид вырублен, пакеты, которые идут как-бы через tproxy не доходят до интернета.. (Соответственно, их нет в цепочке Forward) вот с этим и не знаю, что делать. :(

PATRI0T
() автор топика
Ответ на: комментарий от PATRI0T

Столкнулся с такой же проблемой. Вам как нибудь удалось ее побороть?

jamaica
()

У меня получилось настроить TPROXY примерно следующим образом. Маршруты:

ip rule add fwmark 1 lookup 100
ip route add local 0.0.0.0/0 dev lo table 100

Выключение проверки пакетов на соответствие маршрутам:
sysctl -w net.ipv4.conf.lo.rp_filter=0

В конфиге squid'а:

http_port 3128 tproxy
Минимальный рабочий конфиг iptables (скармливать в iptables-restore):
###########################################################################
# RAW TABLE
###########################################################################
*raw
:PREROUTING ACCEPT
:OUTPUT ACCEPT
COMMIT

###########################################################################
# NAT TABLE
###########################################################################
*nat
:PREROUTING ACCEPT
:POSTROUTING ACCEPT
:OUTPUT ACCEPT

# NAT to internet
-A POSTROUTING -o ethisp -j MASQUERADE --random

COMMIT

###########################################################################
# MANGLE TABLE
###########################################################################
*mangle
:PREROUTING ACCEPT
:INPUT ACCEPT
:FORWARD ACCEPT
:OUTPUT ACCEPT
:POSTROUTING ACCEPT

:prevent_tproxy_loop - # Chafin for Squid TPROXY

# Squid with TPROXY
-A prevent_tproxy_loop -j MARK --set-mark 1
-A prevent_tproxy_loop -j ACCEPT
-A PREROUTING -p tcp -m socket -j prevent_tproxy_loop
-A PREROUTING -p tcp -m tcp --dport 80 -j TPROXY --tproxy-mark 1 --on-port 3128

COMMIT

###########################################################################
# FILTER TABLE
###########################################################################
*filter
:INPUT ACCEPT
:FORWARD ACCEPT
:OUTPUT ACCEPT

COMMIT
Работает на squid 3.1.6, kernel 2.6.32, iptables 1.4.4.

Правда я ещё не победил другую проблему: если вместо обычного интерфейса в локалку смотрит мост (например lan + wlan), то всё это не работает по неизвестным причинам. Как будет время - хочу потыкать на эту тему разработчиков.

Deleted
()
Ответ на: комментарий от Deleted

>-A POSTROUTING -o ethisp -j MASQUERADE --random Вроде как после этого уже и tproxy не нужен, ибо любой сервис по определению ip палит адрес squid'а. Интересно именно чтобы прокся была совсем прозрачная.

jamaica
()
Ответ на: комментарий от Deleted

Очень интересно...

Очень интересно.. Можно даже сказать «Нихрена не понятно» :) Ибо тут http://wiki.squid-cache.org/Features/Tproxy4#Minimum_Requirements пишут, что с 2.6.32 ядром наблюдаются траблы, а увас однако оно все работает.. Ну да ладно. Я взял другую машину, на ней Угунта 9.10 , воткнул на нее 31 ядро, и TProxy заработал как надо, правда до конца не довел, но уже пакеты до сквида попадали..
Плюс обнаружил в логе скрипта configure.sh (сквидовый который) сообщения, что c TProxy нам ничего не обломится:

сonfigure:25798: checking for linux/netfilter_ipv4/ip_tproxy.h
configure:25852: g++ -c -g -O2  conftest.cpp >&5
conftest.cpp:197:44: error: linux/netfilter_ipv4/ip_tproxy.h: No such file or directory

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

PATRI0T
() автор топика
Ответ на: Очень интересно... от PATRI0T

cat configure.log

Сейчас повнимательнее посмотрел на лог скрипта configure.sh, нехило так офигел..

cat config.log | grep -i -e 'such file'
conftest.c:11:28: error: ac_nonexistent.h: No such file or directory
conftest.c:11:28: error: ac_nonexistent.h: No such file or directory
conftest.cpp:22:28: error: ac_nonexistent.h: No such file or directory
conftest.cpp:22:28: error: ac_nonexistent.h: No such file or directory
conftest.cpp:76:16: error: dl.h: No such file or directory
conftest.cpp:76:20: error: sys/dl.h: No such file or directory
conftest.cpp:76:17: error: dld.h: No such file or directory
conftest.cpp:76:25: error: mach-o/dyld.h: No such file or directory
conftest.cpp:115:18: error: sasl.h: No such file or directory
conftest.cpp:82:18: error: sasl.h: No such file or directory
conftest.c:84:28: error: ac_nonexistent.h: No such file or directory
conftest.cpp:122:21: error: bstring.h: No such file or directory
conftest.cpp:89:21: error: bstring.h: No such file or directory
conftest.cpp:132:23: error: gnumalloc.h: No such file or directory
conftest.cpp:99:23: error: gnumalloc.h: No such file or directory
conftest.cpp:136:23: error: ip_compat.h: No such file or directory
conftest.cpp:103:23: error: ip_compat.h: No such file or directory
conftest.cpp:136:27: error: ip_fil_compat.h: No such file or directory
conftest.cpp:103:27: error: ip_fil_compat.h: No such file or directory
conftest.cpp:136:20: error: ip_fil.h: No such file or directory
conftest.cpp:103:20: error: ip_fil.h: No such file or directory
conftest.cpp:136:20: error: ip_nat.h: No such file or directory
conftest.cpp:103:20: error: ip_nat.h: No such file or directory
conftest.cpp:136:17: error: ipl.h: No such file or directory
conftest.cpp:103:17: error: ipl.h: No such file or directory
conftest.cpp:136:18: error: libc.h: No such file or directory
conftest.cpp:103:18: error: libc.h: No such file or directory
conftest.cpp:140:31: error: machine/byte_swap.h: No such file or directory
conftest.cpp:107:31: error: machine/byte_swap.h: No such file or directory
conftest.cpp:143:19: error: mount.h: No such file or directory
conftest.cpp:110:19: error: mount.h: No such file or directory
conftest.cpp:146:35: error: netinet/ip_fil_compat.h: No such file or directory
conftest.cpp:113:35: error: netinet/ip_fil_compat.h: No such file or directory
conftest.cpp:171:23: error: sys/bswap.h: No such file or directory
conftest.cpp:138:23: error: sys/bswap.h: No such file or directory
conftest.cpp:171:24: error: sys/endian.h: No such file or directory
conftest.cpp:138:24: error: sys/endian.h: No such file or directory
conftest.cpp:175:21: error: sys/md5.h: No such file or directory
conftest.cpp:142:21: error: sys/md5.h: No such file or directory
conftest.cpp:193:18: error: glib.h: No such file or directory
conftest.cpp:160:18: error: glib.h: No such file or directory
conftest.cpp:201:44: error: linux/netfilter_ipv4/ip_tproxy.h: No such file or directory
conftest.cpp:225:31: error: netinet/ip_compat.h: No such file or directory
conftest.cpp:225:28: error: netinet/ip_fil.h: No such file or directory
conftest.cpp:226:25: error: netinet/ipl.h: No such file or directory
conftest.cpp:226:28: error: netinet/ip_nat.h: No such file or directory
conftest.cpp:226:26: error: net/pf/pfvar.h: No such file or directory
conftest.cpp:226:23: error: net/pfvar.h: No such file or directory

Не подскажите, что это может быть? linux-headers 2.6.30-r1, ядро 2.6.30-r4 - это влияет?

PATRI0T
() автор топика
Ответ на: cat configure.log от PATRI0T

А у кого заработал tproxy, покажите ваш configure.log на предмет ошибок.. Может это от системы зависит.

PATRI0T
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.