Odp: Lede-limit pobierania
Tak, przeczytaj poradnik.
Nie jesteś zalogowany. Proszę się zalogować lub zarejestrować.
eko.one.pl → Oprogramowanie / Software → Lede-limit pobierania
Strony Poprzednia 1 2 3 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
Tak, przeczytaj poradnik.
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ć?
"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.
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ć.
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.htmlto 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
fiPrzy 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ć.
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łę.
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.
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:12Zawartość 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 0Proszę rzuć fachowym okiem czy nie błądze we mgle ![]()
tak i tak. W sumie sprawdź zamiast pytać ![]()
Jeszcze raz dziękuje.
@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 ^CLicząc "pi razy oko" liniowo dla 2GB danych WYJŚCIOWYCH daje około 170GB danych POBRANYCH z sieci.
@mar_w
No to ręce mi opadły po Twoim poście ![]()
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)
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ć.
po porannej burzy mózgu
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/ethersZawartość 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 $IPZawartość 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 0Jak zwykle bardzo proszę o ocenę mojej "pracy"
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.
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 $IPPoprawka reguły, jeśli dobrze to dam wszystkim spokój ![]()
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
Kłopot z logicznym myśleniem,to mój znak rozpoznawczy ![]()
Dziękuje za pomoc i cierpliwość.
A teraz sprawdź czy faktycznie działa.
@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.
A teraz sprawdź czy faktycznie działa.
Witam ponownie ![]()
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 $IPPotem /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 ![]()
Przeczytaj post 42. $2 nie $1, pierwszy jest mac, drugi ip w ethers a ty właśnie masz odczytać ip.
Cezary dobry człowieku gdyby nie Ty to ....
Dziękuję poszło ![]()
Limit działa.Jeszcze raz wielkie dziękuję.
Udanej majówki dla wszystkich.
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
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.
Strony Poprzednia 1 2 3 Następna
Zaloguj się lub zarejestruj by napisać odpowiedź
eko.one.pl → Oprogramowanie / Software → Lede-limit pobierania
Forum oparte o PunBB, wspierane przez Informer Technologies, Inc