一、需求背景
当前在做的一个项目,客户需求,蜂窝模组使用两路APN拨号,一路用做TBOX数据业务,一路共享出来给车机上网。因为运营商给两路APN分配的流量类型不一样,所以需要隔离两路网卡的流量。
第一路(例如 net0 网卡,作为蜂窝的wan)用做内部数据业务,所有直接从模组内部出去的流量,都走该网卡。
第二路(例如net1网卡,也作为蜂窝的wan),用作车机上网,车机通过USB与模组相连,通过USB网卡上网。所有从USB网卡进来的数据包,都走net1网卡出去。
二、技术方案
两路网卡分别用于不同的业务需求,可以采用策略路由方案,自己管理路由配置,使两路APN的流量完全隔离开
- 去除模组拨号时的默认路由配置
- 两路APN分别拨号以后,配置main路由表(系统默认路由表)默认路由出口网卡为ccinet0,使模组内部数据业务出口走默认路由,ccinet0网卡
- 添加一个新的路由表(如table 10),使来自192.168.1.x的数据包(USB网卡的ip为192.168.1.x),都通过id 为10的路由表进行转发
- 添加一个新的路由表(如table 11),使发往192.168.1.x的数据包(USB网卡的ip为192.168.1.x),都通过id 为11的路由表进行转发
- 在table 10 中添加新的默认路由,数据出口指向网卡ccinet1
- 在table 10 中添加新的默认路由,数据出口指向网卡br-lan (usbnet0网卡挂在桥上,会转发给usbnet0网卡)
三、具体实现
关闭拨号的默认路由设置,在network配置文件对应网卡下增加defaultroute字段
config interface 'wan0'
option ifname 'ccinet0'
option proto 'none'
option auto '0'
option defaultroute '0'
config interface 'wan1'
option ifname 'ccinet1'
option proto 'none'
option auto '0'
option defaultroute '0'
两路APN拨号后网卡和路由表如下:
为ccinet0增加默认路由(假设第一路APN是为模块内部做数据业务使用)
ip route add default via 30.155.230.179 dev ccinet0
增加路由表,隔离USB网卡过来的数据,模组默认有三个路由表,一般执行iproute看到的是main表的路由条目
增加路由表table 10,并使192.168.1.x (USB网卡网段) 过来的数据包都走此路由表
ip rule add from 192.168.1.0/24 table 10 pref 100
增加路由表table 11,并使发往192.168.1.x (USB网卡网段) 的数据包都走此路由表
ip rule add to 192.168.1.0/24 table 11 pref 100
向路由表table 10增加ccinet1默认路由规则,此走此路由表的数据包从ccinet1网卡出去
ip route add default via 30.154.46.177 dev ccinet1 table 10
向路由表table 11增加br-lan默认路由规则,此走此路由表的数据包从br-lan网卡回来
ip route add default via 192.168.1.1 dev br-lan table 11
至此,基本的策略路由配置完成。
四、效果测试
1.测试模块内部数据流向
可以看到,内部的数据流走的ccinet0
2.测试上位机(USB网卡,以windows做上位机为例子)数据流向
可以看到,USB网卡过来的数据,走的ccinet1