找回密码
 注册
查看: 3930|回复: 1

Linux主板多网络的优先级设置

[复制链接]

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
发表于 2018-11-9 10:18:38 | 显示全部楼层 |阅读模式

支持多网络是英创工控主板的特色之一,英创公司推出的ESMARC系列核心板,都带有1路或者2路10M/100M以太网口网口,同时还可以支持wi-fi以及3G/4G模块,而且ESM3354和ESM6802这两款核心板还可以通过ISA总线扩展以太网口。在多种网口同时存在的情况下,如何设置路由规则以及网关也就成为了应用方案重要的一部分。


' b( E2 ]& X, w. w" k$ J/ x

  在linux系统中,使用ifconfig命令给网口配置ip,系统会自动生成这个网卡的相关路由信息,可以使用命令route –n查看系统所有的路由信息,参数-n是不进行地址解析,如果不添加-n选项,route命令会根据/etc/resolv文件中配置的DNS服务器进行地址解析,所以返回时间跟DNS服务器的响应时间有关系:


: k9 o8 y, J0 l  i) U$ p* B

系统自动生成eth0的路由信息

7 Z2 j& X0 A7 J: q4 Z

  可以看到系统自动生成了201网段的路由信息,凡是201这个网段的数据包都会通过eth0这个网口。但是目前还没有网关的信息,如果要通过eth0访问外网,还需要添加默认网关,linux系统中可以通过命令ip route命令添加默认网关,命令格式为ip route add default via <gateway> dev <interface>:

9 L) f& q9 L) `$ ?$ v: u" r

eth0的路由信息


1 Y3 A, ]: c  J! i% V- {/ Z

  添加默认网关后的路由信息如上图,其中Destination和Genmask为0.0.0.0的记录表明这是系统默认网关,默认网关的意思是当要发送数据包的目标网络地址不在系统的路由记录中时,系统会将该数据包通过默认网关对应的接口(网卡)发送出去,如果允许使用dhcp的话,还可以直接使用udhcpc命令,该命令会自动获取ip并设置默认网关:


" n- A* f' r& K: ~: r  A% V/ l

使用udhcpc获取ip和设置默认网关

% \2 w8 B8 r8 Z) c- b

  在多网络的情况下,比如以太网和wi-fi以及3G网络同时存在的时候,就会有多个路由信息多个默认网关。下图是核心板的以太网和wi-fi同时存在时的路由信息:


4 a( Z! o/ k' t- }' q

多网络路由信息

" C2 x- E9 I8 P+ W, r& t% l$ ?+ t

  可以看到以太网eth0和wi-fi网络wlan0的路由信息都自动生成了,而且存在两个默认网关。如果访问外网,系统会根据路由缓存信息和速度最优的原则,通过速度更快的网关进行访问。Linux系统支持对默认网关的优先级进行设置,这时需要用到mteric这个参数,metric为跃点数,当系统中有多个默认网关时,数据包会通过metric更低的接口传输,通常情况下,默认的metric都为0,所以优先级是相同的。还是可以通过linux的命令ip route命令设置metric,命令格式为ip route add default via <gateway> dev <interface> metric <val>,下面我们就为eth0和wlan0设置优先级:

  k4 c# u, r( o2 N

路由信息的优先级


- @+ D* f0 {2 ]

  如图所示我们为eth0设置的metric为100,wlan0的metric为101,这样以太网eth0的优先级就高于wlan0,数据包就会有先通过eth0通讯,如果以太网eth0关闭,则相关路由信息也会被清除掉,这时metric为101的默认网关优先级变为最高,数据包会自动改为通过wlan0通讯。通过traceroute命令可以验证这一点:


$ ]1 j6 ?. N  `! p8 o/ I% Q1 d

数据包通讯信息

8 f6 a0 K' a; D9 I( B" F+ P+ d

  可以看到数据包默认是通过优先级更高的网关通讯,当eth0关闭之后,数据就改为通过wi-fi网络的网关了。同时为了方便客户使用和参考,我们提供了一个管理路由信息的例程,让程序在后台运行,会检查有没有新的默认网关,如果有新的默认网关,则按照以太网>wi-fi>3G/4G网络的优先级顺序自动设置metic的值,如果需要更改则可以通过参数来设置三种网络的metric值:route_manager [metric for eth] [metric for wlan] [metric for ppp]

) ~& N2 B5 K/ P  @, A

测试效果

- [, g" i* [4 H

  路由信息在板卡重启之后会消失,板卡上自带以太网可以通过英创公司提供的userinfo.txt配置文件来设置以太网的ip和默认网关,或者设置为dhcp的方式。如果有扩展的wi-fi模块则可以通过脚本或自己保存一个配置文件来实现加载网口后自动进行设置ip和网关。3G/4G网络是使用的ppp拨号,ppp会自动生成默认网关。

1

主题

0

回帖

12

积分

管理员

积分
12
QQ
 楼主| 发表于 2018-11-9 10:20:56 | 显示全部楼层
具体方法很简单,如下:
3 A2 O8 C1 k0 O, @& g1 v, j1.查看当前网关信息9 v% B4 h% r9 p
ip route show9 Z7 U2 G5 |8 M3 g. ~; b: R& ~0 q+ Q
0 }4 W" i$ e3 ?9 N( o5 }5 _
显示如下: 0 B+ d3 a: {: {/ ^- r% @

- G, t  ?; }3 q0 a可以看到前两行default开头的就是默认网关。 ; }8 x3 j9 \$ p
192.168.1.1是我的有线网关,172.28.0.1是wifi网关。
5 M- U" N' T/ i# u2 Q3 w原来是有线网关的优先级更高导致的问题。$ @: t( T$ N8 H; U& Z& `
2.删除默认有线网关配置6 r% _& H- T7 R: B8 R
sudo route del default gw 192.168.1.1+ B6 Z) ^5 d5 n  L4 s$ s
# A  `6 X0 X7 n: O. p' ~
注意这里的192.168.1.1 不是有线网的ip地址,而是有线网的网关地址 ,不要弄错了
( o3 _5 y* i6 V/ P) m2 {4 K7 j. I1 q3. 添加Wifi网关为默认地址
- M3 Z' M* ^3 A; i6 S$ Hsudo route add default gw 172.28.70.25
- H& A( w+ p( f. p) e3 H
8 i. X% L& l" ]" d注意这里的172.28.70.25 是wifi的IP地址,不是网关地址
1 {  b( ~) V" g  b, h7 S* v" B, U8 a一般执行完这3步就大功告成啦,同时插入网线和连接wifi的情况下,会自动使用wifi上网了!- c+ [7 C  Z3 s6 D
输入 ip route show,显示: ( K& v& s, X# L% j" H

0 d) n1 [8 O; T. Z! o9 P% R) ~可以看到,现在默认网关已经是Wifi网关了。
, A% `+ a& T& J1 K3 Y0 B* J  L& h9 n
您需要登录后才可以回帖 登录 | 注册

本版积分规则

返回首页|Archiver|手机版|小黑屋|易陆发现技术论坛 ( 蜀ICP备2026014127号-1 )

GMT+8, 2026-6-12 02:00 , Processed in 0.018476 second(s), 23 queries .

Powered by Discuz! X5.0

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表