问题:
arm linux嵌入式主板,2块网卡(eth0, eth1),1个ec20(usb0),全部启用的时候。对于跨网关的缺省路由会有3个,分别是Iface 为 eth1, eth0, 和 usb0 的三条记录,如下图的前面三个。
注意,缺省的情况下,网卡启动后其缺省路由记录 Metric = 0, 如图中的前面2个;ec20的缺省路由记录 metric = 10。
这时,如果要访问跨网段的IP网络时,第一条 Metric =0 的路由记录生效,其他路由记录无效。
而如果第一条 eth1 Gateway 10.0.0.1 的网卡并没有插网线,那么就无法进行任何跨网段的IP网络访问。造成的现象就是:eth0 和 usb0 上的网络都是好的,就是无法访问外网。
这个是典型的由于网卡的路由冲突问题产生的网络故障。
解决:
有若干中解决方法,最好的解决方法就是将缺省路由网关和掩码进行设置,这样符合不同网关和掩码的IP地址将会选择此路由,还可以将 Metric 值设置成不同的值,区分其优先级。
操作方法:
将缺省产生的 eth0 和 eth1 的缺省路由修改为具有不同的掩码和网关。
route del -net default netmask 0.0.0.0 dev eth0
route add -net default netmask 255.255.255.0 gw 192.168.1.1 dev eth0 metric 12
route del -net default netmask 0.0.0.0 dev eth1
route add -net default netmask 255.0.0.0 gw 10.0.0.1 dev eth1 metric 11
这样生成的路由表:
这样,不同网段的IP就会各取自己网段的网关路由。