Linux下多块网卡同一网段连通配置

前提:服务器有四块网卡,信息如下所示:

[root@RedOS-LE-23 ~]# ipaddr|grep net

    inet 127.0.0.1/8 scope host lo

    inet6 ::1/128 scope host

    inet 192.168.1.150/24 brd 192.168.1.255scope global dynamic enP3p9s0f0

    inet6 fd00:1:1:1:42f2:e9ff:fe5c:b5bc/64scope global dynamic

    inet6 fe80::42f2:e9ff:fe5c:b5bc/64 scopelink

    inet 192.168.1.104/24 brd 192.168.1.255scope global dynamic enP3p9s0f1

    inet6 fd00:1:1:1:42f2:e9ff:fe5c:b5bd/64scope global dynamic

    inet6 fe80::42f2:e9ff:fe5c:b5bd/64 scopelink

    inet 192.168.1.118/24 brd 192.168.1.255scope global dynamic enP3p9s0f2

    inet6 fd00:1:1:1:42f2:e9ff:fe5c:b5be/64scope global dynamic

    inet6 fe80::42f2:e9ff:fe5c:b5be/64 scopelink

    inet 192.168.1.23/24 brd 192.168.1.255scope global br0

    inet6 fe80::42f2:e9ff:fe5c:b5bf/64 scopelink

    inet 192.168.122.1/24 brd 192.168.122.255scope global virbr0

9:vnet0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast masterbr0 state UNKNOWN qlen 500

inet6fe80::fc54:ff:fe87:d8a/64 scope link

写此文章的目的:23服务器有四块网卡,都插有网线并连接交换机,重启后自动分配地址。但是发现.23ping不通。原因是路由表main表,有多条路由规则,23这个IP是br0的IP,在规则表中第四条,不被优先匹配。路由表有多条同网段但不通出口的路由,会优先匹配第一条。所以23不通。路由表信息如下所示:

 [root@RedOS-LE-23 cjxlvdir]# route -n

KernelIP routing table

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface

0.0.0.0         192.168.1.1     0.0.0.0         UG   100    0        0 enP3p9s0f0

0.0.0.0         192.168.1.1     0.0.0.0         UG   101    0        0 enP3p9s0f2

0.0.0.0         192.168.1.1     0.0.0.0         UG   102    0        0 enP3p9s0f1

0.0.0.0         192.168.1.1     0.0.0.0         UG   425    0        0 br0

169.254.0.0     0.0.0.0         255.255.0.0     U    1006   0        0 br0

169.254.0.0     0.0.0.0         255.255.0.0     U    1008   0        0 br0

192.168.1.0     0.0.0.0         255.255.255.0   U    0      0        0 enP3p9s0f2

192.168.1.0     0.0.0.0         255.255.255.0   U    0      0        0enP3p9s0f1

192.168.1.0     0.0.0.0         255.255.255.0   U    100    0        0 enP3p9s0f0

192.168.1.0     0.0.0.0         255.255.255.0   U    425    0        0 br0

192.168.122.0   0.0.0.0         255.255.255.0   U    0      0        0 virbr0

路由表输出详解:

第一行:0.0.0.0         192.168.1.1     0.0.0.0         UG   100    0        0 enP3p9s0f0

说明:表示数据传送目的是访问Internet,则由接口enP3p9s0f0,将数据包发送到网关192.168.1.1

第五行:169.254.0.0     0.0.0.0         255.255.0.0     U    1006   0        0 br0

说明:表示本机所在的网络地址为169.254.0.0,若数据传送目标是在本局域网内通信,则可直接通过br0转发数据包

第七行:192.168.1.0     0.0.0.0         255.255.255.0   U    0      0        0 enP3p9s0f2

说明:表示本机所在的网络地址为192.168.1.0,若数据传送目标是在本局域网内通信,则可直接通过enP3p9s0f2转发数据包

第十一行:192.168.122.0   0.0.0.0         255.255.255.0   U    0      0       0 virbr0

说明:表示主机所在网络的地址为192.168.122.0,若数据传送目标是在本局域网内通信,则可直接通过virbr0转发数据包;

思考2:这个route -n 命令是不是就查的这个表的信息ip route list table main?是

解决方法是:把4块网卡分到4个不同的路由表,并且这四个表都在main表之前,具体方法如下所示

步骤1:为网卡f0、f1、f2、br0新增路由规则表

[root@RedOS-23 all]# echo"210    f0table" >> /etc/iproute2/rt_tables

[root@RedOS-23 all]# echo"220    f1table" >>/etc/iproute2/rt_tables

[root@RedOS-23 all]# echo"230    f2table" >>/etc/iproute2/rt_tables

[root@RedOS-23 all]# echo"240    br0table" >>/etc/iproute2/rt_tables

新增成功后,查看规则表

 [root@RedOS-23 all]#  cat /etc/iproute2/rt_tables

#

# reserved values

#

255     local

254     main

253     default

0       unspec

#

# local

#

#1      inr.ruhep

210    f0table

220    f1table

230    f2table

240    br0table

查看规则列表,目前还没有新增的规则表哦!

# ip rule list

0:      from all lookup local

32766:  from all lookup main

32767:  from all lookup default

步骤2:向不同的路由表添加规则,为了重启后生效添加到rc.local中。

[root@RedOS-LE-23all]# cat <<EOL >> /etc/rc.local

> ip routeadd 192.168.1.0/24 dev enP3p9s0f0 src 192.168.1.150 table f0table

> ip  route add  192.168.1.0/24  dev enP3p9s0f1  src  192.168.1.104 table  f1table

> ip  route add 192.168.1.0/24 dev enP3p9s0f2  src 192.168.1.118table  f2table

> ip routeadd 192.168.1.0/24 dev br0 src 192.168.1.23 table br0table

> ip routeadd default dev enP3p9s0f0 via 192.168.1.1 table f0table

> ip routeadd default dev enP3p9s0f1  via192.168.1.1 table f1table

> ip routeadd default dev enP3p9s0f2  via192.168.1.1 table f2table

> ip routeadd default dev br0 via 192.168.1.1 table br0table

> ip ruleadd from 192.168.1.150 table f0table

> ip ruleadd from 192.168.1.104 table f1table

> ip ruleadd from 192.168.1.118 table f2table

> ip ruleadd from 192.168.1.23 table br0table

> EOL

执行完如上命令,再查看规则表

# ip rule list

0:     from all lookup local

32762:  from 192.168.1.23 lookup br0table

32763:  from 192.168.1.118 lookup f2table

32764:  from 192.168.1.104 lookup f1table

32765:  from 192.168.1.150 lookup f0table

32766: from all lookup main

32767: from all lookup default

步骤3:执行如下命令

echo 1 > /proc/sys/net/ipv4/conf/all/arp_filter

echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore

或写入到开机自启动文件中:

# cat <<EOL>> /etc/rc.local

> echo 1 >/proc/sys/net/ipv4/conf/all/arp_filter

> echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

> echo 1 >/proc/sys/net/ipv4/conf/all/arp_ignore

> EOL

步骤4:重启服务器reboot

步骤5:ping118\23\104\150都可以通。

还有一个问题,现象是重启服务器后,f0\f1\f2的地址都 是可以ping通的,br0 的IP是192.168.1.23,23死活都不通,必须执行一下ping192.168.1.1 -I br0,才可以通。原因是什么?

猜你喜欢

转载自www.cnblogs.com/liuhongru/p/11057622.html
今日推荐