1 (edytowany przez dippaolo 2015-08-08 12:07:09)

Temat: Ograniczenie czasowe - np. 3h

Witam

Czy jest jakiś prosty sposób na zrobienie ograniczenia dla dwóch maszyn w sieci?
Jest Xbox One i komputer, chcę ograniczyć czas korzystania z internetu dla tych dwóch urządzenie. Ważne aby to była suma czasów z dwóch urządzeń.  Przykładowo max limit to 3h, więc 1h gra na Xbox a 2h używa komputera w sumie wykorzystał 3h więc net odcinamy smile
Ewentualnie czym powinienem się zainteresować aby to zrobić. Mam router WDR4300 obecnie z Gargoyle: 1.6.1.4.

2

Odp: Ograniczenie czasowe - np. 3h

Nie. Trzy godziny od teraz tak, nie trzy godziny łączenie.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3 (edytowany przez lukas 2015-08-08 16:18:53)

Odp: Ograniczenie czasowe - np. 3h

Da się to zrobić.
Mam zrobione w ten sposób, że jak dzieci korzystają to jest podliczany czas np. 180 minut na dobę. Jak odłączy od sieci urządzenie to przestaje liczyć a jak się podłączy to wznawia liczenie. Po wykorzystaniu przyznanego limitu na dobę następuje blokada sieci do następnego dnia lub jak będą grzeczne mogę jednym kliknięciem odblokować albo zwiększyć limit dla aktualnego dnia. Nieważne co jest podłączone do sieci czy to telefon, konsola, komp itp.


Polecam
http://eko.one.pl/forum/viewtopic.php?id=3634

Troszkę to wszystko na własną rękę zmodyfikowałem wraz z zakładkami do gui czyli konfigurowalne jest wszystko z przeglądarki logując się na router

4

Odp: Ograniczenie czasowe - np. 3h

Nadal twierdzę ze nie. Jak ktoś ma na stałe włączone wifi w smartfonie czy tablecie to w/w nie uwzględni tego.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5 (edytowany przez lukas 2015-08-08 18:43:33)

Odp: Ograniczenie czasowe - np. 3h

Może opisze co i jak.  Zakładając że syn to np. Kacper a córka to powiedzmy Natalia
Na początek katalogi /www/ruter_SH/zapora
W katalogu ruter_SH mam jeszcze inne pliki wykonawcze ale w nim umieściłem katalog /zapora i to o niego nam chodzi.
Więc na początek robimy katalogi a w katalogu  /zapora  robimy pliki:

kacper_tmp:  w tym pliku zapisywany jest czas jaki Kacper przesiedział przy telefonie, kompie czy co tam ma do dyspozycji
Natalia_tmp: tak jak wyżej tylko dla córki
kacper_mac: w tym pliku wypisane są wszystkie adresy MAC jeden pod drugim  jakie Kacper posiada do dyspozycji.
Natalia_mac: tak jak wyżej tylko dla córki
Czas: w tym pliku wypisany jest czas przyznany aktualnie do wykorzystania np. 480 czyli 8 godzin na dobę
kacper.sh: Plik uruchamiany co minutę. Odczytywany jest przyznany czas z pliku "Czas" i zapisywany jest zużyty czas do pliku kacper_tmp
Jeżeli czas wykorzystany jest większy niż zezwolono to następuje zablokowanie internetu i przekierowanie na stronę routera gdzie jest informacja o wykorzystanym limicie.

Zawartość pliku kacper.sh wygląda następująco:

#!/bin/sh
DEVICES=/www/ruter_SH/zapora/kacper_mac # a w nim poszczególne MACi dzieciaków w kolejnych liniach
LIMITFILE=/www/ruter_SH/zapora/Czas
TIMEFILE=/www/ruter_SH/zapora/kacper_tmp # tworzony co restart, przy założeniu, że 'dzieciaki' nie restartują : )
USEDTIME=$(cat $TIMEFILE)
LIMIT=$(cat $LIMITFILE)
for device in $(cat $DEVICES); do

if [ ! -z "$(iw dev wlan0 station dump | grep $device)" ]; then
    if [ "$(iw dev wlan0 station dump | grep -e $device -e inactive | tail -1 | awk '{print $3}')" -lt 60000 ]; then
# ignorowanie nieaktywnego połączenia, żeby było 'sprawiedliwie'
# z obserwacji - dotyczy np telefonu rzuconego w kąt, który podtrzymuje dzierżawę, ale niedotykany pozostaje 'inactive'
    let USEDTIME=$USEDTIME+1
    echo $USEDTIME > $TIMEFILE
    fi    
fi
done

if [ $USEDTIME -gt $LIMIT ]; then
iptables -I FORWARD 1 -p tcp -s 192.168.1.101 -j REJECT; iptables -A PREROUTING  -t nat -p tcp -s 192.168.1.101 -j DNAT --to 192.168.1.1:80
iptables -I FORWARD 1 -p tcp -s 192.168.1.108 -j REJECT; iptables -A PREROUTING  -t nat -p tcp -s 192.168.1.108 -j DNAT --to 192.168.1.1:80
fi

Zawartość pliku Natalia.sh wygląda następująco:

#!/bin/sh
DEVICES=/www/ruter_SH/zapora/Natalia_mac # a w nim poszczególne MACi dzieciaków w kolejnych liniach
LIMITFILE=/www/ruter_SH/zapora/Czas
TIMEFILE=/www/ruter_SH/zapora/Natalia_tmp # tworzony co restart, przy założeniu, że 'dzieciaki' nie restartują : )
USEDTIME=$(cat $TIMEFILE)
LIMIT=$(cat $LIMITFILE)
for device in $(cat $DEVICES); do

if [ ! -z "$(iw dev wlan0 station dump | grep $device)" ]; then
    if [ "$(iw dev wlan0 station dump | grep -e $device -e inactive | tail -1 | awk '{print $3}')" -lt 60000 ]; then
# ignorowanie nieaktywnego połączenia, żeby było 'sprawiedliwie'
# z obserwacji - dotyczy np telefonu rzuconego w kąt, który podtrzymuje dzierżawę, ale niedotykany pozostaje 'inactive'
    let USEDTIME=$USEDTIME+1
    echo $USEDTIME > $TIMEFILE
    fi    
fi
done

if [ $USEDTIME -gt $LIMIT ]; then
iptables -I FORWARD 1 -p tcp -s 192.168.1.102 -j REJECT; iptables -A PREROUTING  -t nat -p tcp -s 192.168.1.102 -j DNAT --to 192.168.1.1:80
iptables -I FORWARD 1 -p tcp -s 192.168.1.103 -j REJECT; iptables -A PREROUTING  -t nat -p tcp -s 192.168.1.103 -j DNAT --to 192.168.1.1:80
fi

Czyli zliczany i blokowany jest czas z telefonu i komputera. Takie numery IP są przydzielone do numerów MAC w konfiguracji routera DHCP
Oczywiście trzeba jeszcze ustawić w konfiguracji zapory routera  jakie numery MAC mogą korzystać z internetu bo cwany syn może zmienić MAC po zakończeniu limitu.
Oraz zabronić dostępu w konfiguracji routera DHCP "Blokuj adresy MAC ze zmienionym adresem IP." zaznaczając.

Teraz należy utworzyć plik
zapora_start.sh: a w nim

#!/bin/sh
/www/ruter_SH/zapora/kacper.sh
/www/ruter_SH/zapora/Natalia.sh

oraz zapora_restart.sh:a w nim
#!/bin/sh
echo 0 > /www/ruter_SH/zapora/kacper_tmp; echo 0 > /www/ruter_SH/zapora/Natalia_tmp; /etc/init.d/firewall restart


No i na koniec dodać dwa pliki zapora_start.sh i zapora_restart.sh do cron żeby uruchamiał się co minutę. Więc w pliku /etc/crontabs/root dopisujemy:
*/1 * * * * /www/ruter_SH/zapora/zapora_start.sh
0 23 * * * /www/ruter_SH/zapora/zapora_restart.sh

Mam jeszcze dodatkowe zakładki do konfiguracji tego poprzez stronę www
oraz możliwość ustawienia innego czasu dla każdego dzieciaka z osobna i w każdy dzień inaczej.

Na koniec do pliku /www/login.sh
Dodałem pomiędzy </script> a <fieldset>

<fieldset>
<legend class="sectionheader">Status czasu (Włącz blokady)</legend>
<table>
<tr>
<td>Kacper wyczerpał <% cat /www/ruter_SH/zapora/kacper_tmp %>minut z <% cat /www/ruter_SH/zapora/Czas %> minut</td>
</tr>
<tr>
<td>Natalia wyczerpała <% cat /www/ruter_SH/zapora/Natalia_tmp %>minut z <% cat /www/ruter_SH/zapora/Czas %> minut</td>
</tr>
</table>
</fieldset>

Mam odczyt kto ile siedział w necie i dzieciaki widzą co się stało jak limit się skończy

Wszystkie pliku sh muszą mieć chmod 0755

6

Odp: Ograniczenie czasowe - np. 3h

O to to... smile

Przetestuję w wolnej chwili bo zarobiony jestem. Takie coś by mi pasowało smile

7

Odp: Ograniczenie czasowe - np. 3h

No i znalazł się czas, zrobiłem według opisu kolegi i... niestety, mam problem ze zliczaniem czasu. W opisie dotyczy urządzeń podłączonych po wifi (i tak działa, gdy wpiszę mac'i urządzeń wifi) a ja potrzebuje zliczanie urządzeń podłączonych po kablu.
Próbowałem podmienić "wlan0" na "eth0, eth0.1, eth0.2" ale bez rezultatu.
Mój ifconfig:

root@Paolo:~# ifconfig
br-lan    Link encap:Ethernet  HWaddr 64:66:B3:8A:xx:xx
          inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:159406 errors:0 dropped:95 overruns:0 frame:0
          TX packets:256631 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:23225987 (22.1 MiB)  TX bytes:335938708 (320.3 MiB)
eth0      Link encap:Ethernet  HWaddr 64:66:B3:8A:xx:xx
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:33964599 errors:0 dropped:8 overruns:1 frame:0
          TX packets:29541870 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2842667281 (2.6 GiB)  TX bytes:1172528092 (1.0 GiB)
          Interrupt:4
eth0.1    Link encap:Ethernet  HWaddr 64:66:B3:8A:xx:xx
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12772909 errors:0 dropped:246 overruns:0 frame:0
          TX packets:16283260 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:1778290871 (1.6 GiB)  TX bytes:11930786333 (11.1 GiB)
eth0.2    Link encap:Ethernet  HWaddr 00:04:61:59:xx:xx
          inet addr:89.239.xxx.xxx  Bcast:89.239.xxx.xxx  Mask:255.255.248.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:21191597 errors:0 dropped:0 overruns:0 frame:0
          TX packets:13258610 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:13337909059 (12.4 GiB)  TX bytes:2008476167 (1.8 GiB)
imq0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          UP RUNNING NOARP  MTU:16000  Metric:1
          RX packets:232513 errors:0 dropped:0 overruns:0 frame:0
          TX packets:232513 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:11000
          RX bytes:317990080 (303.2 MiB)  TX bytes:317990080 (303.2 MiB)
lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:481 errors:0 dropped:0 overruns:0 frame:0
          TX packets:481 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:62214 (60.7 KiB)  TX bytes:62214 (60.7 KiB)
wlan0     Link encap:Ethernet  HWaddr 64:66:B3:8A:xx:xx
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14414 errors:0 dropped:0 overruns:0 frame:0
          TX packets:11237 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:13775640 (13.1 MiB)  TX bytes:2446582 (2.3 MiB)
wlan1     Link encap:Ethernet  HWaddr 64:66:B3:8A:xx:xx
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2834 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:0 (0.0 B)  TX bytes:234310 (228.8 KiB)

Co powinienem użyć zamiast "wlan0"?