使用linux源路由解决双网卡无法正常工作问题

一台centos 6.5的机器,有两张网卡,过去一直使用其中的em1,IP为A。现在需要为em2添加另一个IP B,并且两个IP都要正常对外服务。设置完成后,默认网关是配置为走em1,此时发现从B无法访问机器。默认网关更改为走em2,此时发现从A无法访问机器。经过查找发现是由于从非网关网卡进入的数据,处理后并未通过来的网卡原路返回,而是走了默认网关,导致能发却收不到的问题。
此时解决方案是让路由表通过判定IP包的来源,如果源地址是非网关的IP,则在路由选择时要通过非网关的IP发送。

在修改前,先把A的网关设置为机器的默认网关。修改的命令如下:
用编辑器修改/etc/sysctl.conf,修改或添加下列项

首先在系统中开启使用源路由功能
然后在路由表中添加一个自定义表

然后为这个自定义表添加处理规则,匹配的数据包发送到B的网关IP

最后添加使用自定义表的匹配规则,判定来源为B的IP的数据包使用自定义表处理,这条规则优先级为32765

搞定!