%20%D0%BF%D0%B5%D1%80%D0%B5%D1%81%D1%82%D0%B0%D0%B5%D1%82%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D1%82%D1%8C%2C%20%D0%B5%D1%81%D0%BB%D0%B8%20%D0%B2%D0%B2%D0%B5%D0%B4%D0%B5%D0%BD%D1%8B%20%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0%20iptables%20-%20hashlimit%20(OpenWRT).png)
Я настроил устройство точки доступа с помощью OpenWRT. На нем установлен nodogsplash для функций точки доступа и iptables для ограничения пропускной способности. Когда я тестировал скрипт ограничения скорости, точка доступа была отключена для целей тестирования, поэтому я тогда не заметил конфликта. Проблема в том, что и мой скрипт с iptables, и nodogsplash используют "MARK" в iptables для управления трафиком, и конфликт начинается здесь, я думаю. Потому что обе программы помечают трафик указанными ими строками, например "0xa". Есть ли способы исправить эту проблему или какой-либо другой способ контролировать пропускную способность по IP?
iptables -t nat -A prerouting_rule -m mac --mac-source 1c:91:48:xx:xx:xx -j MARK --set-mark 0x0A -m comment --comment "PC"
iptables -t nat -A prerouting_rule -m mark --mark 0xA -j CONNMARK --save-mark
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -A forwarding_rule -m mark --mark 0xA -m conntrack --ctstate ESTABLISHED,RELATED -m hashlimit --hashlimit-name "Limit" --hashlimit-above 24kb/s -j DROP
Это часть моего скрипта, которая создает правила iptables.
Некоторые из правил iptable, созданных nodogsplsh, приведены ниже.
DROP all -- anywhere anywhere mark match 0x10000/0x30000
ndsAUT all -- anywhere anywhere mark match 0x30000/0x30000
ACCEPT all -- anywhere anywhere mark match 0x20000/0x30000
Я стараюсь давать достаточно информации, но не слишком много :) Надеюсь, этого достаточно.
решение1
Если кому-то нужно решение;
iptables -A forwarding_rule -d 192.168.1.10 -m hashlimit --hashlimit-name "speedLimit" --hashlimit-above 100kb/s -j DROP
параметры:
-д:IP-адрес клиента
--hashlimit-имя:какое-то имя, как комментарий
--hashlimit-выше:значение ограничения скорости в кб/с