Главная » 2016 » Июль » 18 » [NET] Еще инфа для SNR-CPE-W4N
21:00
[NET] Еще инфа для SNR-CPE-W4N

Полезняшки для настройки cron на зухелях.

Копипаста со старого форумя зухеля, так что определенные правки понадобятся.


Осознал потребность в теме, освещающей очень распространённый вопрос:

есть какие нибудь наработки по отключению интернет через cron на конкретном ip-адресе или mac-адресе? Это реально выполнить?

Или ещё:

возможно ли сделать пакет, в котором будет реализована работа wifi по расписанию(Wireless LAN Scheduling)?

Итак, включаем/выключаем инет по расписанию(применительно к Кинетику и Гиге):
1) На роутере должна быть установлена система пакетов Zyxmonа
2) Идем в веб интерфейсе на закладку "Фильтры", "MAC-адреса", добавляем MAC-адреса нужных компов
и выбираем "Режим фильтра MAC-адресов" "Черный список". Т.о, изначально(после загрузки роутера) интернет для этих адресов будет заблокирован.
3) Создадим в папке /media/DISK_A1/system/usr/sbin  (можно и в другой - я делал в этой) 2 файла-скрипта:
ineton.sh с содержимым:

#!/bin/sh

iptables -D FORWARD -m mac --mac-source 00:0C:29:92:F1:6F -j DROP
logger "Internet turned on"

и inetoff.sh с содержимым:

#!/bin/sh

iptables -I FORWARD -m mac --mac-source 00:0C:29:92:F1:6F -j DROP
logger "Internet turned off"

Здесь 00:0C:29:92:F1:6F  - MAC адрес устройства(компьютера), который мы будем блокировать.
Если таких несколько, в каждый из файлов пишем соответствующее количество строк iptables с нужными MAC адресами.
Также, не забываем установить этим файлам атрибут "исполняемый":

chmod +x /media/DISK_A1/system/usr/sbin/ineton.sh
chmod +x /media/DISK_A1/system/usr/sbin/inetoff.sh

4) Переходим к настройке "планировщика задач" cron. (Его не нужно устанавливать через opkg  - cron уже встроен в расширенную систему Zyxmonа)
Правим файл /media/DISK_A1/system/etc/crontabs/root
Вот пример, чего должно получиться:

SHELL=/bin/sh
MOUNT="/media/DISK_A1/system"
PATH=$MOUNT/bin:$MOUNT/sbin:$MOUNT/usr/bin:$MOUNT/usr/sbin:/sbin:/usr/sbin:/bin:/usr/bin
MAILTO=""
HOME=/
# ---------- ---------- Default is Empty ---------- ---------- #
# Please remove every minute task. It is for checking puposes
#*/1 * * * * logger "Test of cron every minute"
0 8 */1 * * ineton.sh
0 22 */1 * * inetoff.sh
#

В данном примере, интернет будет включаться в 8:00 каждый день и отключаться в 22:00 каждый день.
Правила установки времени выполнения (всех этих * и циферок) легко можно найти в инете.
Осталось только переименовать файл /media/DISK_A1/system/etc/init.d/K02cron в S02cron(и дать команду на его запуск:

/media/DISK_A1/system/etc/init.d/S02cron start

) и всё, - готово!

С включением/выключением WiFi всё строго аналогично, только назовём скрипты wifion.sh

#!/bin/sh
 
/usr/sbin/iwpriv ra0 set RadioOn=1
/bin/rm -f /var/tmp/radio_off

и wifioff.sh

#!/bin/sh
 
/usr/sbin/iwpriv ra0 set RadioOn=0

Отредактировано Dr.Acid (2013-02-22 22:03:01)


ZimniY :

Забыл тогда сказать, что можно сделать и наоборот - белый список + "открытие" доступа "посторонним" макам по расписанию.

Да, можно и наоборот. Это к недостатку описанного метода - если, например, что-нибудь заглючило и роутер пришлось перезагрузить, то "управляемым"  клиентам придётся ждать, когда наступит время их "подключения" к инету, даже если они уже в нём были(т.е. следующего включения). Собственно, и наоборот - в методе с белым списком, как ты писал, всегда можно "включить" всем инет, просто перезагрузив роутер. Тут уже выбор за пользователем.
Вот, приведу здесь выдержку из таблицы(iptables -nvL) для всех трех случаев:


1) Нет никаких фильтров:

 

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination
 0 0 ACCEPT all -- ppp+ ppp+ 0.0.0.0/0 0.0.0.0/0
 0 0 DROP all -- !br0 ra0 0.0.0.0/0 0.0.0.0/0
 0 0 ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0 state NEW
 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

"Белый" список - единственный MAC 00:0C:29:92:F1:6F

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination
 0 0 ACCEPT all -- ppp+ ppp+ 0.0.0.0/0 0.0.0.0/0
 0 0 DROP all -- !br0 ra0 0.0.0.0/0 0.0.0.0/0
 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 MAC 00:0C:29:92:F1:6F
 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

Здесь всего 1 мак адрес, но не забывайте, что адрес компа, ч которого производится настройка роутера тоже обязательно должен быть внесен в белый список.
"Черный" список - единственный MAC 00:0C:29:92:F1:6F

Chain FORWARD (policy DROP 0 packets, 0 bytes)
 pkts bytes target prot opt in out source destination
 0 0 ACCEPT all -- ppp+ ppp+ 0.0.0.0/0 0.0.0.0/0
 0 0 DROP all -- !br0 ra0 0.0.0.0/0 0.0.0.0/0
 4 336 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 MAC 00:0C:29:92:F1:6F
 0 0 ACCEPT all -- br0 * 0.0.0.0/0 0.0.0.0/0 state NEW
 0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

 

<скрыть спойлер>

Думаю, теперь будет понятно, как (по аналогии), сделать вариант и с белым списком.

А так - почитал, всё должно быть понятно даже школьнику. Советую вынести в WIKI.

Ну, я постарался!  wink
Насчет вики уже подумывал - чтож, если пройдёт "приемку" здесь - действительно, пожалуй, напишу в вики.

Отредактировано Dr.Acid (2013-02-23 22:19:42)


imalv26 :
Dr.Acid :

интернет для этих адресов будет заблокирован.

или будет заблокировано полностью подключение к роутеру(как домашнюю сеть)?
билоб интересней если-бы только интернет.

В данном случае, полностью. Это так сделано у Заксель, имейте ввиду - в приведённом примере я просто сделал по образцу. Для того, чтобы был заблокирован только инет, достаточно сделать так:

iptables -I FORWARD -o ra0 -m mac --mac-source 00:0C:29:92:F1:6F -j DROP

Т.е. явно указать в правиле выходной интерфейс (в моем случае это ra0)
Соответственно, разблокировка будет:

iptables -D FORWARD -o ra0 -m mac --mac-source 00:0C:29:92:F1:6F -j DROP

В этом случае, через веб вообще ненадо ничего включать, а оставить только скрипты. Ну ещё можно стартовый скрипт сделать - для установки начального состояния.

Отредактировано Dr.Acid (2013-02-23 23:22:50)


S_Bugaev :

есть ещё один похожий вопрос -  какой командой вообще подключить/отключить интернет-соединение? т.е. не трогать клиентов, а имитировать нажатие кнопки "подключить/отключить" интернет на странице "подключение к интернету" в мониторе состояния. Я так понимаю, будет как минимум 2 варианта - если используется PPTP/L2TP/PPoE и т.п. туннель и когда нужно вообще отключить WAN - скажем, в случае IPoE.

А вариант не с отключением WAN, а с блокированием прохождения пакетов на/с него не устроит?
Если устроит, то можно обойтись одной/несколькими "универсальными" командами iptables (собственно, частный случай приведённого выше фильтра по мак-адресу):

iptables -I FORWARD -o ppp0 -j DROP

Включаем, соответственно:

iptables -D FORWARD -o ppp0 -j DROP

Это для случая PPTP/L2TP/PPoE , для IPoE вместо ppp0 будет eth2.2

В общем, вариантов (задач и их решений) море - каждый может подобрать под себя, а общий принцип, я надеюсь, понятен.


 

Категория: Железо | Просмотров: 980 | Добавил: davis74 | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *: