【问题标题】:ip rule with tens of thousands rules in openwrtopenwrt中具有数万条规则的ip规则
【发布时间】:2016-12-22 09:53:48
【问题描述】:

我正在设置我的 openwrt (Netgear R3800) 以通过以下 shell 脚本支持具有多个出站接口的策略路由。我将不同传出接口的 ip 列表放在文本文件中,并使用 ip rule 设置不同的 ip 表。

例如

ip route add default via $VPN1 dev $VPNDEV1 table 100
ip route add default via $VPN2 dev $VPNDEV2 table 200

for IPTO in `cat /root/routes/policy_ips1` ; do
    ip rule add to $IPTO table 100
done

for IPTO in `cat /root/routes/policy_ips2` ; do
    ip rule add to $IPTO table 200
done

脚本大部分时间都可以工作,但有时不稳定。

由于 ip 列表(文件 policy_ips1、policy_ips2)相当大。就像 10-20 千行一样,每行都是一个子网,例如“1.0.1.0/24”。我想知道这是否是一种有效的方法,因为会有数万条规则,路由器将为每个数据包查询路由策略数据库 RPDB。

另一个问题是,由于 RPDB 的优先级范围从 0 到 32767(参考:http://man7.org/linux/man-pages/man8/ip-rule.8.html),这是否意味着我不能添加超过 32765 条规则?使用ip规则有能力限制吗?路由器的计算能力(比如路由器的cpu、ram)有没有限制?

【问题讨论】:

    标签: linux ip iptables openwrt


    【解决方案1】:

    [我不确定这个问题是否适合 SO,但是]

    对于这种设置,我将使用 Netfilter(带有ipsets)来标记数据包并使用基于 fwmark 的规则来匹配 RPDB 中的数据包。喜欢

    ipset create nets100 hash:net
    ipset create nets200 hash:net
    
    for IPTO in `cat /root/routes/policy_ips1` ; do
        ipset add nets100 "$IPTO"
    done
    
    for IPTO in `cat /root/routes/policy_ips2` ; do
        ipset add nets200 "$IPTO"
    done
    
    iptables -A PREROUTING -t mangle -m set --match-set nets100 src -j MARK --set-mark 100
    iptables -A PREROUTING -t mangle -m set --match-set nets200 src -j MARK --set-mark 200
    
    ip route add default via $VPN1 dev $VPNDEV1 table 100
    ip route add default via $VPN2 dev $VPNDEV2 table 200
    
    ip rule add fwmark 100 table 100
    ip rule add fwmark 200 table 200
    

    IPset 可以轻松处理大量地址/网络,因此您拥有一个简单的 RPDB。虽然应该注意这会为数据包处理增加一些 Netfilter 开销,但在大型 RPDB 和 ipset 之间选择我会选择 ipset。

    至于优先级,我将其理解为“不超过 32767 条规则”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-01
      • 2018-03-21
      相关资源
      最近更新 更多