当我遇到一些我无法解释的奇怪事情时,我有一台运行 Arch Linux 的具有多个(四个)网络接口的服务器。
我有两个接口配置为 IP 地址192.168.100.11/24
(192.168.100.12/24
使用两个 netctl 配置文件)。
两个接口都连接到一个交换机,该交换机也连接到我的计算机。
当我启用配置文件时,两个界面似乎都工作得很好。
但是,当我 ping 主接口 ( ) 的地址192.168.100.11
并移除其电缆(同时启动并运行辅助接口)时192.168.100.11
,即使接口上没有连接电缆,我也会继续收到回复。我什至可以成功ssh 192.168.100.11
进机。
的输出ip addr
显示该接口没有运营商并且已关闭,但仍具有其 IP 地址:
2: enp7s0f0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN group default qlen 1000
link/ether 00:1e:67:a3:7f:b6 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.11/24 brd 192.168.100.255 scope global enp7s0f0
valid_lft forever preferred_lft forever
inet6 fd00::21e:67ff:fea3:7fb6/64 scope global mngtmpaddr dynamic
valid_lft 6836sec preferred_lft 3236sec
inet6 fe80::21e:67ff:fea3:7fb6/64 scope link
valid_lft forever preferred_lft forever
3: enp7s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:1e:67:a3:7f:b7 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.12/24 brd 192.168.100.255 scope global enp7s0f1
valid_lft forever preferred_lft forever
inet6 fd00::21e:67ff:fea3:7fb7/64 scope global mngtmpaddr dynamic
valid_lft 6836sec preferred_lft 3236sec
inet6 fe80::21e:67ff:fea3:7fb7/64 scope link
valid_lft forever preferred_lft forever
当我netctl status main
检查状态时,配置文件仍然处于活动状态:
# netctl status main
● [email protected] - Main interface
Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: disabled)
Active: active (exited) since Thu 2015-01-08 11:29:07 UTC; 25min ago
Docs: man:netctl.profile(5)
Main PID: 55293 (code=exited, status=0/SUCCESS)
Jan 08 11:29:03 timingserver1 network[55293]: Starting network profile 'main'...
Jan 08 11:29:07 timingserver1 network[55293]: Started network profile 'main'
这怎么可能?
对我来说,了解其背后的机制很重要。计划是我有两台冗余服务器在 ip 上提供服务192.168.100.11
。其中一台服务器的主接口将关闭,并且两台服务器都连接到同一交换机。两台服务器上的第二个接口用于服务器待机或降级时的维护(当然它们不会具有相同的IP)。
因此,如果发生故障转移,我将关闭主服务器的接口(或断开电缆)并激活备份服务器上的接口。当然,如果主服务器192.168.100.11
即使宕机仍然回答,那就糟糕了......:-/
我的 netctl 配置文件:
主界面
Description='Main interface' Interface=enp7s0f0 Connection=ethernet IP=static Address=('192.168.100.11/24') Gateway='192.168.100.1' DNS=('192.168.100.1' '8.8.8.8')
辅助接口
Description='Secondary interface' Interface=enp7s0f1 Connection=ethernet IP=static Address=('192.168.100.12/24') DNS=('192.168.100.2' '8.8.8.8')
如果有人能指导我如何归档我想要的解决方案,我将非常感激。也许这只是我忽略或不知道的一些愚蠢的事情,但目前这让我很困扰......:-/
答案1
好吧,问题似乎是,任何接口都会回答 ARP 请求,因为它们都在同一子网中,因此即使网络接口具有不同的 IP 地址,ARP 条目也指向同一接口。因此,不同 IP 的所有数据包都会发送到相同的 MAC 地址(因为所有 IP 在 ARP 条目中具有相同的 MAC)
我的 arp 缓存如下所示:
$ ip neigh
192.168.100.11 dev enp2s0 lladdr 00:1e:67:a3:7f:b7 STALE
192.168.100.12 dev enp2s0 lladdr 00:1e:67:a3:7f:b7 STALE
感谢@ChristopherNeylan 给我提供了查看 ARP 的线索。
似乎在同一子网上拥有多个网卡并存档我想要的行为并不容易。
问题是linux使用的是弱主机型号但这里需要一个强大的宿主模型。我在 serverfault 上发现了一个问题,如果其他人感兴趣的话可以解决这个问题: IP 位于同一子网的多个物理接口