Осознал потребность в теме, освещающей очень распространённый вопрос:
есть какие нибудь наработки по отключению интернет через 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)
Забыл тогда сказать, что можно сделать и наоборот - белый список + "открытие" доступа "посторонним" макам по расписанию.
Да, можно и наоборот. Это к недостатку описанного метода - если, например, что-нибудь заглючило и роутер пришлось перезагрузить, то "управляемым" клиентам придётся ждать, когда наступит время их "подключения" к инету, даже если они уже в нём были(т.е. следующего включения). Собственно, и наоборот - в методе с белым списком, как ты писал, всегда можно "включить" всем инет, просто перезагрузив роутер. Тут уже выбор за пользователем.
Вот, приведу здесь выдержку из таблицы(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.
Ну, я постарался!
Насчет вики уже подумывал - чтож, если пройдёт "приемку" здесь - действительно, пожалуй, напишу в вики.
Отредактировано Dr.Acid (2013-02-23 22:19:42)
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)
есть ещё один похожий вопрос - какой командой вообще подключить/отключить интернет-соединение? т.е. не трогать клиентов, а имитировать нажатие кнопки "подключить/отключить" интернет на странице "подключение к интернету" в мониторе состояния. Я так понимаю, будет как минимум 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
В общем, вариантов (задач и их решений) море - каждый может подобрать под себя, а общий принцип, я надеюсь, понятен.