欢迎访问 如意编程网!

如意编程网

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

双网卡-网络问题

发布时间:2024/5/15 编程问答 2 豆豆
如意编程网 收集整理的这篇文章主要介绍了 双网卡-网络问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

网络问题剖析

谢艺华 2019-10-10

1.背景

同事在工作中出现了一个网络问题,其网络拓扑如下图:

                                                                                      图1.网络拓扑图

 

 

其异常现象如下:

  • 服务器不能访问外网,但能ping通路由器。
  • 外网不能访问服务器(路由器上已经做好了相关的端口映射)。
  •  

    据同事的解决方式是:先把eno1和eno2两个网口拔掉,先插eno1,再插eno2。的确,这么操作之后,服务器就可以正常连接外网了,并且也可以通过外网访问服务器了。至于原因,还不是很清楚。

    2.知其然知其所以然

    通过排查,发现异常和正常情况下,服务器的路由表如下:

     

                                                                                            图2 : 异常路由表

                                                                                           图3:正常路由表

     

    其实通过对比,我们就知道大致问题了。很容易联想到网关的问题。

    2.1 route命令解析

    route命令输出的路由表字段含义如下:
    Destination 目标网络或目标主机(本机的数据要发送的目的地:子网或主机),与Genmask组成一个网段。
    Gateway 网关(如果是默认网关,网关的地址必须和自己的主机上的其中一块网卡在同一子网)即网关地址。如果没有就显示星号。
    Genmask 网络掩码,如果目标网络的的子网掩码为255.255.255.255,说明目标是一台主机;如果子网掩码为'0.0.0.0' 说明该路由是默认路由。
    Flags(旗标)
    代表的意义如下: 
    U (route is up):该路由是启动的; 
    H (target is a host):目标是一部主机 (IP) 而非网段; 
    G (use gateway):需要透过外部的主机 (gateway) 来转递封包(该行有gw);
    R (reinstate route for dynamic routing):使用动态路由时,恢复路由资讯的旗标; 
    D (dynamically installed by daemon or redirect):已经由服务或转 port 功能设定为动态路由 
    M (modified from routing daemon or redirect):路由已经被修改; 
    ! (reject route):这个路由将不会被接受(用来抵挡不安全的网域!)
    A (installed by addrconf)
    C (cache entry)
    Metric 距离、跳数。与目标的“距离”(通常以跳数计算)。它不被最近的内核使用,但可能需要路由守护进程。

    Ref 不用管,恒为0, 对这条路线的引用次数(Linux内核已不再使用)。
    Use 该路由被使用的次数,可以粗略估计通向指定网络地址的网络流量。 路线查询次数。根据-F和-C的使用,这将是路由高速缓存丢失(-F)或命中(-C)。
    Iface 接口,即eth0,eth1等网络接口名,为此路由发送数据包的接口。

     

    通过以上的分析,我们就能大概知道为什么先插eno1就可以正常联网了。因为eno1的Metric值较小,优先选择了eno1接口的网关

     

  • 路由选择
  • 在四层协议系统中,我们知道正常的上网过程,都会经过网络层,其中路由选择就是数据包走向的依据。主要有三点:

  • 搜索路由表,寻找能与目标IP地址完全相同的标目,如果找到,将数据传给这个接口
  • 搜索路由表,寻找到目标网络号相同的标目,如果找到就将报文发给该标目指定的下一站路由或接口
  • 搜索路由表,寻找标为默认的标目。如果找到就将该报文发送给指定下一站路由
  • 如果以上都没有匹配到,则丢弃该报文。
  •  

    通过以上的路由选择可知,我们可知,eno1和eno2都是默认标目,会优先选择metric值较小的接口,进行转发报文。

     

     

  • 解决方式
  • 通过上述的分析,我们可以在服务器上添加一个默认路由:

    route add defualte gw 192.168.18.1

    之后的路由表如图:

     

                                                                                              图4: 路由表

    有图可知,路由表中多了一个默认网关项,且Metric值为0。该方法只是临时有效,设备重启就会失效。可以

    echo "route add defualte gw 192.168.18.1" >> /etc/rc.local

    永久生效

     

    3.问题

    在排查问题的过程中,遇到了一些有趣的现象,当然也可以通过上述的知识点解释通。但是我觉得有兴趣的同事还是可以思考一下。其路由表如图:

     

                                                                                                图5:异常的路由表项

    eno1:

    ip: 192.168.18.150

    netmask: 255.255.0.0

    Gateway: 192.168.18.1

    DNS: 192.168.18.1

    eno2:

    ip:192.168.10.1

    netmask: 255.255.255.0

    gateway:192.168.10.1

    DNS:114.114.114.114

     

    3.1 服务器端能够ping通路由器,却不能访问外网?

    3.2 服务器端 ping www.baidu.com 能够获取域名的IP,却无法ping通?

     

     

     

     

    总结

    以上是如意编程网为你收集整理的双网卡-网络问题的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得如意编程网网站内容还不错,欢迎将如意编程网推荐给好友。