26

Odp: Lede-limit pobierania

Tak, przeczytaj poradnik.

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

27

Odp: Lede-limit pobierania

W poradniku przy tworzeniu limitu transferu nie ma nic o wpisie do firewall.user, stąd moje pytanie laika.Jest za to przy opisie skryptu tworzącego backup i odtworzenie reguły po restarcie routera.
Dopytam przy okazji, mam ustawiony limit, zrobione skrypty backupu i odtworzenia reguły....gdyby zaszła potrzeba dostępu do internetu po wykorzystaniu limitu, to jak to zrobić?

Xiaomi AX3000T - OpenWrt 25.12 (ubootmod) by Cezary
Cudy WR3000S - OpenWrt 25.12 by Cezary
I use Arch btw

28

Odp: Lede-limit pobierania

"Do pliku /etc/firewall.user dopisujemy:" Jak niema?  Przeczytaj cały opis i zrozum o czym dany akapit mówi.

Jak masz potrzebę dostępu to po prostu musisz albo wyzerować reguły iptables (dokładnie to polecenie co cron robi) lub zmienić plik zawierający bieżące quoty i zrestartować firewalla.

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

29

Odp: Lede-limit pobierania

Cezary wspomniałeś na końcu poradnika o lokalnej stronie www z informacją o wykorzystaniu limitu.Jeśli możesz, to poprosze o wskazówki jak się za to zabrać.

Netgear R6220 + HUAWEI E3372 Hilink

30 (edytowany przez Cezary 2018-04-29 15:57:33)

Odp: Lede-limit pobierania

opkg update
opkg install uhttpd
uci set uhttpd.quotas=uhttpd
uci set uhttpd.quotas.listen_http='0.0.0.0:33333'
uci set uhttpd.quotas.redirect_https='0'
uci set uhttpd.quotas.home='/www/quotas'
uci set uhttpd.quotas.error_page='/index.html'
uci set uhttpd.quotas.no_dirlists=1
uci commit uhttpd
/etc/init.d/uhttpd restart
mkdir -p /www/quotas
echo "<html><body>Przekroczony limit transferu!</body><html>" > /www/quotas/index.html

to robi stronę informacyjną na porcie 33333. Teraz potrzebujesz coś co zrobi regułę przy przekroczeniu transferu. Można np. w miarę często wołać quotas-backup.sh a w nim, przed linią z exit 0 dodać coś takiego:

QUOTA=$((49 * 1024 * 1024))
if [ $BYTES -gt $QUOTA ]; then
  iptables -t nat -C prerouting_rule -m mac  --mac-source 01:02:03:04:05:06 -p tcp --dport 80 -j REDIRECT --to-port 33333 || iptables -t nat -A prerouting_rule -m mac  --mac-source 01:02:03:04:05:06 -p tcp --dport 80 -j REDIRECT --to-port 33333
else
 iptables -t nat -D prerouting_rule -m mac  --mac-source 01:02:03:04:05:06 -p tcp --dport 80 -j REDIRECT --to-port 33333 > /dev/null 2>&1
fi

Przy backupowaniu limitów sprawdzane jest czy nie został przekroczony, jeżeli tak to dodawana jest regułą która robi przekierowanie portu 80 na 33333 czyli naszą stronę informacyjną.
Użyłem 49 zamiast 50 ponieważ to zliczanie nie jest tak dokładne co do bajta i może się zdarzyć że brakuje np. kilkudziesięciu bajtów wg liczników a reguły quoty już to łapią. Więc na chwilę przed limitem już można przekierować.

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

31

Odp: Lede-limit pobierania

PS przy okazji poprawiłem też poradnik uzupełniając takie rzeczy jak sprawdzenie czy plik jest, sprawdzenie czy aby na pewno odczytał liczniki itd.

PS2. To powyższe trzeba uzupełnić jeszcze o sprawdzenie czy reguła nie jest założona bo inaczej przy każdym wywołaniu quotes-backup będzie dodawał od nowa regułę.

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

32 (edytowany przez karolinka 2018-04-29 18:40:33)

Odp: Lede-limit pobierania

Dziękuję bardzo za "gotowca podanego na tacy".Prawdę mówiąc brak mi słów by wyrazić podziw dla wiedzy jaką posiadasz i chęci podzielenia się nią z ludzmi. Wielki Szacunek.

Netgear R6220 + HUAWEI E3372 Hilink

33

Odp: Lede-limit pobierania

Dopytam jeszcze czy dobrze rozumiem.
Limit transferu 2gb dziennie dla dwóch adresów mac łącznie.
Po przekroczeniu limitu przekierowanie na stronę z komunikatem o jego przekroczeniu.
Instaluję serwer uhttpd i konfiguruję według Twojego postu powyżej.
Zawartość pliku /etc/firewall.user:

RULE=limit2gb

PKTS=$(awk '/'$RULE'/{print $2}' /etc/quotas)
BYTES=$(awk '/'$RULE'/{print $3}' /etc/quotas)
QUOTA=$((2048 * 1024 * 1024))
iptables -N $RULE
iptables -A $RULE -m quota --quota $QUOTA --set-counters $PKTS $BYTES -j ACCEPT
iptables -A $RULE -j REJECT
iptables -A forwarding_rule -j $RULE -m mac --mac-source 01:02:03:04:05;06
iptables -A forwarding_rule -j $RULE -m mac --mac-source 07:08:09:10:11:12

Zawartość skryptu quotas-backup.sh:

#!/bin/sh
RULE=limit2gb

O=$(iptables -vxnL $RULE 2>/dev/null)
PKTS=0
BYTES=0
if [ -n "$O" ]; then
    PKTS=$(iptables -vxnL $RULE | awk '/quota:/{print $1}')
    [ -z "$PKTS" ] && PKTS=0
    BYTES=$(iptables -vxnL $RULE | awk '/quota:/{print $2}')
    [ -z "$BYTES" ] && BYTES=0
fi
FBACKUP=/etc/quotas
touch $FBACKUP
sed -i '/'$RULE'/d' $FBACKUP
echo "$RULE $PKTS $BYTES" >> $FBACKUP

QUOTA=$((2047 * 1024 * 1024))
if [ $BYTES -gt $QUOTA ]; then
  iptables -t nat -C prerouting_rule -m mac  --mac-source 01:02:03:04:05:06 -p tcp --dport 80 -j REDIRECT --to-port 33333 || iptables -t nat -A prerouting_rule -m mac  --mac-source 01:02:03:04:05:06 -p tcp --dport 80 -j REDIRECT --to-port 33333
  iptables -t nat -C prerouting_rule -m mac  --mac-source 07:08:09:10:11:12 -p tcp --dport 80 -j REDIRECT --to-port 33333 || iptables -t nat -A prerouting_rule -m mac  --mac-source 07:08:09:10:11:12 -p tcp --dport 80 -j REDIRECT --to-port 33333
else
 iptables -t nat -D prerouting_rule -m mac  --mac-source 01:02:03:04:05:06 -p tcp --dport 80 -j REDIRECT --to-port 33333 > /dev/null 2>&1
 iptables -t nat -D prerouting_rule -m mac  --mac-source 07:08:09:10:11:12 -p tcp --dport 80 -j REDIRECT --to-port 33333 > /dev/null 2>&1
fi
exit 0

Proszę rzuć fachowym okiem czy nie błądze we mgle smile

Netgear R6220 + HUAWEI E3372 Hilink

34

Odp: Lede-limit pobierania

tak i tak. W sumie sprawdź zamiast pytać smile

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

35

Odp: Lede-limit pobierania

Jeszcze raz dziękuje.

Netgear R6220 + HUAWEI E3372 Hilink

36 (edytowany przez mar_w 2018-04-30 01:12:54)

Odp: Lede-limit pobierania

@karolinka
Twoje reguły nie działają tak, żeby spełnić założenie: Limit transferu 2gb dziennie... ponieważ liczą dane WYJŚCIOWE po źródłowym MAC adresie.
I takie doświadczenie dla limitu 2MB danych i Twoich regułach bez jednego 1024 w QUOTA :
ROUTER:

root@router:~# while true ; do iptables -L -vn | grep LIMIT_2MB ;sleep 10 ;done
Chain LIMIT_2MB (1 references)
    5   356 LIMIT_2MB  all  --  *      *       0.0.0.0/0            0.0.0.0/0            MAC 01:02:03:04:05:06
Chain LIMIT_2MB (1 references)
  579 30508 LIMIT_2MB  all  --  *      *       0.0.0.0/0            0.0.0.0/0            MAC 01:02:03:04:05:06
Chain LIMIT_2MB (1 references)
2391  125K LIMIT_2MB  all  --  *      *       0.0.0.0/0            0.0.0.0/0            MAC 01:02:03:04:05:06
Chain LIMIT_2MB (1 references)
7856  409K LIMIT_2MB  all  --  *      *       0.0.0.0/0            0.0.0.0/0            MAC 01:02:03:04:05:06
Chain LIMIT_2MB (1 references)
10572  550K LIMIT_2MB  all  --  *      *       0.0.0.0/0            0.0.0.0/0            MAC 01:02:03:04:05:06
Chain LIMIT_2MB (1 references)
16179  842K LIMIT_2MB  all  --  *      *       0.0.0.0/0            0.0.0.0/0            MAC 01:02:03:04:05:06
Chain LIMIT_2MB (1 references)
21928 1144K LIMIT_2MB  all  --  *      *       0.0.0.0/0            0.0.0.0/0            MAC 01:02:03:04:05:06
Chain LIMIT_2MB (1 references)
27960 1457K LIMIT_2MB  all  --  *      *       0.0.0.0/0            0.0.0.0/0            MAC 01:02:03:04:05:06
Chain LIMIT_2MB (1 references)
33410 1741K LIMIT_2MB  all  --  *      *       0.0.0.0/0            0.0.0.0/0            MAC 01:02:03:04:05:06
Chain LIMIT_2MB (1 references)
39129 2038K LIMIT_2MB  all  --  *      *       0.0.0.0/0            0.0.0.0/0            MAC 01:02:03:04:05:06
Chain LIMIT_2MB (1 references)
40502 2110K LIMIT_2MB  all  --  *      *       0.0.0.0/0            0.0.0.0/0            MAC 01:02:03:04:05:06

KLIENT:

root@client:~# wget noc.gts.pl/500mb.gts -O /dev/null
--2018-04-29 22:41:24--  http://noc.gts.pl/500mb.gts
Resolving noc.gts.pl... 217.153.76.178
Connecting to noc.gts.pl|217.153.76.178|:80... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: http://speedtest.ipartners.pl/500mb.gts [following]
--2018-04-29 22:41:24--  http://speedtest.ipartners.pl/500mb.gts
Resolving speedtest.ipartners.pl... 217.153.76.178
Reusing existing connection to noc.gts.pl:80.
HTTP request sent, awaiting response... 200 OK
Length: 524288000 (500M) [application/octet-stream]
Saving to: '/dev/null'

/dev/null                                                  36%[===============================================>                                                                                      ] 180.99M  --.-KB/s    eta 2m 45s ^C

### test nr 2 po wyzerowaniu tablic na routerze

root@client:~# wget noc.gts.pl/500mb.gts -O /dev/null
--2018-04-29 22:44:09--  http://noc.gts.pl/500mb.gts
Resolving noc.gts.pl... 217.153.76.178
Connecting to noc.gts.pl|217.153.76.178|:80... connected.
HTTP request sent, awaiting response... 302 Moved Temporarily
Location: http://speedtest.ipartners.pl/500mb.gts [following]
--2018-04-29 22:44:09--  http://speedtest.ipartners.pl/500mb.gts
Resolving speedtest.ipartners.pl... 217.153.76.178
Reusing existing connection to noc.gts.pl:80.
HTTP request sent, awaiting response... 200 OK
Length: 524288000 (500M) [application/octet-stream]
Saving to: '/dev/null'

/dev/null                                                  34%[============================================>                                                                                         ] 170.96M  --.-KB/s    eta 3m 21s ^C

Licząc "pi razy oko" liniowo dla 2GB danych WYJŚCIOWYCH daje około 170GB danych POBRANYCH z sieci.

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

37

Odp: Lede-limit pobierania

@mar_w
No to ręce mi opadły po Twoim poście sad
Mój "plan" zakładał dla dwóch adresów mac łącznie ustanowić dzienny limit 2 gb transferu danych (pobieranie i wysyłanie liczone razem)

Netgear R6220 + HUAWEI E3372 Hilink

38

Odp: Lede-limit pobierania

Masz rację, lekkomyślne to było.  Mała zmiana:

  IP=$(awk '/01:02:03:04:05:06/{print $1}' /proc/net/arp)
  QUOTA=$((20 * 1024 * 1024))
  iptables -N limit2gb
  iptables -A limit2gb -m quota --quota $QUOTA -j ACCEPT
  iptables -A limit2gb -j REJECT
  iptables -A forwarding_rule -j limit2gb -s $IP
  iptables -A forwarding_rule -j limit2gb -d $IP

Różnica taka że trzeba przypisać mac adres do IP, ale to przez static dhcp można zrobić.

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

39

Odp: Lede-limit pobierania

po porannej burzy mózgu smile zabrałam się do "pracy"
Mój cel to ustanowienie limitu transferu 2gb dziennie dla dwóch statycznych ip (down+up liczone razem).
Po przekroczeniu limitu,przekierowanie na lokalną stronę z informacją o jego przekroczeniu.
Serwer www utthpd zainstalowany z postu Cezarego.
Statyczne ip ustanowione poleceniem:

echo "01:02:03:04:05:06 192.168.2.200" >> /etc/ethers
echo "07:08:09:10:11:12 192.168.2.220" >> /etc/ethers

Zawartość pliku /etc/firewall.user:

  RULE=limit2gb

  PKTS=$(awk '/'$RULE'/{print $2}' /etc/quotas)
  BYTES=$(awk '/'$RULE'/{print $3}' /etc/quotas)
  IP=$(awk '/01:02:03:04:05:06/{print $1}' /proc/net/arp)
  IP=$(awk '/07:08:09:10:11:12/{print $1}' /proc/net/arp)
  QUOTA=$((2048 * 1024 * 1024))
  iptables -N $RULE
  iptables -A $RULE -m quota --quota $QUOTA -j ACCEPT
  iptables -A $RULE -j REJECT
  iptables -A forwarding_rule -j $RULE -s $IP
  iptables -A forwarding_rule -j $RULE -d $IP

Zawartość skryptu quotas-backup.sh:

#!/bin/sh
RULE=limit2gb

O=$(iptables -vxnL $RULE 2>/dev/null)
PKTS=0
BYTES=0
if [ -n "$O" ]; then
    PKTS=$(iptables -vxnL $RULE | awk '/quota:/{print $1}')
    [ -z "$PKTS" ] && PKTS=0
    BYTES=$(iptables -vxnL $RULE | awk '/quota:/{print $2}')
    [ -z "$BYTES" ] && BYTES=0
fi
FBACKUP=/etc/quotas
touch $FBACKUP
sed -i '/'$RULE'/d' $FBACKUP
echo "$RULE $PKTS $BYTES" >> $FBACKUP

QUOTA=$((2047 * 1024 * 1024))
if [ $BYTES -gt $QUOTA ]; then
  iptables -t nat -C prerouting_rule -m mac  --mac-source 01:02:03:04:05:06 -p tcp --dport 80 -j REDIRECT --to-port 33333 || iptables -t nat -A prerouting_rule -m mac  --mac-source 01:02:03:04:05:06 -p tcp --dport 80 -j REDIRECT --to-port 33333
  iptables -t nat -C prerouting_rule -m mac  --mac-source 07:08:09:10:11:12 -p tcp --dport 80 -j REDIRECT --to-port 33333 || iptables -t nat -A prerouting_rule -m mac  --mac-source 07:08:09:10:11:12 -p tcp --dport 80 -j REDIRECT --to-port 33333
else
 iptables -t nat -D prerouting_rule -m mac  --mac-source 01:02:03:04:05:06 -p tcp --dport 80 -j REDIRECT --to-port 33333 > /dev/null 2>&1
 iptables -t nat -D prerouting_rule -m mac  --mac-source 07:08:09:10:11:12 -p tcp --dport 80 -j REDIRECT --to-port 33333 > /dev/null 2>&1
fi
exit 0

Jak zwykle bardzo proszę o ocenę mojej "pracy"

Netgear R6220 + HUAWEI E3372 Hilink

40

Odp: Lede-limit pobierania

Nie, w arpie może ich jeszcze nie być w momencie uruchomienia firewalla/routera. Masz adresy w ethers to jest bierz z ethers, nie z arpa.

Druga sprawa: masz dwa IP, więc dwa zestawy -s/-d, bo teraz masz tą samą zmienną nadpisaną drugim adresem.

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

41

Odp: Lede-limit pobierania

RULE=limit2gb

  PKTS=$(awk '/'$RULE'/{print $2}' /etc/quotas)
  BYTES=$(awk '/'$RULE'/{print $3}' /etc/quotas)
  IP=$(awk '/01:02:03:04:05:06/{print $1}' /etc/ethers)
  IP=$(awk '/07:08:09:10:11:12/{print $1}' /etc/ethers)
  QUOTA=$((2048 * 1024 * 1024))
  iptables -N $RULE
  iptables -A $RULE -m quota --quota $QUOTA -j ACCEPT
  iptables -A $RULE -j REJECT
  iptables -A forwarding_rule -j $RULE -s $IP
  iptables -A forwarding_rule -j $RULE -d $IP
  iptables -A forwarding_rule -j $RULE -s $IP
  iptables -A forwarding_rule -j $RULE -d $IP

Poprawka reguły, jeśli dobrze to dam wszystkim spokój smile

Netgear R6220 + HUAWEI E3372 Hilink

42

Odp: Lede-limit pobierania

Prawie.
IP1=$(awk '/01:02:03:04:05:06/{print $2}' /etc/ethers)
IP2=$(awk '/07:08:09:10:11:12/{print $2}' /etc/ethers)
....
iptables -A forwarding_rule -j $RULE -s $IP1
iptables -A forwarding_rule -j $RULE -d $IP1
iptables -A forwarding_rule -j $RULE -s $IP2
iptables -A forwarding_rule -j $RULE -d $IP2

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

43

Odp: Lede-limit pobierania

Kłopot z logicznym myśleniem,to mój znak rozpoznawczy smile
Dziękuje za pomoc i cierpliwość.

Netgear R6220 + HUAWEI E3372 Hilink

44

Odp: Lede-limit pobierania

A teraz sprawdź czy faktycznie działa.

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

45

Odp: Lede-limit pobierania

@karolinka
Jak już się bawić to na całego.
Można by jeszcze dodać blokowanie wejścia na router z tego konkretnego MAC-a. (żeby syn/córka nie wpadł/a na pomysł (za dobrą radą kolegi) np resetu liczników). Zawsze to jakaś dodatkowa przeszkoda.

A jeszcze takie pytanie.
Gdzie sprawdzasz datę, żeby licznik mógł zostać wyzerowany po braku zasilania w pewnych godzinach?
Jest zabezpieczenie w postaci pliku FBACKUP na wypadek wyciągnięcia wtyczki z gniazdka i to jest OK.
W momencie gdy ma się coś wykonać o określonej porze np RESET liczników o północy, a nie będzie prądu to się nie wykona a potem to już będzie za późno bo będzie inna godzina.

Xiaomi AX3000T @ Netgear R6220
* DVBT2 - T230C *

46

Odp: Lede-limit pobierania

Cezary napisał/a:

A teraz sprawdź czy faktycznie działa.

Witam ponownie smile

Chciałam sprawdzić czy działa i jak zwykle u mnie kłopot.
Na próbę utworzyłam regułę:

RULE=test

  PKTS=$(awk '/'$RULE'/{print $2}' /etc/quotas)
  BYTES=$(awk '/'$RULE'/{print $3}' /etc/quotas)
  IP=$(awk '/01:02:03:04:05:06/{print $1}' /etc/ethers)
  QUOTA=$((10 * 1024))
  iptables -N $RULE
  iptables -A $RULE -m quota --quota $QUOTA -j ACCEPT
  iptables -A $RULE -j REJECT
  iptables -A forwarding_rule -j $RULE -s $IP
  iptables -A forwarding_rule -j $RULE -d $IP

Potem /etc/init.d/firewall restart
Wypluwa coś takiego :
iptables v1.4.21: host/network '01:02:03:04:05:06' not found
Try'iptables -h' or 'iptables --help' for more information.
iptables v1.4.21: host/network '01:02:03:04:05:06' not found
Try'iptables -h' or 'iptables --help' for more information.
   ! Failed with exit code 2
Pomocy smile

Netgear R6220 + HUAWEI E3372 Hilink

47

Odp: Lede-limit pobierania

Przeczytaj post 42. $2 nie $1, pierwszy jest mac, drugi ip w ethers a ty właśnie masz odczytać ip.

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

48 (edytowany przez karolinka 2018-04-30 18:55:52)

Odp: Lede-limit pobierania

Cezary dobry człowieku gdyby nie Ty to ....
Dziękuję poszło smile

Limit działa.Jeszcze raz wielkie dziękuję.
Udanej majówki dla wszystkich.

Netgear R6220 + HUAWEI E3372 Hilink

49

Odp: Lede-limit pobierania

Skoro jest informacja o przekroczeniu limitu to przydała by się też informacja że taki limit istnieje. Uruchomiłem więc stronę powitalną zgodnie z poradnikiem. Osobno działa i jedno i drugie, ale razem już nie. Przy takim firewall.user jak poniżej pojawia się strona powitalna, działa limit, ale nie pojawia się strona o przekroczeniu limitu.

root@MiFi:~# cat /etc/firewall.user
iptables -t nat -F prerouting_blokada 2>/dev/null || ( \
iptables -t nat -N prerouting_blokada; \
iptables -t nat -I PREROUTING -i br-lan -j prerouting_blokada; \
)
IP=$(uci get network.lan.ipaddr)
iptables -t nat -A prerouting_blokada ! -d $IP/32 -p tcp -j DNAT --to $IP:8080

QUOTA=$((50 * 1024 * 1024))
iptables -N mac010203040506_limit50mb
iptables -A mac010203040506_limit50mb -m quota --quota $QUOTA -j ACCEPT
iptables -A mac010203040506_limit50mb -j REJECT
iptables -A forwarding_rule -j mac010203040506_limit50mb -s 192.168.11.163
iptables -A forwarding_rule -j mac010203040506_limit50mb -d 192.168.11.163

50

Odp: Lede-limit pobierania

Bo -I PREROUTING wkłada regułę jako pierwszą w łańcuchu PREROUTING a  -A prerouting_rule dodaje do końca łańcucha następną regułę? Zobacz po licznikach, pewnie na prerouting_rule nic się nie łapie po prostu.

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