双网卡双IP同时连通

【场景】

有一台物理机,IP地址是172.31.192.201,由于业务原因,在这台物理机上的第二块网卡配置172.31.196.1,配置文件信息如下:

[root@cloud1 network-scripts]# cat ifcfg-ens9f0

TYPE=Ethernet

BOOTPROTO=static

DEFROUTE=yes

PEERDNS=yes

PEERROUTES=yes

IPV4_FAILURE_FATAL=no

NAME=ens9f0

DEVICE=ens9f0

ONBOOT=yes

IPADDR=172.31.196.1

NETMASK=255.255.255.0

PREFIX=24

[root@cloud1 network-scripts]# cat ifcfg-br-ex

DEVICE=br-ex

TYPE=OVSBridge

DEVICETYPE=ovs

ONBOOT=yes

NM_CONTROLLED=no

BOOTPROTO=none

IPADDR=172.31.192.201

NETMASK=255.255.255.0

GATEWAY=172.31.192.254

重启网络后,机器路由表如下:

[root@cloud1 network-scripts]# route

Kernel IP routing table

Destination     Gateway         Genmask   Flags  Metric  Ref    Use  Iface

default      172.31.192.254       0.0.0.0     U     1006   0      0  br-ex

link-local      0.0.0.0         255.255.0.0     U     1006   0     0   ens9f0

link-local      0.0.0.0         255.255.0.0     U     1008   0        0 ens4f0

link-local      0.0.0.0         255.255.0.0     U     1014   0        0 br-ex

link-local      0.0.0.0         255.255.0.0     U     1015   0        0 br-int

172.31.192.0    0.0.0.0         255.255.255.0   U     0      0        0 ens4f0

172.31.196.0    0.0.0.0         255.255.255.0   U     0      0        0 br-ex

该路由表表示:当目标地址是172.31.192.0,从ens4f0发包,当目标地址是172.31.196.0,从br-ex发包,如果目标地址不在路由表中,就从默认网关172.31.192.254传输包。

从该机器ping两个网关172.31.196.254和172.31.192.254都是通的,说明机器到交换机链路正常。

【问题】

当从办公网(172.25.0.0网段)ping 172.31.192.201可以通,但172.31.196.1不通

【原因分析】

ping 172.31.192.201时,包从网关172.31.192.254转给该机器时,机器查路由表,发现需要从默认路由回包,即172.31.192.254,此时网络连通。示意图:


Ping172.31.196.1时,包从网关172.31.196.254转给该机器时,机器查路由表,发现需要从默认路由回包,即172.31.192.254,此时网络不连通。示意图:


【解决方案】

关键是要机器按照包的来源进行答复,如果包从196.1网卡来,回复的包就从该网卡出去;如果从192.201网卡进来的,就从该网卡出去。

【临时策略,重启网卡失效】

# echo "192 net_192" >> /etc/iproute2/rt_tables

#ip route flush table net_192

#ip route add default via 172.31.192.254 dev br-ex src 172.31.192.201 table net_192

#ip rule add from 172.31.192.201 table net_192

#

#echo "196 net_196" >> /etc/iproute2/rt_tables

#ip route flush table net_196

#ip route add default via 172.31.196.254 dev ens9f0 src 172.31.196.1 table net_196

#ip rule add from 172.31.196.1 table net_196

【永久策略】

# echo "192 net_192" >> /etc/iproute2/rt_tables

#ip route flush table net_192

#echo ” 0.0.0.0/0 via 172.31.192.254 dev br-ex src 172.31.192.201 table net_192” >> /etc/sysconfig/network-scripts/route-br-ex

#

#echo "196 net_196" >> /etc/iproute2/rt_tables

#ip route flush table net_196

#echo “0.0.0.0/0 via 172.31.196.254 dev ens9f0 src 172.31.196.1 table net_196” >> /etc/sysconfig/network-scripts/route-ens4f0

#service network restart

[root@cloud1 bak_1216]# cat route-br-ex

0.0.0.0/0 via 172.31.192.254 dev br-ex src 172.31.192.201 table net_192

[root@cloud1 bak_1216]# cat route-ens9f0

0.0.0.0/0 via 172.31.196.254 dev ens9f0 src 172.31.196.1 table net_196

【注意事项】

在设定好转发路由策略之后,务必记得检查默认路由是否存在,即上文中的default是否存在(只要网卡配置文件中配置了网关,启动网络时就会自动生成默认路由),否则虽然外面的机器ping该物理机没问题(原因上面已经说了),但是由该物理机主动发出的到外网的请求无法转发,因为目标地址既不在172.31.192.0也不在172.31.196.0网段的报文,都会被丢弃。

你可能感兴趣的