CentOS 5.1 + PPTP - подвисшие туннели + странности шейпера

Есть и такой ОС.

Модератор: weec

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
NiTr0
мл. сержант
Сообщения: 109
Зарегистрирован: 2008-08-29 0:05:24

CentOS 5.1 + PPTP - подвисшие туннели + странности шейпера

Непрочитанное сообщение NiTr0 » 2008-12-18 1:58:58

Поднят сервер на CentOS 5.1 (ядро обновлял из репозиториев - древнее 2.6.18, но с кучей патчей/багфиксов - любит рэдхет это дело)
Наблюдаются следующие странности:
1) Подвисшие ppp туннели, интерфейсы - не подняты, ИП - не выданы, pppd - висят, но их PID среди /var/run/ppp*.pid нет (как и файлов для соответствующих интерфейсов, и radattr.pppX для данных интерфейсов). И, ессно, данные процессы жрут системные ресурсы, причем - очень нехило (после их килла в кол-ве около 170 штук загрузка ядер упала с 200% (дуалкор, показания по SNMP) до 80%, load average - с 200 до 3...
В логи при килле гадит следующее:

Код: Выделить всё

Dec 18 00:17:35 server3 pppd[17070]: ioctl(TIOCSETD, N_TTY): Interrupted system call (line 562)
Dec 18 00:17:35 server3 pppd[17070]: tcsetattr: Invalid argument (line 1001)
Dec 18 00:17:35 server3 pppd[17070]: Exit.
Гугл ничего толкового не дал, мессага tcsetattr: Invalid argument (line 1001) встречается в логах только при принудительном киллянии повисшего процесса.
Версия poptop - 1.3.4, pppd - 2.4.4 (шел в дистре)
pptpd.conf:

Код: Выделить всё

option /etc/ppp/options.pptpd
logwtmp
delegate
connections 2000
options.pptpd

Код: Выделить всё

name pptpd
require-mschap
require-chap
ms-dns 10.255.0.2
ms-dns 10.255.0.12
lock
nobsdcomp
novj
novjccomp
nologfd
lcp-echo-interval 2
lcp-echo-failure 12
default-asyncmap
plugin radius.so
plugin radattr.so
2) Странности с шейпером (исходящий шейпер - основан на маркировке пакетов iptables и последующем их заворачивании в классы tc) - при дисконнекте не все правила iptables уничтожаются, иногда бывает, что 1-2 правила остаются из 3. К слову, данный скрипт на федоре 9 (ядро 2.6.23) крашил систему при выполнении не в дебаг-режиме через терминал (когда его отлаживал, пускал вручную), при этом в дебаг-режиме баша - работал четко, ессно - ставить его на ifup/ifdown на работающей машине без резерва побоялся...

Мои скрипты шейпера:

Код: Выделить всё

# cat ip-up.local

#!/bin/sh

debug=0;
INPUT=eth0;
UBURST="burst 512k"
DBURST="burst 64k"

if [ -f /var/run/radattr.$1 ]
then
   PPPNUM=`echo $1|sed 's/ppp//'|awk '{printf "%03d",$1}'`
#   IP=$5
#   echo $IP >/var/run/shaper/$1
   QDISC_ETH=`tc qdisc show dev $INPUT|grep -v sfq|awk '{print $2}'`
   DOWNSPEED=`/bin/awk  '/PPPD-Downstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`
   UPSPEED=`/bin/awk  '/PPPD-Upstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`
   FILTERS=`/bin/awk  '/Filter-Id/ {print $2}'  /var/run/radattr.$1`

   if [ "$QDISC_ETH" != "htb" ];
   then
     tc qdisc del dev $INPUT root >/dev/null
     tc qdisc add dev $INPUT root handle 1: htb default 2 r2q 100
     tc class add dev $INPUT parent 1: classid 1:1 htb rate 100mbit ceil 1000mbit burst 1024k cburst 64k prio 2
     tc class add dev $INPUT parent 1: classid 1:2 htb rate 100mbit ceil 1000mbit burst 1024k cburst 64k prio 1
  fi


   if [ w${debug} = w1 ] ; then
     echo "Debug mode" >>/tmp/pptpd
     echo $DOWNSPEED >>/tmp/pptpd
     echo $UPSPEED >>/tmp/pptpd
     echo $FILTERS >>/tmp/pptpd
   fi;

    /sbin/tc qdisc del dev $1 root    > /dev/null
    /sbin/tc qdisc del dev $1 ingress &>/dev/null

##### speed server->client
   if [ "$UPSPEED" != "0" ] ;
   then
     /sbin/tc qdisc add dev $1 root handle 1: htb default 20 r2q 100
     /sbin/tc class add dev $1 parent 1: classid 1:1 htb rate ${UPSPEED}kbit $UBURST quantum 1514
     /sbin/tc class add dev $1 parent 1:1 classid 1:10 htb rate ${UPSPEED}kbit $UBURST prio 1 quantum 1514
     /sbin/tc class add dev $1 parent 1:1 classid 1:20 htb rate ${UPSPEED}kbit $UBURST prio 2 quantum 1514
     /sbin/tc qdisc add dev $1 parent 1:10 handle 10: sfq perturb 10 quantum 1514
     /sbin/tc qdisc add dev $1 parent 1:20 handle 20: sfq perturb 10 quantum 1514
     /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:10
     /sbin/tc filter add dev $1 parent 1:0 protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:10

#     /sbin/tc filter add dev $1 parent 1: protocol ip prio 10 u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u160x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:10
   fi

##### speed client->server
   if [ "$DOWNSPEED" != "0" ] ;
   then
     tc class add dev $INPUT parent 1:1 classid 1:1$PPPNUM htb rate ${DOWNSPEED}kbit $DBURST quantum 1514
     tc class add dev $INPUT parent 1:1$PPPNUM classid 1:2$PPPNUM htb rate ${DOWNSPEED}kbit $DBURST prio 10 quantum 1514
     tc class add dev $INPUT parent 1:1$PPPNUM classid 1:3$PPPNUM htb rate ${DOWNSPEED}kbit $DBURST prio 1 quantum 1514
     tc qdisc add dev $INPUT parent 1:2$PPPNUM handle 2$PPPNUM: sfq perturb 10 quantum 1514
     tc qdisc add dev $INPUT parent 1:3$PPPNUM handle 3$PPPNUM: sfq perturb 10 quantum 1514

     iptables -t mangle -A FORWARD -i $1 -j MARK --set-mark 0x3$PPPNUM
     iptables -t mangle -A FORWARD -i $1 -p icmp -j MARK --set-mark 0x2$PPPNUM
     iptables -t mangle -A FORWARD -i $1 -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x2$PPPNUM

     tc filter add dev eth0 parent 1:0 protocol ip prio 1 handle 0x3$PPPNUM fw classid 1:3$PPPNUM
     tc filter add dev eth0 parent 1:0 protocol ip prio 2 handle 0x2$PPPNUM fw classid 1:2$PPPNUM
   fi

#### Filters
  if [ w$FILTERS != w ] ;
  then
    echo "filters not supported";
  fi;

 fi

# cat ip-down.local

#!/bin/sh

debug=0;
INPUT=eth0;

if [ -f /var/run/radattr.$1 ]
then
   PPPNUM=`echo $1|sed 's/ppp//'|awk '{printf "%03d",$1}'`
#   IP=$5
   QDISC_ETH=`tc qdisc show dev $INPUT|grep root|awk '{print $2}'`
   DOWNSPEED=`/bin/awk  '/PPPD-Downstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`
   UPSPEED=`/bin/awk  '/PPPD-Upstream-Speed-Limit/ {print $2}'  /var/run/radattr.$1`
   FILTERS=`/bin/awk  '/Filter-Id/ {print $2}'  /var/run/radattr.$1`


   if [ w${debug} = w1 ] ; then
     echo "Debug mode" >>/tmp/pptpd
     echo $DOWNSPEED >>/tmp/pptpd
     echo $UPSPEED >>/tmp/pptpd
     echo $FILTERS >>/tmp/pptpd
   fi;


##### speed server->client
   if [ "$UPSPEED" != "0" ] ;
   then
     /sbin/tc qdisc del dev $1 root    > /dev/null
   fi

##### speed client->server
   if [ "$DOWNSPEED" != "0" ] ;
   then
     tc filter del dev eth0 parent 1:0 protocol ip prio 1 handle 0x3$PPPNUM fw classid 1:3$PPPNUM
     tc filter del dev eth0 parent 1:0 protocol ip prio 2 handle 0x2$PPPNUM fw classid 1:2$PPPNUM
     tc class del dev $INPUT classid 1:3$PPPNUM
     tc class del dev $INPUT classid 1:2$PPPNUM
     tc class del dev $INPUT classid 1:1$PPPNUM

     iptables -t mangle -D FORWARD -i $1 -j MARK --set-mark 0x3$PPPNUM
     iptables -t mangle -D FORWARD -i $1 -p icmp -j MARK --set-mark 0x2$PPPNUM
     iptables -t mangle -D FORWARD -i $1 -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 0x2$PPPNUM

   fi

#### Filters
  if [ w$FILTERS != w ] ;
  then
    echo "filters not supported";
  fi;

 fi
Посему - вопрос: кто с подобным сталкивался и как с этим бороться?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
weec
лейтенант
Сообщения: 948
Зарегистрирован: 2007-07-24 11:17:35
Откуда: Afghanistan
Контактная информация:

Re: CentOS 5.1 + PPTP - подвисшие туннели + странности шейпера

Непрочитанное сообщение weec » 2008-12-18 17:06:09

часто у тебя такое с PPTP?

NiTr0
мл. сержант
Сообщения: 109
Зарегистрирован: 2008-08-29 0:05:24

Re: CentOS 5.1 + PPTP - подвисшие туннели + странности шейпера

Непрочитанное сообщение NiTr0 » 2008-12-18 17:48:35

Именно такое - сравнительно недавно появилось. Вылезло активно после замены сетевухи с реалтека 8110 на интел pro/1000MT. До того - тоже наблюдался рост загрузки проца при работе, но не такой активный, насчет повисших сессий - тогда не смотрел, но очень подозреваю что они были.
До того пптп крутился пару месяцев на резервной тачке, особых проблем (кроме почти 100% загрузки) не вылазило (но и нагрузка была поменьше - около 300 сессий). И шейпер был на исходящий траффик с использованием ingress - при попытке скриптом ставить-удалять классы на eth0 машина вешалась.

Аватара пользователя
weec
лейтенант
Сообщения: 948
Зарегистрирован: 2007-07-24 11:17:35
Откуда: Afghanistan
Контактная информация:

Re: CentOS 5.1 + PPTP - подвисшие туннели + странности шейпера

Непрочитанное сообщение weec » 2008-12-18 21:23:44

те процессы слушались сигнала TERM?

NiTr0
мл. сержант
Сообщения: 109
Зарегистрирован: 2008-08-29 0:05:24

Re: CentOS 5.1 + PPTP - подвисшие туннели + странности шейпера

Непрочитанное сообщение NiTr0 » 2008-12-18 23:30:17

Да. Похоже, повисли на установке IP или чего-то такого.
Сейчас ограничил кол-во соединений с 1-го ип на 1723 порт до 5 в 3 минуты (методика отсюда) - работает 4 часа, 1 подвисший линк и 3 "бесхозных" pppd, понаблюдаю еще...

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: CentOS 5.1 + PPTP - подвисшие туннели + странности шейпера

Непрочитанное сообщение paix » 2008-12-19 12:14:54

Вопрос: а почему столько входящих соединений ? это же не брутфорсеры а валидные юзера? кроме того юзера то могут быть за натом...
With best wishes, Sergej Kandyla

NiTr0
мл. сержант
Сообщения: 109
Зарегистрирован: 2008-08-29 0:05:24

Re: CentOS 5.1 + PPTP - подвисшие туннели + странности шейпера

Непрочитанное сообщение NiTr0 » 2008-12-19 12:34:03

Потому что у некоторых юзеров стоит глупая железка под названием "аппаратный роутер", которая при получении отказа в авторизации сразу же коннектится по новой. Чем и создает определенную нагшрузку и на радиус-сервер, и на ППТП. Данное ограничение не сильно сказывается на комфорте работы юзеров (мало кто за 3 минуты будет 5 раз линк переустанавливать), но обрежет настойчивость глупых железок.
За натом юзеров быть не может - т.к. эта машина раздает инет в локалке. + ко всему - если не ошибаюсь, 2 GRE туннеля на 1 адрес линукс не переварит...

paix
лейтенант
Сообщения: 863
Зарегистрирован: 2007-09-24 12:41:05
Откуда: dn.ua
Контактная информация:

Re: CentOS 5.1 + PPTP - подвисшие туннели + странности шейпера

Непрочитанное сообщение paix » 2008-12-19 13:05:49

ясно.
strace не пробовали подцепиться к подвисшим процессам ?
With best wishes, Sergej Kandyla

NiTr0
мл. сержант
Сообщения: 109
Зарегистрирован: 2008-08-29 0:05:24

Re: CentOS 5.1 + PPTP - подвисшие туннели + странности шейпера

Непрочитанное сообщение NiTr0 » 2008-12-19 21:27:38

Только что попробовал... висит на следующем:

Код: Выделить всё

ioctl(8, TIOCSETD
Посмотрел логи - случилось данное после неуспешной аутентификации...

Аватара пользователя
weec
лейтенант
Сообщения: 948
Зарегистрирован: 2007-07-24 11:17:35
Откуда: Afghanistan
Контактная информация:

Re: CentOS 5.1 + PPTP - подвисшие туннели + странности шейпера

Непрочитанное сообщение weec » 2008-12-20 18:21:54

а что на сайте проекта по этому поводу говорят, быть может не ты один с такой проблемой?

NiTr0
мл. сержант
Сообщения: 109
Зарегистрирован: 2008-08-29 0:05:24

Re: CentOS 5.1 + PPTP - подвисшие туннели + странности шейпера

Непрочитанное сообщение NiTr0 » 2008-12-21 19:01:07

Поиск в архивах мэйллистов на сорсфорже ничего толкового не дал...
С момента ограничения кол-ва коннектов - появилась только 1 подвисшая сессия.