为什么拔掉网线后可以连接到某个网口的IP(多网口的服务器)?

为什么拔掉网线后可以连接到某个网口的IP(多网口的服务器)?

当我遇到一些我无法解释的奇怪事情时,我有一台运行 Arch Linux 的具有多个(四个)网络接口的服务器。

我有两个接口配置为 IP 地址192.168.100.11/24192.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 位于同一子网的多个物理接口

相关内容