この前私の目の前で起こって何が起こったのか分からずパニックになったので書いておきます.
OS は Debian7 です.
今回以下のことをやりたいとします.
- グローバルIP(別に仮想IPでも何でも同じ)を持っているサーバー A を諸事情によりサーバー B に移したい
- サーバー B にまずテスト用の IP アドレスを付けて動作を確認したい
- 動作確認をして問題がなければサーバー A の IP アドレスを乗っ取って対応完了としたい
ということで以下の作業を行いました.
- サーバー B の
/etc/network/interfaces
にテスト用の IP アドレスを付ける設定を書いた上でifdown -a && ifup -a
* 動作を確認 - サーバー B で
ip addr add
を使ってサーバー A の IP アドレスを付けて乗っ取る
* Linux - 仮想IPを付けたいそんな時 - Qiita
* サーバー A でip addr del
を使ってサーバー A が持っている IP アドレスを消す - テスト用に付けた IP を
ip addr del
を使って削除
という作業を行うと乗っ取った IP アドレスもろとも該当 NIC から IP アドレスが消えます
どうやら NIC に 2 つの IP アドレスを付けると最初に付けた IP アドレスが primary になり次に付けた IP アドレスが secondary になるらしく primary の IP アドレスを消すと secondary もろとも消えます.
今回テスト用の IP アドレスが primary になり,乗っ取った IP アドレスが secondary になったのでテスト用の IP アドレスを消すと同時に目的の IP アドレスまでも消えてしまったということでした.
またこれの非常に厄介なところは該当 NIC に付けられるネットワークの IP アドレスが全て消えてしまうのでこちらのネットワークのルーティングが消えてしまうというところです.
ルーティングが消えたことに気付かず,もう一度 IP アドレスを付けてもなかなか疎通せず,ここでパニックになってしまいました…
ということで今回の作業は以下の方法が正解みたいです.
- サーバー B の
/etc/network/interfaces
にテスト用の IP アドレスを付ける設定を書いた上でifdown -a && ifup -a
* 動作を確認 - テスト用の IP アドレスを
ip addr del
する
* この時点でルーティングが消えているので要注意 - サーバー B で
ip addr add
を使ってサーバー A の IP アドレスを付けて乗っ取る
* Linux - 仮想IPを付けたいそんな時 - Qiita
* send_arp の前にip route add
を打ってルーティングを付け直すことを忘れないこと
* サーバー A でip addr del
を使ってサーバー A が持っている IP アドレスを消す - テスト用に付けた IP アドレスを
ip addr del
を使って削除
という過程を踏むことで安全に切り替えることができます.
目の前で付けたはずの IP アドレスが消えた時は本当にパニックになりましたが落ち着いて IP アドレスを付け直してから疎通できなければルーティングを確認するというフローを踏めばよかった話で経験と確かな知識がものを言うなぁと改めて感じました.
ということで IP アドレス乗っ取りをする際は気を付けてください.