Linux 如何在运行同一网关的同一子网上路由具有2个公用IP的2个NIC

Linux 如何在运行同一网关的同一子网上路由具有2个公用IP的2个NIC,linux,routes,gateway,subnet,nic,Linux,Routes,Gateway,Subnet,Nic,我是网络领域的新手。我的web服务器网络配置有问题(操作系统是Centos)。 我有2个NIC(eth0+eth2-物理)运行2个公共IP,它们具有相同的子网和相同的网关。 当我将nginx配置为在这两个NIC上侦听时,一切正常。但是当我监控流量时,所有流量都只在eth0上,而在eth2上没有。 我的问题是:我如何配置使流量进入NIC,也进入该NIC? 这是我的以太网卡配置: DEVICE="eth0" ONBOOT=yes BOOTPROTO=static IPADDR=x.x.x.38 PR

我是网络领域的新手。我的web服务器网络配置有问题(操作系统是Centos)。 我有2个NIC(eth0+eth2-物理)运行2个公共IP,它们具有相同的子网和相同的网关。 当我将nginx配置为在这两个NIC上侦听时,一切正常。但是当我监控流量时,所有流量都只在eth0上,而在eth2上没有。 我的问题是:我如何配置使流量进入NIC,也进入该NIC? 这是我的以太网卡配置:

DEVICE="eth0"
ONBOOT=yes
BOOTPROTO=static
IPADDR=x.x.x.38
PREFIX=27
GATEWAY=x.x.x.x.33
DNS1=8.8.8.8
DNS2=8.8.4.4
NAME="System eth0"

DEVICE="eth2"
ONBOOT=yes
BOOTPROTO=static
IPADDR=x.x.x.39
PREFIX=27
GATEWAY=x.x.x.33
DNS1=8.8.8.8
DNS2=8.8.4.4
NAME="System eth2"
这是我的route-n结果

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
10.14.8.0       0.0.0.0         255.255.255.0   U     0      0        0 eth1
y.z.0.0         0.0.0.0         255.255.0.0     U     1002   0        0 eth0
y.z.0.0         0.0.0.0         255.255.0.0     U     1003   0        0 eth1
y.z.0.0         0.0.0.0         255.255.0.0     U     1004   0        0 eth2
0.0.0.0         x.x.x.33        0.0.0.0         UG    0      0        0 eth0

希望您能帮忙,提前谢谢

在Linux中,路由只通过查看目的地地址来执行,因此数据包将遵循可用于到达数据包目的地的任何路由,而不考虑源地址

您想要的行为要求选择一条路由,不仅取决于目标地址,还取决于源地址——这有时被称为源敏感路由或SADR(源地址相关路由)。在Linux下实现源代码敏感路由的最便捷的方法是使用
ip规则
ip路由跨多个路由表定义路由规则。。。表…
命令


这一点在本手册的第4节中有详细描述。也许,即使使用NAT,问题也可以解决。
ip tuntap添加开发tap0模式tap
ip tuntap添加开发tap1模式tap
然后您可以为这些设备分配单独的ip地址:
ifconfig tap0 10.10.10.1网络掩码255.255.255.255
ifconfig tap1 10.10.10.2网络掩码255.255.255.255
最后-将传入流量重定向到特定的虚拟设备
iptables-t nat-A预路由-i eth0-j DNAT-到目的地10.10.10.1
iptables-t nat-A预路由-i eth2-j DNAT-到目的地10.10.10.2

在这种情况下,所有流量都将被路由到它所来自的接口。

我找到了这篇文章,这正是我需要的。