多个 NIC 上的多个 IP 位于同一子网

多个 NIC 上的多个 IP 位于同一子网

因此,我有两个 NIC:

eth0
eth1

并且我为每个 IP 地址分配了多个 IP 地址:

auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet static
    address 10.0.0.194
    netmask 255.255.255.0
    gateway 10.0.0.1
    network 10.0.0.0

auto eth0:0
allow-hotplug eth0:0
iface eth0:0 inet static
    address 10.0.0.253
    netmask 255.255.255.0

auto eth0:1
allow-hotplug eth0:1
iface eth0:1 inet static
    address 10.0.0.252
    netmask 255.255.255.0

auto eth0:2
allow-hotplug eth0:2
iface eth0:2 inet static
    address 10.0.0.251
    netmask 255.255.255.0

auto eth1
allow-hotplug eth1
iface eth1 inet static
    address 10.0.0.74
    netmask 255.255.255.0
    gateway 10.0.0.1
    network 10.0.0.0

auto eth1:0
allow-hotplug eth1:0
iface eth1:0 inet static
    address 10.0.0.105
    netmask 255.255.255.0

auto eth1:1
allow-hotplug eth1:1
iface eth1:1 inet static
    address 10.0.0.104
    netmask 255.255.255.0

auto eth1:2
allow-hotplug eth1:2
iface eth1:2 inet static
    address 10.0.0.106
    netmask 255.255.255.0

我还像这样设置了 IP 路由:

sudo ip route add 10.0.0.0/24 dev eth0 table eth0
sudo ip route add default via 10.0.0.1 dev eth0 table eth0

sudo ip route add 10.0.0.0/24 dev eth1 table eth1
sudo ip route add default via 10.0.0.1 dev eth1 table eth1

sudo ip rule add from 10.0.0.194 table eth0
sudo ip rule add from 10.0.0.74 table eth1

现在,当我执行以下命令时,一切正常,我恢复了我的外部 IP:

curl --interface eth0  http://ipecho.net/plain ; echo
curl --interface eth0:0  http://ipecho.net/plain ; echo
curl --interface eth0:1  http://ipecho.net/plain ; echo
curl --interface eth0:2  http://ipecho.net/plain ; echo
curl --interface eth1  http://ipecho.net/plain ; echo

但是,当我运行时:

curl --interface eth1:0  http://ipecho.net/plain ; echo

什么都没发生。显然我搞乱了我的路线或类似的事情。有人能帮我吗?谢谢。

路由

default via 10.0.0.1 dev eth0 
10.0.0.0/24 dev eth0  proto kernel  scope link  src 10.0.0.194 
10.0.0.0/24 dev eth1  proto kernel  scope link  src 10.0.0.74

路线-n

Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         10.0.0.1        0.0.0.0         UG    0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U     0      0        0 eth1

编辑:

所以我找到了这个,这就是我想做的,但是我不想指定任何子网。我只想让它循环处理请求。

https://unix.stackexchange.com/questions/111293/load-balancing-among-multiple-virtual-network-interfaces

答案1

我认为你应该读一下粘合接口。

如果您想使用两个接口进行负载平衡,您所连接的系统必须“使用”与您完全相同的 LB 协议。

否则您将丢失数据包。

答案2

如果您尝试在两个物理网卡之间实现负载平衡,那么您可能需要研究桥接连接。第二个网卡没有响应的原因是,您为它设置的路由与第一个网卡设置的路由相同。因此,网卡 2 下的所有虚拟接口(包括网卡本身)都试图通过第一个网卡进行路由,除非您桥接网卡,否则这是不可能的。在 Linux 下创建桥接连接很容易,您甚至可以为虚拟接口创建虚拟桥。

答案3

将多个 NIC 连接到同一个网络可能会给您带来额外的冲突。除非您仔细配置网络,否则它将无法正常工作。最后一个链接不太可能成为您的瓶颈;如果是,您最好使用高速 NIC(以及与之匹配的上游硬件)。

整个 IP 网络的理念是每个网络上都有 NIC。像您这样的设置与通常的做法完全不符,并且(即使合法)不太可能经过检验,任何不当行为也不太可能得到修复。

相关内容