Linux多网卡引起的网络不可达
现象描述
这是我最经做项目遇到的一个怪现象,是这样的,我在虚拟机里装了两块网卡,第一块呢,我用来进行虚拟机之间业务的通信,所以就选择了“仅主机模式”,第二块网卡是用来连接网络yum源的,所以就是“NAT模式”。
在我第二天继续做项目的时候,我发现我的虚拟机集体罢工,都不能正常的访问外网了,尝试ping 8.8.8.8
也不可达。我查看第二块网卡的IP,查看与宿主机之间的连接,网段,网管都是没有问题的。我百思不得其解,我之后进行Google才了解到,这是和网卡的METRIC值有关系的。
问题分析
“METRIC”是Linux网卡的一个参数,本意是“度量值”的意思,这个数值越大,代表这块网卡的优先级越低。而在CentOS Linux 系统中默认的“METRIC”值是按照添加的顺序进行编号的。我第一块是“仅主机模式”的网卡,默认的“METRIC”值是100,第二块后添加的“NAT模式”网卡“METRIC”是101。
查看METRIC值可以用这两条命令,我个人更倾向第二条,因为显示效果很整齐:
1 | ip route |
1 | route -n |
那么问题就找到了,当我去ping 8.8.8.8
的时候,默认是从“METRIC”值小的网卡出去的流量,也就是仅主机的网卡,那么自然也就访问不到外网了。
解决办法
解决办法也比较简单,在一切皆文件的Linux系统中,修改的参数无非就是对配置文件的修改。在本例中我们修改网卡的配置文件/etc/sysconfig/network-scripts/ifcfg-ens224
。只需要在里面加上一行IPV4_ROUTE_METRIC=10
,加在哪一行无所谓,只要单词不要拼错;改成多少都无所谓,只要比另一张网卡的“METRIC”值小就OK。
然后我们重启网络服务,再重新up网卡,然后再查看网卡的“METRIC”值,验证是否生效,如果一切顺利,那么现在再去ping 8.8.8.8
应该会发现已经好使了。