PPPoE Unique Login without using FreeRadius at all solved. traffic shaping Up+download included.
Hi all.. what follows is a very very cheap solution to disallow 2 different computers to login to rp-pppoe server using the same username. This means the same username should have one and only one login session in the whole network. This /DOES/ not use FreeRadius at all. It uses only /etc/ppp/ip-up.d and /etc/ppp/ip-down.d shell scripts. This also contains NO-borrowing / NO-shared-bandwidth traffic shaping using HTB. This is Tested and it works AND IS FINAL. Works for People who has scheduled electrical powerdowns within parts of the same country like it's the case in Lebanon in the Middle East. Can be used any where, currently used in a Wireless LAN. Remember this uses /etc/ppp/chap-secrets for login. It uses the same setup described in: http://wrath.geoweb.ge/pppoe-server.html How it can be cheap? because i did not use a NAS. since from my research online, i have to buy a wireless NAS e.g Cisco (1000$ worth). #######################put in /etc/ppp/ip-up.d/pppoeup script. make it executeble############## #!/bin/bash #Customer $IP IP=$5 #Customer pppN device dev=$1 #making sure of the existance of the file /root/shaping/check this is used as a check-in. if [ ![-f /root/shaping/check] ] then mkdir /root/shaping/ > /dev/null 2>&1 touch /root/shaping/check fi #checking if the file contains a previously added $IP ie an already logged in Customer. prev_dev=$(grep -e $IP /root/shaping/check| cut -f2) #if the Customer $IP is in the file /root/shaping/check then shutdown the current log in ##FIXME##kill the session smoothly, no signal means simply normal close### #Shutdown the $dev and then .. ##FIXME##Kill the session in SURE KILL NO MERCY KILL (signal number -9 ) This wont let pppoedown work/run. #any device will be flushed automatically after the timeout period finishes #and will run ip-down.d/pppoedown electricity shutdown #therefore there is no worry on the /root/shaping/check if [ "$prev_dev" != "" ] then #ifconfig $dev down #kill -9 $(cat /var/run/${dev}.pid ) #sed -e '/'$IP'\t'$prev_dev'/d' -i /root/shaping/check if [ -f /var/run/${prev_dev}.pid ] then kill $(cat /var/run/${prev_dev}.pid ) fi fi # if Customer $IP not in the file /root/shaping/check append the $IP to the file and continue normally. echo $IP$'\t'$dev >> /root/shaping/check /sbin/tc qdisc del $dev root 2> /dev/null > dev/null /sbin/tc qdisc del ${dev} ingress 2> /dev/null > dev/null # /root/shaping/speeds is a tabulated file of dedicated speeds. written as follows: # IP UPload_speed (kBytes/sec) UPload_burst (kBytes) DOWNload_speed (kBytes/sec) DOWNload_burst (kBytes) uprate=$(brief_config /root/shaping/speeds | grep -e $IP | cut -f 2 ) upburst=$(brief_config /root/shaping/speeds | grep -e $IP | cut -f 3 ) downrate=$( brief_config /root/shaping/speeds | grep -e $IP | cut -f 4) downburst=$( brief_config /root/shaping/speeds | grep -e $IP | cut -f 5) loginname=$(grep -e $IP /etc/ppp/chap-secrets | cut -f 1) date=`date` /sbin/tc qdisc add dev $dev root handle 1: htb default 1 /sbin/tc class add dev $dev parent 1:1 classid 1:1 htb rate ${downrate}kbps ceil ${downrate}kbps burst ${downburst}kB #U32="/sbin/tc filter add dev ${dev} protocol ip parent 1:0 prio 1 u32" #${U32} match ip src ${IP} flowid 1:1 /sbin/tc qdisc add dev $dev handle ffff: ingress /sbin/tc filter add dev $dev protocol ip parent ffff: prio 50 u32 match ip src 0.0.0.0/0 police rate ${uprate}kbps burst ${upburst}kB drop flowid :1 echo "${loginname} loggin at ${date} downrate ${downrate} uprate ${uprate} " >> /root/shaping/pppoe.log ################## end of file /etc/ppp/ip-up.d/pppoeup ############################### #############put in /etc/ppp/ip-down.d/pppoedown script. make it executeble############## #!/bin/bash #Customer's pppN device/interface and his IP dev=$1 IP=$5 #remove his traffic shaping issues /sbin/tc qdisc del dev $dev root /sbin/tc qdisc del dev $dev ingress #get his username and to echo his logout time later. loginname=$(grep -e $5 /etc/ppp/chap-secrets | cut -f 1) date=`date` #delete him from the check list #sed -e '/'$dev'/d' -i /root/shaping/check sed -e '/'$IP'\t'$dev'/d' -i /root/shaping/check #write his log out date. echo "${loginname} logout at ${date}" >> /root/shaping/pppoe.log #############end of /etc/ppp/ip-down.d/pppoedown script ############## Wish ye all good luck. SuperLinux : To Linux infinity and beyond!
participants (1)
-
Rani Ahmed