web-dev-qa-db-ja.com

ネットワークケーブルを取り外したときに、(複数のネットワークインターフェイスを備えたサーバー上の)ネットワークインターフェイスのIPに接続できるのはなぜですか?

説明できない奇妙なことに遭遇したとき、Arch Linuxを実行している複数(4)のネットワークインターフェースを備えたサーバーがあります。

IPアドレス192.168.100.11/24192.168.100.12/24に2つのインターフェースを構成しています(2つのnetctlプロファイルを使用)。

両方のインターフェイスは、私のコンピューターにも接続するスイッチに接続されています。

プロファイルを有効にすると、両方のインターフェイスが問題なく機能するように見えます。

しかし、メインインターフェイス(192.168.100.11)のアドレスにpingを実行し、そのケーブルを取り外しているとき(セカンダリインターフェイスを稼働させている間)、ケーブルが接続されていなくても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でサービスを提供する2つの冗長サーバーがあります。サーバーの1つでメインインターフェイスがダウンし、両方が同じスイッチに接続されます。両方のサーバーの2番目のインターフェースは、サーバーがスタンバイまたは劣化している場合の保守に使用されます(もちろん、それらは同じ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
deepthought-64

問題は、すべてのインターフェイスが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

ARPを調べる手がかりを与えてくれた@ChristopherNeylanに感謝します。

同じサブネット上に複数のNICを配置して、希望する動作をアーカイブすることは簡単にはできないようです。

問題は、Linuxが弱い ホストモデル を使用していることですが、ここでは強いホストモデルが必要になります。他の誰かが興味を持った場合にこの問題に対処するserverfaultに関する質問を見つけました: 同じサブネット上のIPを持つ複数の物理インターフェイス

1
deepthought-64