Linux下双网卡无法上外网的解决方案

1,461 阅读2分钟

场景

笔者拿到一个Linux设备,上面有两个网口,一个网口可以上外网,另外一个连接内网。 当外网端口接通的时候,设备上的任何进程可以喝外界通信,当接通内网端口的时候,整个外网就断掉了。

使用

ifconfig -a

得到所有网络连接信息

eth0      Link encap:以太网  硬件地址 00:16:3e:06:29:f9  
          inet 地址:192.168.1.101  广播:192.168.1.255  掩码:255.255.255.0

          

eth1      Link encap:以太网  硬件地址 00:16:3e:07:2F:f9  
          inet 地址:192.168.2.101  广播:192.168.2.255  掩码:255.255.255.0
          

其中192.168.1.101是可以连接到外网的,单独连接的时候,可以使用curl测试外网。

分析

网络不通,一般原因是下面

  • DNS问题
  • 网关也不通
  • 连接到了错误的网关

这种情况下,笔者首先怀疑是DNS问题,所以就执行

ping 114.114.114.114

不通,说明连接到外网也不通,一般这个地址是通的,不放心可以到别的环境验证,DNS原因排除。

网关不通,再次验证,连接到该网关的其他计算机是通的,排除。

剩下最后一个问题,连接到了错误的网关。

在连接之前,我们知道,我们两个网口连接到了两个不同的网关

  • 192.168.1.1 (无外网连接)
  • 192.168.2.1(有外网连接)

我们开始检查我们的路由。

 /sbin/route -n

得到

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
192.168.1.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
192.168.2.0     0.0.0.0         255.255.255.0   U     0      0        0 eth1

上面的信息代表访问 0.0.0.0和192.168.1.0 两个网络使用eth0端口, 而访问192.168.2.0网络使用 eth1端口。

解决方案

如果要让通过有外网的网络访问 需要执行

route add default gw 192.168.0.1 eth1

后,通过命令

ping 114.114.114.114

测试成功!

这种情况也适用于同时有WIFI和以太网的网络,通过这个命令可以优化连接(比如有线)来通过更快和更稳定的网络传输数据。