Linux双网卡网络问题经典案例(linux双网卡相同网段可以访问,跨网段有一个网卡无法访问问题)

概述

linux双网卡相同网段可以访问,跨网段有一个网卡无法访问问题

问题分析

Linux双网卡网络问题经典案例(linux双网卡相同网段可以访问,跨网段有一个网卡无法访问问题)_第1张图片

架构描述

公司有三个网段分别为:

192.168.2.0/24

192.168.3.0/24

172.16.100.0/24

server1有两个块网卡:

IP地址:192.168.2.2  gw:192.168.2.1 网络接口:ens160

IP地址:192.168.3.2 gw:192.168.3.1 网络接口:ens190

PC1:192.168.2.10

PC2:192.168.3.10

问题描述

(1)客户端在任意网段访问服务器的192.168.2.2地址均正常

(2)客户端在192.168.3.0/24网段访问服务器的192.168.3.2地址正常

(3)客户端在任何非192.168.3.0/24网段访问服务器的192.168.3.2地址不通

(4)在服务器端抓包发现无论客户端在任何网段访问服务器的192.168.3.2地址,数据包都已经抵达服务器

结论

(1)公司整体网络路由正常

(2)该问题由服务器本身的路由导致的

(3)如果将服务器的默认路由修改为192.168.3.1,那么客户端在任意网段访问服务器的192.168.3.2均正常,但是访问192.168.2.2和上述情况相同。

解决办法

调整服务器路由根据进入服务器的IP选择网关出口

(1)创建两张新的路由表

echo "192 wan_160" >> /etc/iproute2/rt_tables
echo "199 lan_190" >> /etc/iproute2/rt_tables

(2)向两条新表分别添加路由

ip route flush table wan_160
ip route add default via 192.168.2.1 dev ens160 table wan_160
ip route flush table wan_190
ip route add default via 192.168.3.1 dev ens190 table lan_190

(3)修改路由策略根据IP流向选择路由表

ip rule add from 192.168.2.2 table wan_160
ip rule add from 192.168.3.2 table wan_190

优化与分析

(1)通过上面的解决办法可以解决我们遇见的网络问题

(2)即使我们通过shell脚本将以上路由条目添加到开机自启,那么在发生网卡重启的时候仍然需要手动将路由添加到wan_160和lan_190的路由表

处理办法,修改网卡启动脚本,使其在启动后自动添加该路由条目

修改/etc/init.d/network文件,找到类似如下内容:

    if [ -f /etc/sysconfig/static-routes ]; then
        if [ -x /sbin/route ]; then
            grep "^any" /etc/sysconfig/static-routes | while read ignore args ; do
                /sbin/route add -$args
            done
        else
            net_log $"Legacy static-route support not available: /sbin/route not found"
        fi
    fi

修改为

    if [ -f /etc/sysconfig/static-routes ]; then
        if [ -x /sbin/ip ]; then
            grep "^route" /etc/sysconfig/static-routes | while read args ; do
                /sbin/ip $args
            done
        else
            net_log $"Legacy static-route support not available: /sbin/route not found"
        fi
    fi

添加/etc/sysconfig/static-routes文件内容如下:

route flush table wan_192
route add default via 10.10.10.1 dev ens192 table wan_192
route flush table lan_199
route add default via 10.1.2.254 dev ens160 table lan_199

命令汇总

ip rule show                        # 查看所有的路由策略
ip route list table xxx             # 查了路由表xxx的路由
ip route add default via xxx.xxx.xxx.xxx dev ens160 table xxx   # 添加一条默认路由到xxx表
ip rule add from xxx.xxx.xxx.xxx table xxx  # 添加一条来自xxx.xxx.xxx.xxx的数据流使用xxx路由表
ip rule add dev ens160 table xxx  # 添加一条来自ens160的数据流使用xxx路由表

闲谈

跳槽的少有些问题希望和大家开源交流欢迎大家积极留言。

(1)在互联网公司厚黑学是否应该比技术水平更重要

(2)互联网公司到底有没有只追求卓越技术而没有那么多蛇皮事的技术团队

(3)管理者都那么xx吗?

(4)就想开开心心做自己,研究点技术挣点小钱钱,为啥总是有人想搞我(可能是幻觉),难道不长心也碍眼吗?

(5)qq交流群309135684,欢迎大家吹逼。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Linux运维)