説明できない奇妙なことに遭遇したとき、Arch Linuxを実行している複数(4)のネットワークインターフェースを備えたサーバーがあります。
IPアドレス192.168.100.11/24
と192.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')
誰かが私の希望するソリューションをアーカイブする方法を教えてくれれば幸いです。多分それは私が見落としているか知らない愚かなことですが、現時点ではこれは私をかなり悩ませています...:-/
問題は、すべてのインターフェイスが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を持つ複数の物理インターフェイス