Jump to content

fernir

Muggles
  • Posts

    26
  • Joined

  • Last visited

Everything posted by fernir

  1. Вопрос номер раз: Политика по умолчанию в INPUT OUTPUT FORWARD? Логично что она будет DROP, но всетаки. Да, я видел в основном скрипте файрвола, но всетаки. Просто ты принудительно прописываешь пользователю DROP, а поидее хватает дефолтных политик. Просто вот это: iptables -I FORWARD -i $eth_local -s $ip -j DROP iptables -I FORWARD -o $eth_local -d $ip -j DROP Никак не влияет на соединение с проксей. Посомтри, где может быть утечка... watch -n1 'netstat -a -n -p -t | grep 10.0.0.13 & netstat-nat -n | grep 10.0.0.13 & iptables -L -v -n -x | grep 10.0.0.13' Чтонибудь типа вот этого... Покажи кусок выхлопа tcpdump, непонятно через что именно юзер тянет. Смутные подозрения в области прозрачности прокчика...
  2. Сколько юзеров ты хочешь к сети подключить? Если один дом - то свич на чердак и провода до каждого пользователя. Если весь город - то подумай о финансовой целессобразности. Подключение одного удаленного узера может обойтись довольно дорого... По твоим вопросам: 1) Сервер - смотря какой. Если файлопомойка - то пень-4 проц, оперативки гиг-два, винтов побольше в рейд-5 или 6. Ибо винты могут навернуться под нагрузкой. Пару гигабитных сетевух в совместный (а лучше асинхронный) режим. Выделенный сервак для игрушек - проц нужен будет пошустрее, оперативы еще больше. Тут смотерть что будет крутиться. Шлюз в интернет - сильно зависит от количества пользователей, и от того что там еще будет крутиться. Если сотка юзеров и страничка со статистикой - то третьего пенька с 256-384 рамы хватит. Если довесить сквида, пару юзерских сайтов, и пользователей пару сотен - будет тормозить. Имхо неплохой дешевый вариант - двухпроцессорная серверная мать - пень-3. У нас стоит и довольно неплохо тянет. 2) Свичи. На пул серверов - гигабитный свич. Можно D-LINK, ибо распостранены, и достаточно надежны. Бери сразу 24-х портовый, ибо хозяйство разрастется. Не забудь про охлаждение, ибо. Юзерам в дома (если домов будет несколько) - 100-мбитные, с 1-м г-битным портом. Итого - до свичей юзерских идет г-бит, юзерам - 100мбит. 3) ОС - а что ты знаешь? Если ты совсем не знаешь линух - то он тебе не по силам. Придется платить или дяде биллу, или тому кто настроит. Можешь посидеть поучиться сам, но это время... Я бы попробовал поучить... Не так все сложно, ка кажется по началу... Выбор дистрибутива. Лучший дистрибутив линукса - тот который исповедует твой ближайший линукс-гуру. Главное чтобы поначалу было у кого что спросить. Или чтобы ктото настроил все изначально. Если есть только интернет - то самые приятные сообщества имхо у генты (gentoo) и дебиана (debian). Общество убунтоидов (ubuntu) довольно большое, но не смотря на популярность там очень много начинающих пользователей, и гуру - маловато (очень ИМХО). Сусю (Suse), мандриву (Mandriva) и т.д. на сервак - не советую. Десктопное оно. Федору или RedHat - можно впринципе, но у меня руки не доходят попробовать их свежие дистры, поэтому оценить их не могу, но Фирма за их спинами стоит серьезная. 4) Запрос в гугл - домовые сети. http://ru.wikipedia.org/wiki/%D0%94%D0%BE%...%B5%D1%82%D1%8C Тут внизу ссылки есть. http://www.homenetworks.ru/ http://x15.ru/ - это будни. Это - крик души сете-домоводов.
  3. Патчей нет, а куда корка ляжет?
  4. Гента, 1,8 атлонХп, 256 рам, 40-50 юзеров. stg-2.405.9.8 валится вот с такими вот письменами (собран с дебагом): ping.cpp > 11:19:08 > pinger.DelIP 0.0.0.0 ping.cpp > 11:19:08 > pingerCurrIP.AddIP 10.0.0.78 user.cpp > 11:19:08 > USER::WriteStat user=Ibragim inetaccess.cpp > 11:19:08 > Min8(sizeof(ALIVE_SYN)) = 368 inetaccess.cpp > 11:19:08 > 1212131990.928739 368 bytes sent to 10.0.0.78:5555 len=368 inetaccess.cpp > 11:19:08 > Monitor time 1212079955 1212132008 inetaccess.cpp > 11:19:08 > recv from 10.0.1.133 5555 len=64 inetaccess.cpp > 11:19:08 > User OliaSh FOUND! inetaccess.cpp > 11:19:08 > ======================> InitEncrypt dont needed inetaccess.cpp > 11:19:08 > Monitor time 1212079955 1212132008 inetaccess.cpp > 11:19:08 > recv from 10.0.0.40 5555 len=64 inetaccess.cpp > 11:19:08 > User Tarubarova FOUND! inetaccess.cpp > 11:19:08 > ======================> InitEncrypt dont needed inetaccess.cpp > 11:19:08 > CONN_ACK inetaccess.cpp > 11:19:08 > rnd = 682568960 connAck->rnd=682568961 inetaccess.cpp > 11:19:08 > Min8(sizeof(ALIVE_SYN)) = 368 inetaccess.cpp > 11:19:08 > 1212131990.929062 368 bytes sent to 10.0.0.40:5555 len=368 inetaccess.cpp > 11:19:08 > Monitor time 1212079955 1212132008 inetaccess.cpp > 11:19:08 > recv from 10.0.3.13 5555 len=64 inetaccess.cpp > 11:19:08 > User trio FOUND! inetaccess.cpp > 11:19:08 > ======================> InitEncrypt dont needed inetaccess.cpp > 11:19:08 > CONN_ACK inetaccess.cpp > 11:19:08 > rnd = 116568813 connAck->rnd=116568814 inetaccess.cpp > 11:19:08 > Min8(sizeof(ALIVE_SYN)) = 368 inetaccess.cpp > 11:19:08 > 1212131990.930713 368 bytes sent to 10.0.3.13:5555 len=368 inetaccess.cpp > 11:19:08 > Monitor time 1212079955 1212132008 user.cpp > 11:19:08 > USER::WriteStat user=hellstad inetaccess.cpp > 11:19:08 > recv from 10.0.1.152 5555 len=64 inetaccess.cpp > 11:19:08 > User BarsovaA FOUND! inetaccess.cpp > 11:19:08 > ======================> InitEncrypt dont needed inetaccess.cpp > 11:19:08 > CONN_ACK inetaccess.cpp > 11:19:08 > rnd = 283691498 connAck->rnd=283691499 users.cpp > 11:19:08 > Add IP Idx traffcounter.cpp > 11:19:08 > AddUser: BarsovaA ping.cpp > 11:19:08 > pinger.DelIP 0.0.0.0 ping.cpp > 11:19:08 > pingerCurrIP.AddIP 10.0.1.152 Ошибка сегментирования В /var/log/stargazer.log следущее: 2008-05-29 20:53:35 -- Stg v. Stg 2.404 2008-05-29 20:53:35 -- Message queue created successfully. msgKey=5555 msgID=2031616 2008-05-29 20:53:35 -- Timer thread started successfully. 2008-05-29 20:53:35 -- Storage plugin: mysql_store v.0.67. Loading successfull. 2008-05-29 20:53:35 -- Users started successfully. 2008-05-29 20:53:35 -- Traffcounter started successfully. 2008-05-29 20:53:35 -- Module: 'ipq_cap v.1.1'. Start successfull. 0 2008-05-29 20:53:35 -- Module: 'InetAccess authorizator v.1.2'. Start successfull. 50 2008-05-29 20:53:35 -- Module: 'Always Online authorizator v.1.0'. Start successfull. 70 2008-05-29 20:53:37 -- Module: 'Pinger v.1.01'. Start successfull. 100 2008-05-29 20:53:37 -- Module: 'Stg configurator v.0.07'. Start successfull. 220 2008-05-29 20:53:37 -- Stg started successfully. 2008-05-29 20:53:37 -- +++++++++++++++++++++++++++++++++++++++++++++ 2008-05-30 09:29:56 -- User's connect failed. IP '10.0.0.29'. Wrong login or password 2008-05-30 10:29:44 -- User's connect failed. IP '10.0.0.81'. Wrong login or password 2008-05-30 11:35:41 -- Stg v. Stg 2.404 2008-05-30 11:35:41 -- Message queue created successfully. msgKey=5555 msgID=2064384 2008-05-30 11:35:41 -- Timer thread started successfully. 2008-05-30 11:35:41 -- Storage plugin: mysql_store v.0.67. Loading successfull. 2008-05-30 11:35:41 -- Users started successfully. 2008-05-30 11:35:41 -- Traffcounter started successfully. 2008-05-30 11:35:41 -- Module: 'ipq_cap v.1.1'. Start successfull. 0 2008-05-30 11:35:41 -- Module: 'InetAccess authorizator v.1.2'. Start successfull. 50 2008-05-30 11:35:41 -- Module: 'Always Online authorizator v.1.0'. Start successfull. 70 2008-05-30 11:35:41 -- Module: 'Pinger v.1.01'. Start successfull. 100 2008-05-30 11:35:41 -- Module: 'Stg configurator v.0.07'. Start successfull. 220 2008-05-30 11:35:42 -- Stg started successfully. Куда можно покопать?
  5. Ты через cap_ether или cap_ipq считаешь?
  6. Ну... нужно слепить авторизатор для сквида. Авторизатор выглядит как висящий процесс, которому время от времени кидают логин и пароль в stdin. Он должен ответить OK или ERR. gate squid # cat auth.sh #!/bin/bash ## Авторизатор squid на БД stargazer'а PrintBases () { ./stga.sh $line } if [ $# -gt 0 ] then PrintBases "$@" else # чтение со stdin while read line do PrintBases $line done fi gate squid # cat stga.sh #!/bin/bash LOGIN=$1 PASSW=$2 ANSW='ERR' DBS=`cat /var/stargazer/users/$LOGIN/conf` for b in $DBS ; do if [ "$b" = "Password=$2" ]; then ANSW="OK" fi done echo $ANSW auth представить сквиду в качестве авторизатора. Это еще на текстовую БД, на мускул лучше переписать на перле.
  7. А не предвидется-ли в ближайшее время написание модуля (патчика?) для хранения юзверей в каталогах ldap или на крайний случай AD (samba)? Т.е. статистика пользователей, их траффик в mysql (firebird), а логины-пароли в лдапе? Имхо фича тоже довольно востребована, особенно в организациях. Создавать юзерам по 2-3 учетки лениво (юзерам хотябы один пароль запомнить), хочется все в лдап запихнуть.
  8. Шлюз и днс. DNS - или поднять свой, или твоего провайдера. Шлюз - сам сервак старгейзера. Сквид в режиме прозрачного проксирования - http://local.com.ua/forum/index.php?showtopic=10991 тут посмотри.
  9. У меня на двух шлюзах стоят, экономия от 17 до 25%. refresh_pattern пока не трогал. Сквид 3.1_rc1. refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern . 0 20% 4320 cache_replacement_policy lru memory_replacement_policy lru
  10. кинул, лови
  11. Можно пример как оно у тебя так получается? Прозрачное проксирование (как я это понимаю) - все HTTP запросы скрытно от юзера заворачиваются на проксю, т.е. : iptables -t nat -A PREROUTING -s $userip -d ! $lanip -p tcp -m multiport --dport 80,81,82,83,88,8000,8001,8002,8080,8081 -j DNAT --to-destination ".$proxy.":3128 Преобразование в PREROUTING. Траффик еще не дошел до правила QUEUE, и не попал в cap_ipq, и соотв еще не обработался старгейзером. Старгейзер, если посмотреть detailstat обсчитывает общение с инетом, как общение с проксей. Alferov, то что ты говоришь, может быть правдой, если прозрачный проксик стоит отдельно, между шлюзом с stg и интернетом, тогда старгейзер действительно не сделает разницы между NAT интернетом, и обработаным проксей. Но всеравно, я бы вписал в правила стг считать общение с проксей интернетом, ибо юзеры могут пронюхать ип-порт. А в чем заключается разница? Разница будет в суммарный размер страниц сообщений об ошибках, которые увидит юзер (из тех что генерит сквид), да в размер иконок (типа папок и типов файлов при посещении фтп). Если ты имеешь ввиду траффик на локальные сайты, типа апача статистики и т.д., это легко решается методами iptables, например вот так: 1) В таблице PREROUTING завернуть все (80,81,82,83,88,8000,8001,8002,8080,8081) запросы в свежесозданную цепочку http (прим. Если например сервер статистики находится в локальной сети пользователся, то он может сам общаться с ним, не прибегая к использованию шлюза. В случае с vpn это не покатит - весь пусть даже локальный траффик пойдет через шлюз) 2) Цепочку http построчно разбирать: а) На сервер статистики, который юзер не видит в локалке? DNAT -> на сервер локалки. б) На хоум-паги пользователей (внутри локалки)? DNAT - тудаже. в) destination address не локалка? Отдать на растерзание сквиду. Для а и б нужно в файрволе прописать чтото вида: iptables -t filter -A FORWARD -p tcp -s $localnet -d $localnet -m multiport ! --dport 3128 -j ACCEPT И как старгейзер, который не рзбирает пакеты, узнает для кого сквид берет этот пакет? У траффика сквида адрес запроса - твой сервер, получатель - сайт. Какому пользователю что отдать, это уже знает сам сквид... Траффик от юзеров сначала обрабатывается iptables, и принимается решение о том куда он пойдет, и только потом его обсчитывает старгейзер. То что должно пойти в локалку (игры, обменник), пойдет в локалку. А по пути его осчитает сквид по тарифу. Траффик, идущий в интернет поделится на 2 части - то что пойдет натом (аська, on-line игры...) посчитается старгейзером и уйдет в интернет, который предназначен сквиду посчитается stg и только потом попадет к нему. А вот например DNS запоросы от твоего собственного сервера, и обновления которые качет сам сервак, к stg не попадут. Точнее они могут быть пропущены через QUEUE, но stg не обратит на них внимания, и спокойно подпишет им ACCEPT. Этот траффик можно посчитать средствами iptables, запихнув каждый из таких сервисов в отдельную цепочку.
  12. См мой пост выше - Разрешается общаться с локалкой, _кроме_ порта 3128. Соотв в OnConnect OnDisconect разрешаем общаться с проксей. iptables -t filter -A INPUT -i $iface_lan -p tcp -s $localnet -m multiport ! --dport 3128 -j ACCEPT iptables -t filter -A OUTPUT -o $iface_lan -p tcp -d $localnet -m multiport ! --sport 3128 -j ACCEPT iptables -t filter -A INPUT -i $iface_lan -p udp -s $localnet -m multiport ! --dport 3128 -j ACCEPT iptables -t filter -A OUTPUT -o $iface_lan -p udp -d $localnet -m multiport ! --sport 3128 -j ACCEPT В /etc/stargazer/rules TCP 10.0.0.9/32:3128 DIR1 TCP 10.0.0.10/32:3128 DIR1 TCP 10.0.0.242/32:3128 DIR1 TCP 10.0.0.249/32:3128 DIR1 ALL 10.0.0.0/21 DIR0 ALL 192.168.1.0/24 DIR0 ALL 0.0.0.0/0 DIR1 Порт проксика приравнять к интернету. И все - прокся считается интернетом, и общитыватся stargazer'ом
  13. Нууу... Напрмер вот так: Создаем БД в mysql: ip,user,url,bytes,host,trans - и т.д. (Читаем squid.conf про формат файла access.log, и добавляем нужные нам поля - user, host). Создаем таблицу соответствий now (ip=user) - которую поддерживают в актуальном состоянии скрипты OnConnect, OnDisconnect. Создаем трубу (pipe) mkfifo в /var/log/squid/access.log Запускаем скрипт (./s2m < /var/log/squid/access.log), который будет с одной стороны трубы ловить идущий в него поток. Запускаем сквид. Сквид пихает в лог строки, мы это дела разбираем, и тутже кладем в БД. (Долго искал патчик на сквида, чтоб сразу писал в БД, не нашел.) #!/usr/bin/perl use DBI; use DBI::DBD; use Time::localtime; use Data::Dump qw(dump); $dbh=DBI->connect('DBI:mysql:traffics','_USER_','_PASS_'); open(FBLOG,">>"."/tmp/squid-desynchro.log"); open(FBERR,">>"."/tmp/squid-sql-errs.txt"); load_type (); check_now (); $typeid=0; my @type; while(<>) { $original=$_; ($time, $resp_time, $userip, $method, $bytes, $metod, $url , $user, $trans, $type) = split (" ", $original); $url=~s/\"/'``'/egs; $url=~s/\"/'``'/egs; $typen=typer(); $namen=namer(); ($time,$msec)= split (/\./,$time ); check_now (); $act = time(); $delta=$act-$time; #print $delta."\n"; #print $time-$act."\n"; #print $url."\n"; host (); if ( $delta > 3) { print FBLOG $delta." ".$original; } else { #print $original."\n"; namer(); #$sql = "INSERT INTO squid (ip,bytes,link,trans,time,type,user) SELECT '$userip','$bytes','$url','$trans',from_unixtime('$time'),'$typen',now.`username` from now where now.`ip`='$userip'"; $sql = "INSERT INTO squid (ip,bytes,link,trans,time,type,user,host,proto) VALUES ( '$userip','$bytes',\"$url\",'$trans',from_unixtime('$time'),'$typen','$namen','$host','$prota')"; print $sql."\n"; my $sth = $dbh->prepare( $sql ); if ($sth->execute()) { } else { #system "echo $sql >> /tmp/squid-sql-errs.txt"; print FBERR $sql.";\n"; } }} $dbh->disconnect(); close(FBLOG); exit(); sub check_now { $sql = "SELECT UPDATE_TIME FROM information_schema.TABLES where TABLE_NAME='squid'"; my $sth = $dbh->prepare( $sql ); $sth->execute(); $ch_now=$sth->fetchrow_array; #print $update_now." -> ".$ch_now."\n"; if ($update_now eq $ch_now) { } else { #print $update_now." -> ".$ch_now."\n"; $update_now=$ch_now; }} sub read_now { } sub typer () { $type_n=''; for(my $i=0; $i<= $#type;$i++){ if (${$type[$i]}{'type'} eq $type) { $type_n=${$type[$i]}{'id'}; }} if ($type_n eq '') { $sql = "INSERT INTO content (type) VALUES ('$type')"; my $sth = $dbh->prepare( $sql ); $sth->execute(); load_type(); for(my $i=0; $i<= $#type;$i++){ if (${$type[$i]}{'type'} eq $type) { $type_n=${$type[$i]}{'id'}; }}} return $type_n; } sub load_type () { @type=''; $sql = "SELECT * FROM content"; my $sth = $dbh->prepare( $sql ); $sth->execute(); while (@temp=$sth->fetchrow_array) { push @type,{'id'=>$temp[0],'type'=>$temp[1]};} #dump @type; } sub namer () { $sql = "SELECT username FROM now where ip='$userip'"; my $sth = $dbh->prepare( $sql ); if ($sth->execute()){ if ($name_n=$sth->fetchrow_array) {} else { $name_n='name-not-found'; }} else { $name_n='name-not-found'; } return $name_n; } sub host () { my @matches = ('/'); $url =~ /(@matches)/; if ($1 eq '/') { ($prota, $urle) = split ("://", $url); ($host, $temp) = split ("/", $urle); $host=~s/www./''/egs; $prota=~s/ftp/'1'/egs; $prota=~s/http/'2'/egs; } else { $host=$url; $prota="0"; } #print $prota." ".$host."\n"; } Код несколько коряв, но работает. Если интересно, могу выложить все свое самописное, On(Dis)connect, rules, структуру правил файрвола и слепки БД. В результате в БД напротив каждого url, bytes помимо ip есть username. По нему можно делать выборку. Красивых .php пока не написал (и некрасивых тоже). Будет время - поставлю себе творение Алферова, и может добавлю туда логи сквида и топ сайтов.
  14. Ну примерно вот так: server0=10.0.0.9 ProxyIP=10.0.0.9 # Поменяй на свои iface_lan=eth0 localnet=10.0.0.0/21 iptables -t filter -A INPUT -i $iface_lan -p tcp -s $localnet -m multiport ! --dport 3128 -j ACCEPT iptables -t filter -A OUTPUT -o $iface_lan -p tcp -d $localnet -m multiport ! --sport 3128 -j ACCEPT iptables -t filter -A INPUT -i $iface_lan -p udp -s $localnet -m multiport ! --dport 3128 -j ACCEPT iptables -t filter -A OUTPUT -o $iface_lan -p udp -d $localnet -m multiport ! --sport 3128 -j ACCEPT Разрешаем общаться с локалкой, кроме портов прокей. В rules - указываем: TCP 10.0.0.9/32:3128 DIR1 ALL 10.0.0.0/21 DIR0 ALL 192.168.1.0/24 DIR0 ALL 0.0.0.0/0 DIR1 Соотв DIR1 - интернет, DIR0 - локалка. iptables -t nat -A PREROUTING -s $localnet -d ! $server0 -p tcp -m multiport --dport 80,81,82,83,88,8000,8001,8002,8080,8081 -j DNAT --to-destination $proxyIP:3128 iptables -t nat -A PREROUTING -s $localnet -d ! $server0 -p udp -m multiport --dport 80,81,82,83,88,8000,8001,8002,8080,8081 -j DNAT --to-destination $proxyIP:3128 OnConnect: iptables -t filter -A INPUT -s $IP -j ACCEPT iptables -t filter -A FORWARD -s $IP -j ACCEPT iptables -t filter -A FORWARD -d $IP -j ACCEPT iptables -t filter -A OUTPUT -d $IP -j ACCEPT Сквид с поддержкой прозрачности. Пользователи даже не подозревают, что где-то есть прокся... Экономия у нас 23%
  15. В какой кодировке пишется БД ? Картина : gentoo LANG=ru_RU.UTF-8 LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_ALL= cat /var/log/stargazer.log | grep real 2008-02-02 10:18:59 -- Admin 'admin', 10.0.0.5: User 'test': 'realName' parameter changed from '' to '����'. cat /var/log/stargazer.log | grep real | iconv -f koi8-r -t utf8 2008-02-02 10:18:59 -- Admin 'admin', 10.0.0.5: User 'test': 'realName' parameter changed from '' to 'Мясо'. В текстовой БД текст хранится в кои8. Но ведь локаль-то - ютф!!! В mysql (при ведении БД через него), при вносе текста через "update user set .... ='А' " (Русская А), в конфигураторе виндовом отображается текст, который можно получить путем echo 'А' | iconv -t utf8 -f cp1251 Рђ При работе через mysql модуль stargazer вообще не пишет русский текст в БД. (локаль utf8 - везде), если указать кодировку на таблицу сз1251, в БД появляются символы "?" вместо русских символов. Можно-ли както в mysql модуле stg принудительно указать кодировку для общения с БД?
  16. покажи что у тебя кажет locale в консоли, и из мускула SELECT Table_collation FROM information_schema.`TABLES` where table_name = 'users' плз.
  17. Табличка юзеров: CREATE TABLE `stg`.`users` ( `login` varchar(50) character set cp1251 NOT NULL default '', `Password` varchar(150) character set cp1251 NOT NULL default '*', `Passive` int(3) default '0', `Down` int(3) default '0', `AlwaysOnline` int(3) default '0', `Tariff` varchar(40) character set cp1251 NOT NULL default '', ... # cat /etc/mysql/my.cnf | grep char character-sets-dir=/usr/share/mysql/charsets default-character-set=cp1251 character-sets-dir=/usr/share/mysql/charsets default-character-set=cp1251 character-sets-dir=/usr/share/mysql/charsets default-character-set=cp1251 character-sets-dir=/usr/share/mysql/charsets default-character-set=cp1251 character-sets-dir=/usr/share/mysql/charsets default-character-set=cp1251 character-sets-dir=/usr/share/mysql/charsets default-character-set=cp1251 character-sets-dir=/usr/share/mysql/charsets character-sets-dir=/usr/share/mysql/charsets character-set-server = cp1251 default-character-set = cp1251 LANG=ru_RU.KOI8-R LC_CTYPE="ru_RU.KOI8-R" При вбивании юзеру в одно из полей русский текст, в БД попадают вопросики. Знак "?". В перле кодировки лечатся $dbh=DBI->connect('DBI:mysql:stg','root','*******'); #подключение к базе $dbh->do('SET CHARACTER SET cp1251'); Что нужно поправить в сырцах мускульного модуля? У когонибудь русские символы нормально пишутся в БД? поделитесь своими настройками.
  18. Тестил неделю сборку Stg v. 2.404 - новогодний билд, с mysql модулем. При попытке перенести реальную БД обнаружил косяк - в БД не сохраняются русские символы. Вообще. Т.е. ты конфигуратором создаешь пользователя, пишешь ему реальное имя, конфигуратор говорит окей. Перезапускаешь конфигуратор - все окей. Перегружаешь сам старгазер - все, русского текста нема. Максимум что добился - вопросики в БД (именно символ "?"). Если в БД средствами самого мускула внести русский текст (cp1251, koi8-r, utf), - в конфигураторе отображаются кракозябры. Длинна кракозябры = 2 х Количество символов в оригинальном тексте. В какой кодировке стг сохраняет текст в БД? В С познаний нема, самому найти в исходниках слабо... накатать патчик темболее... Локаль Кои8, локаль таблицы кои.
  19. Я повесил сквида на шлюзе - результат - экономия порядка 15-20% траффика (В месяц у нас порядка 25-30 Гб, эконосмия существенная) + антивирусник. Логи сквида пишутся в mysql (squid -k rotate + парсер), оттуда смотрятся через php. (Топ сайтов общий и по юзеру, % экономии траффика...) В направлениях: gate ~ # cat /etc/stargazer/rules TCP 10.0.0.9:3128 DIR1 ALL 10.0.0.0/21 DIR0 ALL 192.168.1.0/24 DIR0 ALL 0.0.0.0/0 DIR1 В правилах файрвола: localnet=10.0.0.0/21 ProxyIP=Думаю ясно server0=внутренний IP шлюза iptables -t nat -A PREROUTING -s $localnet -d ! $server0 -p tcp -m multiport --dport 80,81,82,83,88,8000,8001,8002,8080,8081 -j DNAT --to-destination $proxyIP:3128 iptables -t nat -A PREROUTING -s $localnet -d ! $server0 -p udp -m multiport --dport 80,81,82,83,88,8000,8001,8002,8080,8081 -j DNAT --to-destination $proxyIP:3128 iptables -t nat -A PREROUTING -s $localnet -d ! $server0 -p tcp -m multiport --dport 8082,8083,8091,8100,8101,8102,8103,8080,8888 -j DNAT --to-destination $proxyIP:3128 iptables -t nat -A PREROUTING -s $localnet -d ! $server0 -p udp -m multiport --dport 8082,8083,8091,8100,8101,8102,8103,8080,8888 -j DNAT --to-destination $proxyIP:3128
  20. У меня ситуация чуть другая (gentoo, amd64-x86, multilib) Не могу собрать mod_mysql ни под каким соусом. Патченый стг (stg-2.4-2007.01.20-13.47.20.pached) вылетает при ./build: Building STG 2.4 for Linux ########################## Makeing stg_logger.lib cp stg_logger.h ../../include/ cp libstg_logger.a ../../lib/ Makeing crypto.lib cp ag_md5.h blowfish.h ../../include/ cp libcrypto.a ../../lib/ Makeing common.lib g++ -g -Wall -I ../../include/ -I ./ -DLINUX -c common.cpp common.cpp: In function 'int printfd(const char*, const char*, ...)': common.cpp:175: error: array must be initialized with a brace-enclosed initializer common.cpp: In function 'int strprintf(std::string*, const char*, ...)': common.cpp:191: error: array must be initialized with a brace-enclosed initializer gmake: *** [common.o] Error 1 Не патченый собиратеся без проблемм. Модуль mod_store_mysql_0.66 n 0.67 ругается так: ############################################################################# Building STG Mysql Module 0.62 for Linux ############################################################################# Makefile:57: deps: No such file or directory g++ -c mysql_store.cpp -g3 -Wall -fPIC -I ../../../../../include -I /usr/include/mysql -DLINUX mysql_store.cpp: In member function 'virtual int MYSQL_STORE::GetMessage(uint64_t, STG_MSG*, const std::string&) const': mysql_store.cpp:1847: warning: format '%lld' expects type 'long long int', but argument 4 has type 'uint64_t' mysql_store.cpp:1867: error: 'strtou2' was not declared in this scope mysql_store.cpp:1875: error: 'strtou2' was not declared in this scope mysql_store.cpp:1883: error: 'strtou2' was not declared in this scope mysql_store.cpp:1891: error: 'strtou2' was not declared in this scope mysql_store.cpp:1899: error: 'strtoi2' was not declared in this scope mysql_store.cpp:1907: error: 'strtou2' was not declared in this scope mysql_store.cpp: In member function 'virtual int MYSQL_STORE::GetMessageHdrs(std::vector<STG_MSG_HDR, std::allocator<STG_MSG_HDR> >*, const std::string&) const': mysql_store.cpp:1967: error: 'strtoull2' was not declared in this scope mysql_store.cpp:1972: error: 'strtou2' was not declared in this scope mysql_store.cpp:1975: error: 'strtou2' was not declared in this scope mysql_store.cpp:1978: error: 'strtou2' was not declared in this scope mysql_store.cpp:1981: error: 'strtou2' was not declared in this scope mysql_store.cpp:1984: error: 'strtoi2' was not declared in this scope mysql_store.cpp:1987: error: 'strtou2' was not declared in this scope gmake: *** [mysql_store.o] Error 1 Makeconf DEFS = -DLINUX DIR_INCLUDE = ../../../../../include DIR_LIB = ../../../../../lib SEARCH_DIRS = -I $(DIR_INCLUDE) -I /usr/include/mysql LDFLAGS = -g3 -shared -lmysqlclient_r -L /usr/lib/mysql ifeq ($(OS),bsd) DEFS = -DFREE_BSD SEARCH_DIRS = -I $(DIR_INCLUDE) -I /usr/local/mysql/include/mysql LDFLAGS = -g3 -shared -lmysqlclient_r -L /usr/local/mysql/lib/mysql endif ifeq ($(OS),bsd5) DEFS = -DFREE_BSD5 SEARCH_DIRS = -I $(DIR_INCLUDE) -I /usr/local/mysql/include/mysql LDFLAGS = -g3 -shared -lmysqlclient_r -L /usr/local/mysql/lib/mysql endif PROG = mod_store_mysql.so SRCS = ./mysql_store.cpp LIBS = OBJS = $(notdir $(patsubst %.cpp, %.o, $(patsubst %.c, %.o, $(SRCS)))) CC = g++ CFLAGS = -g3 -Wall -fPIC vpath %.a $(DIR_LIB) all: $(PROG) $(PROG): $(OBJS) $(LIBS) $(CC) $^ $(LDFLAGS) -o $(PROG) clean: rm -f deps $(PROG) *.o tags *.*~ install: cp mod_store_myslq.so /usr/lib/stg uninstall: echo TODO test: echo "$(GG)" ifneq ($(MAKECMDGOALS),clean) ifneq ($(MAKECMDGOALS),uninstall) include deps endif endif deps: $(SRCS) @>deps;\ for file in $(SRCS); do\ echo "`$(CC) $(CFLAGS) $(DEFS) $(SEARCH_DIRS) -MM $$file` Makefile" >> deps;\ echo -e '\t$$(CC) -c $$< $(CFLAGS) $(SEARCH_DIRS) $(DEFS)' >> deps;\ done Есть релиз mod_mysql который собирается под amd64???
  21. stg-2.4-2007.10.28-22.18.50 gentoo: stage3-amd64-2007.0 - чистая установка, биарч=multilib? стоит (/lib32 не пустая), в ядре поддержка есть (IA32 Emulation, IA32 a.out support).
  22. Время от времени процесс stg жрет 99-100% cpu, и отказывается пускать-выпускать пользователей. Причем безо всякой системы - может проработать неделю без зависаний, может за день 5-10 раз зависнуть. Откатился на stg 2.401 (было 2.403b) - виснуть стало меньше. А в конце месяца сравнил циферки - траффик пользователей согласно сквиду и старгейзеру. И обнаружил утечку на пол-гига... (месячный траффик - 8-10 гиг) Как я понял при забитии процесса он не записывает статистику в stat, и пропадает траффик за последние 10 (или чуть меньше) минут. Порядка 50 юзеров, AMD Athlon™ 1Гц, 256 памяти. Кроме старгейзера крутится только сквид. Кеш сквида на отдельном винте. Что с ним делать - х.з...
  23. Может потому и не собирается для 64? :-) К сожалению имею доступ к сборочному роботу на x86_64 только под ALT Linux. У кого-то есть возможность проверить? Gentoo Linux localhost 2.6.22-gentoo-r8 #1 SMP Thu Nov 8 18:40:06 x86_64 AMD Athlon™ 64 X2 Dual Core Processor 4200+ AuthenticAMD GNU/Linux Собралось и поставилось без ошибок. Работу буду тестить... пока в не боевовом режиме...
  24. Сарг не нравится, пробовал free-sa, но тооже не то. Сейчас проблемма вроде решена (идет тест на рабочем сервере). По скриптам OnConnect /OnDisconnect переформируется таблица now, где стоит прямое соответствие user=ip, и ротация логов сквида, с учетом этой инфы. Если кому интересно - пишите, выложу скрипты. Результат - табличка логов сквида, с дополнительным полем, где напротив ip написано актуальное имя пользователя.
  25. Привет Алл! Задумался скурить сквид и старгезйер. Т.з. - в логах сквида получить наряду с IP имя пользователя из старгейзера. Юзеры посещают кучу сайтов, иногда хочется посмотреть кто где лазил (именно по ссылкам, а не по ip как в расширеной статистике стг). Сейчас логи сквида пишутся в mysql, тудаже (через OnConnect/OnDisconnect) пишется кто когда входил-выходил. Но перекрестный запрос выполняется очень долго (больше 10 минут на пользователя). Былобы приятственно получить имя пользователя прямо в лог сквида, но как это сделать - ума не приложу. Единственное что пришло в голову - авторизовать людей еще и на проксике (даже скриптик написал "auth_param basic program auth.sh", чтоб он логины-пароли у стг. брал), но это делать не хочется - сейчас проксик прозрачный и хотелосьбы его таким оставить. У кого есть какие идеи? Кто что подобное делал?
×
×
  • Create New...