Автор Тема: Решение за бтк и забиването на модема  (Прочетена 669 пъти)

vladi4ko

  • Напреднали
  • *****
  • Публикации: 36
    • Профил
След много нерви последната седмица или вече месец
с тъпите модеми на бтк намерих следното решение и да се надяваме ще помогне и на някой друг.

Тук ползвам един шапер който намерих в гуугле за шапване на впн на ъп и доун скорост който работи чудесно и на реални интерфейси
Примерен код
#!/bin/sh
DEVICE=eth2
DOWN=450
UP=1450
/sbin/tc qdisc del dev $DEVICE root
/sbin/tc qdisc add dev $DEVICE root tbf rate ${DOWN}Kbit latency 50ms burst $[$DOWN*1024]
/sbin/tc qdisc del dev $DEVICE handle ffff: ingress
/sbin/tc qdisc add dev $DEVICE handle ffff: ingress
/sbin/tc filter add dev $DEVICE parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 \
police rate ${UP}Kbit burst $[$DOWN*1024] drop flowid :1

където DEVICE e името на вашия интрефейс
със UP и DOWN съм оказал скороста където значително се намалява но нямам проблем с модема но и това се оказа недостатъчно за работата на модема повече от
два часа при максимално натоварване и теглене от торенти
затова филтрирам част от ип-тата на UDP
като ползвам това:
iptables -t nat -I POSTROUTING -p udp -o eth2 -s 192.168.5.1 --dport 0:65535 -j DROP
iptables -t nat -I POSTROUTING -p udp -o eth2 -s 192.168.5.1 --sport 0:65535 -j DROP

подобно нещо ползвам и за шарване на нета през pptpd
в pptpd.conf съм описал следната мрежа
localip 10.0.0.1
remoteip        10.0.0.2-200
за лимитиране на впните ползвам по горният шапер
във /etc/ppp/ създавам файл ip-up
и който трябва да се направи да може да се стартира
може да се обърне внимание на премисията
Примерен код
#!/bin/bash

DEVICE=$1
LOCALIP=$5
REMOTEIP=$6

/usr/sbin/iptables -t nat -A POSTROUTING -s $5 -o neta -j MASQUERADE

PASS=`cat /etc/ppp/chap-secrets | grep -w ${5} | awk {'print $3'}`
NEWPASS=`perl -le'print map+(A..Z,a..z,0..9)[rand 62],0..7'`
echo -n "echo \"" >> /etc/ppp/$1
echo -n "\`sed -e " >> /etc/ppp/$1
echo -n "'/${5}/s/${PASS}/${NEWPASS}/g' /etc/ppp/chap-secrets\`\" > /etc/ppp/chap-secrets" >> /etc/ppp/$1
chmod +x /etc/ppp/$1
/etc/ppp/$1
rm /etc/ppp/$1

shaper () {
DEVICE=$1
DOWN=$2
UP=$3

/sbin/tc qdisc del dev $DEVICE root
/sbin/tc qdisc add dev $DEVICE root tbf rate ${DOWN}Kbit latency 50ms burst $[$DOWN*1024]

/sbin/tc qdisc del dev $DEVICE handle ffff: ingress
/sbin/tc qdisc add dev $DEVICE handle ffff: ingress
/sbin/tc filter add dev $DEVICE parent ffff: protocol ip prio 50 u32 match ip src 0.0.0.0/0 \
police rate ${UP}Kbit burst $[$DOWN*1024] drop flowid :1

rm /etc/ppp/chap
cp /etc/ppp/chap-secrets /etc/ppp/chap
chmod 644 /etc/ppp/chap
}

speed="2"; #128kb download 32kb upload
DOWN=1024
UP=156
speed0="3 4"; #64kb download 16kb upload 64 total
DOWN0=512
UP0=54
speed1="5 6 7 8 9"; #32kb download 8kb upload 64 total
DOWN1=256
UP1=34
speed2="10 11 12 13 14 15"; #16kb download 4 upload 48 total
DOWN2=128
UP2=16
speed3="100 101 102 103 104 105"; #8kb download 2 upload 48 total
DOWN3=64
UP3=16
speed4="200"; #256kb download 64kb upload
DOWN4=2048
UP4=212

ip=`echo $LOCALIP | cut -d"." -f4`

for speeds in $speed
do
  if [ $speeds == $ip ]; then
  shaper $DEVICE $DOWN $UP
  SPEED=128
  echo "Session start `date +%F/%R:%S` on device $DEVICE local ip $LOCALIP remoete $REMOTEIP and speed $SPEED " >> \
  /etc/ppp/ppp.log
  exit
  fi
done

for speeds in $speed0
do
  if [ $speeds == $ip ]; then
  shaper $DEVICE $DOWN0 $UP0
  SPEED=64
  echo "Session start `date +%F/%R:%S` on device $DEVICE local ip $LOCALIP remoete $REMOTEIP and speed $SPEED " >> \
  /etc/ppp/ppp.log
  exit
  fi
done

for speeds in $speed1
do
  if [ $speeds == $ip ]; then
  shaper $DEVICE $DOWN1 $UP1
  SPEED=32
  echo "Session start `date +%F/%R:%S` on device $DEVICE local ip $LOCALIP remoete $REMOTEIP and speed $SPEED " >> \
  /etc/ppp/ppp.log
  exit
  fi
done

for speeds in $speed2
do
  if [ $speeds == $ip ]; then
  shaper $DEVICE $DOWN2 $UP2
  SPEED=16
  echo "Session start `date +%F/%R:%S` on device $DEVICE local ip $LOCALIP remoete $REMOTEIP and speed $SPEED " >> \
  /etc/ppp/ppp.log
  exit
  fi
done

for speeds in $speed3
do
  if [ $speeds == $ip ]; then
  shaper $DEVICE $DOWN3 $UP3
  SPEED=8
  echo "Session start `date +%F/%R:%S` on device $DEVICE local ip $LOCALIP remoete $REMOTEIP and speed $SPEED " >> \
  /etc/ppp/ppp.log
  exit
  fi
done

for speeds in $speed4
do
  if [ $speeds == $ip ]; then
  shaper $DEVICE $DOWN4 $UP4
  SPEED=256
  echo "Session start `date +%F/%R:%S` on device $DEVICE local ip $LOCALIP remoete $REMOTEIP and speed $SPEED " >> \
  /etc/ppp/ppp.log
  exit
  fi
done

малко е омазан но накратко тествам нещо като фрии впн-чета за локала където се взима ип-то което се конектва
като последната цифра от ип-то означава на колко ще бъде шапнат паролата се сменя така че да неможе да се върже друг юзер на същия акаунт записва в лог файл
и пир дисконектването акаунта вече може да се ползва
паролата става видима през уеб
Примерен код
<?
function status($user){
//$status = shell_exec ("tdbdump /var/run/pppd2.tdb | grep ORIG_UID | grep -m1 $user");
    $status = shell_exec ("tdbdump /var/run/pppd2.tdb | grep ORIG_UID | grep $user | tail -n1");
    if ( $status != "" ) {
    $status = str_replace(";", " ", $status);
    $status = substr($status, strpos( $status, '"', +2), strrpos( $status, '"', +2 ) );
    $status = str_replace("\"", "", $status);
    $status = substr($status, 0, -4 );
    $status = explode(" ", $status);
    $dev = substr($status[5], +7);
    $localip = substr($status[8], +9);
    $ppp = shell_exec ("cat /etc/ppp/ppp.log | grep -w '$localip' | grep start | tail -n1");
    $ppp = explode(" ", $ppp);
    $remoteipp = "$ppp[10]";
    $speed = "$ppp[13]";
    $remoteipa = getenv('REMOTE_ADDR');
    if ( $remoteipa == "10.4.4.1" ) {
    $remoteip = preg_replace('/\.\d+$/', ".xxx", $remoteipp);
    //$remoteip = $remoteipp;
    }else{
    $remoteip = preg_replace('/\.\d+$/', ".xxx", $remoteipp);
    }
    print "<tr><td>$user</td><td>$dev</td><td>$localip</td><td>$remoteip</td><td>$speed</td><td></td></tr>";
    }else{
    $newpassword = shell_exec ("cat /etc/ppp/chap | grep -w $user");
    $newpassword = explode(" ", $newpassword);
    $newpassword = "$newpassword[4]";
    print "<tr><td>$user</td><td colspan=4>Свободен</td><td>$newpassword</td></tr>";
    }

}
?>
<!--
<table width="100%" border="1" cellspacing="0" cellpadding="0">
    <tr>
        <td class="text"><div align="center">
        </div>-->
        <table width="100%" border="1" cellspacing="0" cellpadding="5">
<tr><td><b>User</b></td><td><b>Dev</b></td><td><b>Local ip</b></td><td><b>Remote ip</b></td><td><b>Скорост</b>
</td><td>Password</td></tr>
<?
echo status(free256kb);
echo status(free128kb);
echo status(free64kb1);
echo status(free64kb2);
echo status(free32kb1);
echo status(free32kb2);
echo status(free32kb3);
echo status(free32kb4);
echo status(free32kb5);
echo status(free16kb1);
echo status(free16kb2);
echo status(free16kb3);
echo status(free16kb4);
echo status(free16kb5);
echo status(free16kb6);
//echo status(free8kb1);
//echo status(free8kb2);
//echo status(free8kb3);
//echo status(free8kb4);
//echo status(free8kb5);
//echo status(free8kb6);
?>
</tr></table>
<!--    </td>
    </tr>
</table> -->


това имам в chap-secrets
Цитат
# Secrets for authentication using CHAP
# client        server  secret                  IP addresses
#ip 2 = 128
#ip 3,4 = 64
#ip 5,6 = 32
#ip 10,11,12,13,14,15 = 16
#ip 100,101,102,103,104,105 = 8
free256kb  home  kYQk7m6d  10.0.0.200
free128kb  home  SpJZWude  10.0.0.2
free64kb1  home  rvoP7La2  10.0.0.3
free64kb2  home  zo5rcnxo  10.0.0.4
free32kb1  home  4tpVApNF  10.0.0.5
free32kb2  home  bui8LUuB  10.0.0.6
free32kb3  home  NV0XoHIW  10.0.0.7
free32kb4  home  OtRcF6kU  10.0.0.8
free32kb5  home  7Rq9tWGY  10.0.0.9
free16kb1  home  axojSdRD  10.0.0.10
free16kb2  home  pGEcJY9t  10.0.0.11
free16kb3  home  xATJi4mN  10.0.0.12
free16kb4  home  MbijkanK  10.0.0.13
free16kb5  home  7B9ovjEx  10.0.0.14
free16kb6  home  IwiV1q9j  10.0.0.15
#free8kb1  home  bcFCKHEC  10.0.0.100
#free8kb2  home  BgnLyVPE  10.0.0.101
#free8kb3  home  jSEdE5sv  10.0.0.102
#free8kb4  home  h0SYjabV  10.0.0.103
#free8kb5  home  qip38bzL  10.0.0.104
#free8kb6  home  I0pGZ7Gk  10.0.0.105

при конектването в /etc/ppp се получава един файл chap
през който пхп-то взима паролата
ppp.log също трябва да се chmod за да може да се чете от php-то

ето и ip-down трябва да може да се стартира файла също
Примерен код
#!/bin/bash
#
#echo "$1 $2 $3 $4 $5 $6" >> /etc/ppp/test.txt
DEVICE=$1
LOCALIP=$5
REMOTEIP=$6
echo "Session stop `date +%F/%R:%S` on device $DEVICE local ip $LOCALIP remoete $REMOTEIP " >> /etc/ppp/ppp.log
/usr/sbin/iptables -t nat -D POSTROUTING -s $5 -o neta -j MASQUERADE


общо взето работи и почти нямам проблем с забиването на модема
да се надявам че ще помогне на някой
неразбирам много но с повечко помощ на гуугле написаното
ми върши чудесна работа
Активен