След много нерви последната седмица или вече месец
с тъпите модеми на бтк намерих следното решение и да се надяваме ще помогне и на някой друг.
Тук ползвам един шапер който намерих в гуугле за шапване на впн на ъп и доун скорост който работи чудесно и на реални интерфейси
Примерен код |
#!/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
|
общо взето работи и почти нямам проблем с забиването на модема
да се надявам че ще помогне на някой
неразбирам много но с повечко помощ на гуугле написаното
ми върши чудесна работа