我已经使用 openwrt 设置了一个热点设备。它安装了 nodogsplash 以实现热点功能,并安装了 iptables 以限制带宽。当我测试速度限制脚本时,热点因测试目的而被禁用,因此我当时没有注意到冲突。问题是我的 iptables 脚本和 nodogsplash 都使用 iptables 上的“MARK”进行流量控制,我认为冲突从这里开始。因为这两个程序都使用指定的字符串(如“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 规则的部分。
nodogsplsh 创建的一些 iptable 规则如下
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
选项:
-d:客户端的ip地址
–哈希限制名称:一些名称,如评论
–哈希限制以上:速度限制值(单位:kb/s)