LINUX.ORG.RU
ФорумAdmin

Как испортить скорость и качество трафика?

 , ,


0

2

Есть проблема - дети забили на учёбу, всё свободное время уделяется онлайн-дрочильням, соцсетям, видео и прочим тиктокам, оценки в школе пробили дно. Мне нужно сознательно снизить скорость, поднять пинг и джиттер. В шейпинге трафика разбираюсь плохо.

Есть роутер на OpenWrt 23+, устройства получают постоянные аренды адреса по маку.

Закинул запрос в нейронку, после нескольких часов боданий она выдала это:

#!/bin/sh

[ ! -f /etc/bw_spoiler.enabled.yes ] && exit 0

# Hotplug скрипт для ограничения трафика и порчи пинга/джиттера по MAC/IP

IFACE=${DEVICE}
IF_UP=${ACTION}

# Конфигурация: список MAC/IP и параметры
CONFIG_FILE="/etc/bw_spoiler.conf"
MAC_LIST=""                    # Пустой по умолчанию
IP_LIST=""                     # Ваш IP
DOWNLOAD_RATE="512kbit"        # Лимит download (to client)
UPLOAD_RATE="512kbit"          # Лимит upload (from client)
PING_DELAY="100ms"             # Задержка
JITTER="80ms"                  # Джиттер
LOSS="10%"                     # Потери пакетов

# Логирование
logger -t bw_spoiler "Starting script for $IFACE $IF_UP"

# Чтение конфигурации из файла, если он есть
[ -f "$CONFIG_FILE" ] && . "$CONFIG_FILE"

# Проверка: запуск только для br-lan при поднятии
if [ "$IFACE" = "br-lan" ] && [ "$IF_UP" = "ifup" ]; then
    # Загрузка модулей
    modprobe ifb && logger -t bw_spoiler "Loaded ifb module" || logger -t bw_spoiler "Failed to load ifb module"
    modprobe sch_netem && logger -t bw_spoiler "Loaded sch_netem module" || logger -t bw_spoiler "Failed to load sch_netem module"

    # Очистка старых правил
    tc qdisc del dev br-lan root 2>/dev/null
    tc qdisc del dev br-lan ingress 2>/dev/null
    tc qdisc del dev ifb-spoiler root 2>/dev/null
    ip link del ifb-spoiler 2>/dev/null

    # Создание ifb-spoiler
    ip link add ifb-spoiler type ifb && logger -t bw_spoiler "Created ifb-spoiler" || logger -t bw_spoiler "Failed to create ifb-spoiler"
    ip link set ifb-spoiler up && logger -t bw_spoiler "Activated ifb-spoiler" || logger -t bw_spoiler "Failed to activate ifb-spoiler"

    # Download to client (egress на br-lan): HTB для лимита + netem для задержек
    tc qdisc add dev br-lan root handle 1: htb default 1 && logger -t bw_spoiler "Added qdisc to br-lan"
    tc class add dev br-lan parent 1: classid 1:1 htb rate 10gbit burst 0b cburst 0b
    tc class add dev br-lan parent 1:1 classid 1:20 htb rate $DOWNLOAD_RATE ceil $DOWNLOAD_RATE burst 1600b cburst 1600b
    tc qdisc add dev br-lan parent 1:20 handle 20: netem delay $PING_DELAY $JITTER loss $LOSS && logger -t bw_spoiler "Added netem to br-lan"

    # Upload from client (ingress через ifb-spoiler)
    tc qdisc add dev br-lan ingress && logger -t bw_spoiler "Added ingress qdisc to br-lan"
    tc filter add dev br-lan parent ffff: protocol all u32 match u32 0 0 action mirred egress redirect dev ifb-spoiler && logger -t bw_spoiler "Added ingress filter"
    tc qdisc add dev ifb-spoiler root handle 1: htb default 1
    tc class add dev ifb-spoiler parent 1: classid 1:1 htb rate 10gbit burst 0b cburst 0b
    tc class add dev ifb-spoiler parent 1:1 classid 1:20 htb rate $UPLOAD_RATE ceil $UPLOAD_RATE burst 1600b cburst 1600b
    tc qdisc add dev ifb-spoiler parent 1:20 handle 20: netem delay $PING_DELAY $JITTER loss $LOSS && logger -t bw_spoiler "Added netem to ifb-spoiler"

    # tc filters для классификации по IP (download: dst IP, upload: src IP)
    for ip in $IP_LIST; do
        tc filter add dev br-lan parent 1: protocol ip prio 1 u32 match ip dst $ip flowid 1:20 && logger -t bw_spoiler "Added IP filter for br-lan dst $ip"
        tc filter add dev ifb-spoiler parent 1: protocol ip prio 1 u32 match ip src $ip flowid 1:20 && logger -t bw_spoiler "Added IP filter for ifb-spoiler src $ip"
    done

    # tc filters для классификации по MAC (если список не пустой; download: ether daddr, upload: ether saddr)
    for mac in $MAC_LIST; do
        # Преобразование MAC в hex для u32 (offset -14 для ether src, -8 для daddr; negative offsets from nexthdr)
        mac_hex=$(echo $mac | sed 's/://g' | tr 'a-f' 'A-F')
        mac1=$(echo 0x${mac_hex:0:8})
        mac2=$(echo 0x${mac_hex:8:4}0000)
        tc filter add dev br-lan parent 1: protocol all prio 2 u32 match u32 $mac1 0xffffffff at -8 match u16 $mac2 0xffff0000 at -4 flowid 1:20 && logger -t bw_spoiler "Added MAC filter for br-lan daddr $mac"
        tc filter add dev ifb-spoiler parent 1: protocol all prio 2 u32 match u32 $mac1 0xffffffff at -14 match u16 $mac2 0xffff0000 at -10 flowid 1:20 && logger -t bw_spoiler "Added MAC filter for ifb-spoiler saddr $mac"
    done
fi

# Cleanup при отключении интерфейса
if [ "$IFACE" = "br-lan" ] && [ "$IF_UP" = "ifdown" ]; then
    tc qdisc del dev br-lan root 2>/dev/null
    tc qdisc del dev br-lan ingress 2>/dev/null
    tc qdisc del dev ifb-spoiler root 2>/dev/null
    ip link del ifb-spoiler 2>/dev/null
    logger -t bw_spoiler "Cleaned up for $IFACE"
fi

Скрипт помещается в hotplug для br-lan. Файлы настройки с переопределениями переменных и списков IP и MAC, флагового файла для переключения активности - в /etc. Вроде должно работать:

root@Xi4A:~# tc -s class show dev br-lan
class htb 1:1 root rate 10Gbit ceil 10Gbit burst 0b cburst 0b
 Sent 54508411 bytes 45848 pkt (dropped 0, overlimits 37205 requeues 0)
 backlog 0b 0p requeues 0
 lended: 0 borrowed: 0 giants: 0
 tokens: 13 ctokens: 13

class htb 1:20 parent 1:1 leaf 0: prio 0 rate 1Mbit ceil 1Mbit burst 1600b cburst 1600b
 Sent 54508411 bytes 45848 pkt (dropped 5157, overlimits 26037 requeues 0)
 backlog 0b 0p requeues 0
 lended: 45848 borrowed: 0 giants: 0
 tokens: 188000 ctokens: 188000

root@Xi4A:~# tc -s class show dev ifb-spoiler
class htb 1:1 root rate 10Gbit ceil 10Gbit burst 0b cburst 0b
 Sent 6392299 bytes 42984 pkt (dropped 0, overlimits 1153 requeues 0)
 backlog 0b 0p requeues 0
 lended: 1 borrowed: 0 giants: 0
 tokens: 14 ctokens: 14

class htb 1:20 parent 1:1 leaf 0: prio 0 rate 1Mbit ceil 1Mbit burst 1600b cburst 1600b
 Sent 6392239 bytes 42983 pkt (dropped 4670, overlimits 492 requeues 0)
 backlog 0b 0p requeues 0
 lended: 42590 borrowed: 0 giants: 0
 tokens: 192500 ctokens: 192500

root@Xi4A:~# tc qdisc show dev br-lan
qdisc htb 1: root refcnt 2 r2q 10 default 0x1 direct_packets_stat 87499 direct_qlen 1000
qdisc netem 20: parent 1:20 limit 1000 delay 400ms  100ms loss 10%
qdisc ingress ffff: parent ffff:fff1 ----------------
root@Xi4A:~# tc qdisc show dev ifb-spoiler
qdisc htb 1: root refcnt 2 r2q 10 default 0x1 direct_packets_stat 106879 direct_qlen 32
qdisc netem 20: parent 1:20 limit 1000 delay 400ms  100ms loss 10%

Но, во-первых, скорость по спидтестам ограничивается согласно настройкам только для входящего трафика, а для исходящего трепыхается на уровне 0,5 Мб/с независимо от настроек, а во-вторых, такое ощущение, что это не работает вне скачивания файлов и синтетических спидтестов - жалоб нет (обычно при проблемах с интернетами они сразу бегут жаловаться), подсматриваю по vnc - смотрят ютуб без проблем, а скорость vnc-трафика между моим и их устройствами достигает 0,5 Гб/с (судя по графикам в диспетчере задач винды), хотя если ради теста я вношу в список адрес своего компа - у меня люто лагает даже консольный ssh до роутера. Стек ipv6 не поддерживается провайдером и отключен на роутере на системном уровне. Logread показывает построчное внесение адресов в список, для которых должно применяться ограничение, и эти адреса правильные.

Что-то в скрипте не так? Или, может быть, есть более правильный и надежный способ, чтобы решить эту проблему? Прошу помочь.

Ответ на: комментарий от router

Спасибо, почитаю.

С яйцами всё в порядке, обсуждали много раз, и по-хорошему, и по-плохому. Кивают, соглашаются с доводами, но продолжают действовать по-прежнему.

z0mb1e_kgd
() автор топика

всё свободное время уделяется

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

HerbertHoover
()

Не мучай свои мозг «tc filter», используй iptables -j CLASSIFY или ipset (-j SET --map-prio).
Единственно, что нужно не забыть - создать ipset c опцией skbinfo, иначе --map-prio не будет работать.

Я бы не стал вешать классы/очереди на мост. Я бы вешал их на физические интерфейсы.

Зачем тебе ifb? Это нужно в очень ограниченном числе случаев и это явно не твой случай.

У тебя роутер, который всегда передает трафик. Из WAN в LAN и из LAN в WAN. Входящий трафик тормозится при передаче в LAN, исходящий при передаче в WAN.

Я обычно через htbinit генерю классы/очереди, а трафик маркирую через iptables/ipset.

vel ★★★★★
()

В шейпинге трафика разбираюсь плохо.

Закинул запрос в нейронку, после нескольких часов боданий она выдала

Ну то есть ты потратил несколько часов на электронного болвана вместо чтения документации и на голубом глазу упрекаешь детей в прокрастинации?

cobold ★★★★★
()
Последнее исправление: cobold (всего исправлений: 1)

Значит учеба - это не их. С чем и поздравляю.

James_Holden ★★★★★
()

Мне нужно сознательно снизить скорость, поднять пинг и джиттер

Работаешь в РКН?

NyXzOr ★★★★★
()

Как нассать детям в тапки, расписавшись в своей беспомощности: выставить MAC-адрес одного из хостов, совпадающий с MAC-адресом роутера (Ethernet или Wi-Fi в зависимости от того, что нужно испортить), аналогично заспуфить MAC устройства ребенка, выставить крохотный или огромный MTU, зафлудить детские устройства пакетами, устроить DoS, забив NAT на роутере мусорными соединениями, пупинизировать витую пару тщательно подобранной малой индуктивностью… Кароч, ждём от тебя тему «Как установить Кали».

И да, всё это не поможет. А может даже усугубит, потому что азартные игры именно за счёт элемента неожиданности и втягивают.

Как нормально осуществлять родительский контроль: осилить и настроить родительский контроль, провести беседу с детьми, обозначив границы.

И да, тут психолог не помешает: твой личный, семейный, детский… какой-нибудь. Где-то что-то пошло не так, если батя спрашивает на форуме, как подпортить интернет, чтобы дети учились.

Vidrele ★★★★★
()

Просто подожди и оборудование само деградирует.

anonymous
()

Кстати я балдею с ТС-а. Он думает что учёба из под палки его детям чем-то поможет (с учётом того что они сами учиться не очень то хотят). Сколько его открытий чудных ждёт впереди.

anonymous
()

Мда… Бедные дети.

CrX ★★★★★
()

Хочешь с младых ногтей закалить детей в укрощении вычислительных систем? А что, может, им понравится игра — будут админами.

Ну или нет.

Nervous ★★★★★
()
Ответ на: комментарий от usi_svobodi

Простое решение в виде отрубить инет возможно имеет простое решение со стороны детей + получите минус в карму с их стороны. А так инет как бэ есть, но он лажает, папка с мамкой не виноваты, это он сам такой, пишите детки письма в спортлото у папки всё робит.

anc ★★★★★
()
Ответ на: комментарий от anc

А так инет как бэ есть, но он лажает, папка с мамкой не виноваты

я думал тема про лень, а не про умственную отсталость…

usi_svobodi
()
Ответ на: комментарий от usi_svobodi

я думал тема про лень, а не про умственную отсталость…

ЯННП разверните вашу мысль пжлст.

anc ★★★★★
()

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

Но в целом соглашусь, что решать надо административно - устанавливать границы, договариваться и заменять игры чем-то другим.

skyman ★★★★★
()
Ответ на: комментарий от anc

Ну да, дети то дураки, не видят что у папки с мамкой все работает и когда дети приходят к кому-то из сверстников или в школу, то тоже работает на тех же устройствах

cobold ★★★★★
()

Прошу прощения за оффтоп, но не в интернете проблема. И не в его принципиальном наличии. Если человек хочет прокрастинировать, то хоть отключи интернет совсем – будет балду пинать и без интернета, и без компьютера.

anonymous
()
Ответ на: комментарий от anonymous

Тем более, обманывать детей нельзя.

anonymous
()
Ответ на: комментарий от anonymous

Если человек хочет прокрастинировать

Дело не в прокрастинации, дело в интернет-зависимости у несмышлёных детей.

firkax ★★★★★
()
Ответ на: комментарий от anc

но он лажает

«Папа, купи новый роутер», «Папа, подключи нормального провайдера», «Папа, давай виндовс поставим»

– Папа, водка подорожала, ты будешь меньше пить!

– Нет, сынок, ты будешь меньше есть.⁠⁠

NyXzOr ★★★★★
()

Решение административных проблем техническими методами.

Ты не слышал что ли истории про мам забирающих провод от блока питания компа уходя на работу (и истории как дети покупали отдельный провод и ныкали его в квартире).

Если стоит цель ограничить использование девайсов, то они просто изымаются и выдаются в определённые часы или за определённые достижения. Можно вообще самому в них не разбираться. До определённого возраста это работает, после поздно пить боржоми.

А тут какая-то попытка по-тихому поднасрать, чтобы никто не видел и избежать прямой конфронтации.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 2)

Есть проблема - дети забили на учёбу, всё свободное время уделяется онлайн-дрочильням, соцсетям, видео и прочим тиктокам, оценки в школе пробили дно. Мне нужно сознательно снизить скорость, поднять пинг и джиттер. В шейпинге трафика разбираюсь плохо.

Ты пытаешься технически решить не техническую проблему. Так не работает.

Если волнует учеба, то поставь им КПИ по учебе и отстань от тиктоков.

ya-betmen ★★★★★
()
Ответ на: комментарий от KivApple

А тут какая-то попытка по-тихому поднасрать, чтобы никто не видел и избежать прямой конфронтации

В этом кстати очень явное такое лоховство аффтара в стае. Альфасамец и главарь так не действует, его слушают. А тут реально поднасёр втихаря для избежания открытого конфликта, то есть уже психологический прогиб под врага (детей). А дети твой поднасер долго терпеть не будут, скажут - во батек у нас тупой, оплачивает какое-то не рабочее говно вместо инторнета, жесть он лошара, сам сидит жрет кактус там в своем проперженном углу как скуф, фу отвратительно! И пойдут через LTE силеть или найдут пароль соседа wifi.

lesopilorama
()

Тебе нужен ремень, а не вот это вот все

vasya_pupkin ★★★★★
()

Все в tor засунуть, будет уныло и медленно

One ★★★★★
()
Ответ на: комментарий от anonymous

У детей обычно мобилы есть, нередко с безлимитным в «семейном» номере

One ★★★★★
()
Ответ на: комментарий от usi_svobodi

Ещё как не догадаются, главное творчески к вопросу подойти.

anc ★★★★★
()

Неправильно делаешь, ты у детей на поводу идешь. А должно быть наоборот

Для начала надо бы объяснить детям зачем им учиться. Делать дела из под палки эффективно человек не может, ему надо понимание зачем лично ему делать именно это

karton1 ★★★★★
()
Последнее исправление: karton1 (всего исправлений: 1)

Не моё дело как воспитывать детей(моё личное мнение это тупо) но DPI, squid в помощь
Я бы поставил DPI только потому что дети научились его обманывать(тренировка мозга скажем так)

SPRATAY ★★
()
Последнее исправление: SPRATAY (всего исправлений: 1)

в кинетиках есть просто опция для каждого подключённого клиента «Ограничиить скорость». Слава кинетикам! И да, подобные меры не заставят детей учиться лучше, просто найдут другое занятие заместо учёбы и не факт, что лучше онлайн-дрочилен. Я вот в детстве по подвалам с гопниками начал сидеть, когда мамка спрятала БП от денди, а денях на новый не было.

SpaceRanger ★★★
()
Ответ на: комментарий от z0mb1e_kgd

Ремнём по жопе? У нас в детсве работало :) Ноут отобрать, инет вообще отрубить…

Zhbert ★★★★★
()
Ответ на: комментарий от cobold

Щас это скорее норма. Я даже смеяться с таких уже перестал…

Zhbert ★★★★★
()
Ответ на: комментарий от Nervous

У многих путь начинался с кабеля, который забрали родители…

Zhbert ★★★★★
()
Ответ на: комментарий от anc

минус в карму с их стороны

Ну хрен знает. Если они болт клали на его просьбы, то тут как-то на минусы в карму уже пофигу должно быть, как и им на его мнение.

Zhbert ★★★★★
()
Ответ на: комментарий от cobold

На это надо ответить ещё бóльшим газлайтингом. Пусть мама говорит, что замедляет, ибо нефиг, а папа говорит, что это всё на стороне провайдера и вообще у гугла сервера медленные и устарели. Учиться надо у лучших — у Минцифры и РКН сработало же, когда ютуб «замедляли». Ну и что, что никто не поверил — схавали же. Вот и дети схавают. Потом припомнят, конечно, но разве не ради этого всё и затевается?

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)

Есть проблема - дети забили на учёбу, всё свободное время уделяется онлайн-дрочильням, соцсетям, видео и прочим тиктокам, оценки в школе пробили дно.

Как-то так

LongLiveUbuntu ★★★★★
()
Ответ на: комментарий от Zhbert

минус в карму с их стороны

Ну хрен знает. Если они болт клали на его просьбы, то тут как-то на минусы в карму уже пофигу должно быть, как и им на его мнение.

Такое чувство, что вы были примерным паймальчиком и выполняли прям все просьбы родителей.

anc ★★★★★
()
Ответ на: комментарий от Zhbert

Ну а чего тогда такое пишите? Вот вспоминаю наше детство, нам не запрещали играть в игрушки ( я не про компьютерные, их у нас не было), гулять где хотим, но были обязательные требования типа сделать уроки, помыть посуду, сходить в магазин (а сходить в магазин у нас было то ещё мероприятие, очереди в кассы в универсаме это с час простоять), убрать комнату... и ещё придти домой с прогулки не позднее N часов.
Вот представьте, что из-за оценок вас наказывают в виде «отнимем все игрушки и запретим гулять». Хотя запрет на прогулки в детстве я однажды схлопотал, но там было вполне обосновано (не помню за какой именно из косяков :) ) и это не было связано с учебой.

anc ★★★★★
()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от anc

но были обязательные требования типа сделать уроки, помыть посуду, сходить в магазин (а сходить в магазин у нас было то ещё мероприятие, очереди в кассы в универсаме это с час простоять), убрать комнату… и ещё придти домой с прогулки не позднее N часов.

Ну да, так же было. А ещё в дендик играть не больше часа и не позже 9 вечера :)

Вот представьте, что из-за оценок вас наказывают в виде «отнимем все игрушки и запретим гулять».

Не, так я как раз о том, что ты сам выше написал → идешь гулять/играться, когда сделал взятые (вменённые тебе родителями) обязанности. А не просто послал в задницу и продолжил смотреть в тыркток.

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

Хотя тут ещё играет роль возраст детей. Где-то с 12 до 18 у мальчиков может проявится ярое нежелание ничего делать и желание посылать в задницу.

Zhbert ★★★★★
()
Ответ на: комментарий от Zhbert

А ещё в дендик играть не больше часа и не позже 9 вечера :)

Вот! Вы все-таки однозначно сильно моложе :)

Не, так я как раз о том, что ты сам выше написал → идешь гулять/играться, когда сделал взятые (вменённые тебе родителями) обязанности. А не просто послал в задницу и продолжил смотреть в тыркток.

Понял. Полностью поддерживаю!

anc ★★★★★
()
Ответ на: комментарий от frunobulax

Не, он хочет свой тикток - ковырять роутер.

Вообще, дети - отражение родителей - Как испортить скорость и качество трафика? (комментарий)

Обе стороны избегают прямой конфронтации. Родитель не может открыто ввести санкции (забрать девайс или полностью отключить интернет и выдвинуть условия), а хочет по-тихому поднасрать, чтобы на него не подумали. Дети с родителем не спорят («да не нужна нам эта твоя школа, мы будем успешными тикток блоггерами»), а соглашаются со всем, что скажет родитель (тоже избегание конфронтации), но не меняют поведение.

Чтобы наладить оценки детям нужно взаимодействовать с заданиями. Чтобы скорректировать поведение детей родителю нужно взаимодействовать с детьми (в том числе быть готовым открыто применять поощрения и наказания, а не только говорить правильные вещи и получать правильные реакции). Но дети вместо уроков выбирают взаимодействие с тиктоком, а ТС вместо взаимодействия с детьми выбирает взаимодействие с линуксом на роутере (и это не является даже косвенным взаимодействием с детьми, потому что ТС признался, что в идеале дети не должны догадаться, что это он сделал).

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 3)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)