场景
笔者拿到一个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和以太网的网络,通过这个命令可以优化连接(比如有线)来通过更快和更稳定的网络传输数据。