インターフェイスから未使用のIPアドレスを削除すると、そのアドレスに関係のない接続が強制終了されるのはなぜですか


35

昨日、データセンターで(物理)サーバーをすばやく再インストールしました。時間が足りず、データベースに簡単にアクセスできなかったため、利用可能なことがわかっているIPを割り当て、後でアクセスできるようにしました正しいアドレスを使用し、暖かい場所からプロビジョニングを続行します。

今日、サーバーにログインし(172.16.130.10/22)、次のことを行いました。

ip addr add 172.16.128.67/22 dev eth0

ローカルワークステーション上の端末から、新しいアドレスでpingに応答することを確認し、それを介してログインしました。

$ ping 172.16.128.67
PING 172.16.128.67 (172.16.128.67) 56(84) bytes of data.
64 bytes from 172.16.128.67: icmp_req=2 ttl=62 time=3.61 ms
64 bytes from 172.16.128.67: icmp_req=3 ttl=62 time=4.87 ms
^C
$ ssh 172.16.128.67

これまでのところ、私は新しいIPアドレスを介して接続され、古いIPアドレスは不要になりました。私は先に進んでそれを削除しました:

ip addr del 172.16.130.10/22 dev eth0

しかしEnter、SSHセッションがフリーズするとすぐに接続できなくなりました。オンサイトのオペレーターにサーバーの再起動を依頼する必要がありました。

どこで私は間違えましたか?そのアドレスを削除すると接続が切断されるのはなぜですか?


2
Mathewsの優れた答えに加えて、多くのUnix(およびUnixライク)システムでは、バインドされたIPアドレスを変更すると、そのインターフェイスへのすべての開いているセッション(別のアドレスを使用しているセッションも含む)が一時的に切断されます。そのため、SSHセッションが終了しますが、その場合はすぐに再接続できます。
トニー

この問題はIPv4にのみ存在すると思います。IPv6を使用していたら、それは起きなかったと思います。
カスペルド

回答:


53

Linuxでは、IPアドレスには「プライマリ」アドレスと「セカンダリ」アドレスの概念があります。通常、プライマリはシステムに追加する最初のアドレスです。プライマリアドレスを削除すると、セカンダリアドレスのリスト全体もフラッシュする暗黙の操作があります。

次のnet.ipv4.conf.all.promote_secondariesようにsysctl を1に設定すると、この動作を回避できます。

sysctl -w net.ipv4.conf.all.promote_secondaries=1

これにより、プライマリIPが削除されたときに残りのアドレスがフラッシュされず、代わりにプライマリとして新しいIPアドレスが昇格されるように動作が変更されます。


6
ありがとう!私もちょうどこれに出くわしました:An IP address becomes secondary if another address within the same prefix (network) already exists. The first address within the prefix is primary and is the tag address for the group of all the secondary addresses. When the primary address is deleted all of the secondaries are purged too.
GnP
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.