openwrt-mwan3的分析

mwan3_ifupdown

    mwan3_set_general_iptables
        创建自定义链:
        mwan3_ifaces
        mwan3_connected --> $IPS create mwan3_connected hash:net
            $IPT -A mwan3_connected -m set --match-set mwan3_connected dst -j MARK --set-xmark 0xff00/0xff00
        mwan3_track
        mwan3_rules
        mwan3_hook
            $IPT -A mwan3_hook -j CONNMARK --restore-mark --nfmask 0xff00 --ctmask 0xff00
            $IPT -A mwan3_hook -m mark --mark 0x0/0xff00 -j mwan3_ifaces
            $IPT -A mwan3_hook -m mark --mark 0x0/0xff00 -j mwan3_connected
            $IPT -A mwan3_hook -m mark --mark 0x0/0xff00 -j mwan3_track
            $IPT -A mwan3_hook -m mark --mark 0x0/0xff00 -j mwan3_rules
            $IPT -A mwan3_hook -j CONNMARK --save-mark --nfmask 0xff00 --ctmask 0xff00
            $IPT -A mwan3_hook -m mark ! --mark 0xff00/0xff00 -j mwan3_connected
        $IPT -A PREROUTING -j mwan3_hook
        $IPT -A OUTPUT -j mwan3_hook
        $IPT -F mwan3_rules
    
    
    mwan3_set_general_rules
        $IP rule add pref 2253 fwmark 0xfd00/0xff00 blackhole
        $IP rule add pref 2254 fwmark 0xfe00/0xff00 unreachable
    
    
    mwan3_set_iface_iptables
        $IPT -N mwan3_iface_$INTERFACE
        $IPT -F mwan3_iface_$INTERFACE
        $IPT -D mwan3_ifaces -m mark --mark 0x0/0xff00 -j mwan3_iface_$INTERFACE &> /dev/null
        [ifup]
            $IPT -I mwan3_iface_$INTERFACE -i $DEVICE -m set --match-set mwan3_connected src -m mark --mark 0x0/0xff00 -m comment --comment "default" -j MARK --set-xmark 0xff00/0xff00
            $IPT -A mwan3_iface_$INTERFACE -i $DEVICE -m mark --mark 0x0/0xff00 -m comment --comment "$INTERFACE" -j MARK --set-xmark $(($iface_id*256))/0xff00
            $IPT -A mwan3_ifaces -m mark --mark 0x0/0xff00 -j mwan3_iface_$INTERFACE
        [ifdown]
            $IPT -X mwan3_iface_$INTERFACE
    
    mwan3_set_iface_route
        $IP route flush table $iface_id
        [ $ACTION == "ifup" ] && $IP route add table $iface_id default $route_args
    
    mwan3_set_iface_rules
        while [ -n "$($IP rule list | awk '$1 == "'$(($iface_id+1000)):'"')" ]; do
            $IP rule del pref $(($iface_id+1000))
        done

        while [ -n "$($IP rule list | awk '$1 == "'$(($iface_id+2000)):'"')" ]; do
            $IP rule del pref $(($iface_id+2000))
        done

        [ $ACTION == "ifup" ] && $IP rule add pref $(($iface_id+1000)) iif $DEVICE lookup main
        [ $ACTION == "ifup" ] && $IP rule add pref $(($iface_id+2000)) fwmark $(($iface_id*256))/0xff00 lookup $iface_id
    
    
    [ $ACTION == "ifup" ] && mwan3_track


mwan3_set_connected_iptables
    mwan3_set_connected_iptables()
    {
        local connected_network

        if $IPT -S mwan3_connected &> /dev/null; then

            $IPS create mwan3_connected_temp hash:net

            for connected_network in $($IP route | awk '{print $1}' | egrep '[0-9]{1,3}(\.[0-9]{1,3}){3}'); do
                $IPS -! add mwan3_connected_temp $connected_network
            done

            for connected_network in $($IP route list table 0 | awk '{print $2}' | egrep '[0-9]{1,3}(\.[0-9]{1,3}){3}'); do
                $IPS -! add mwan3_connected_temp $connected_network
            done

            $IPS add mwan3_connected_temp 224.0.0.0/3
            $IPS swap mwan3_connected_temp mwan3_connected
            $IPS destroy mwan3_connected_temp

        fi
    }
            

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值