10

How can I change a remote host primary IP address without getting disconnected at all (without being in a "no IP addr" state).

The matter is poorly discussed on Internet (according to my research). The best resource I found is a little bit tricky.

EXAMPLE : change 10.0.0.11/24 to 10.0.0.15/24

1. ssh root@10.0.0.11
2. ip addr add 10.0.0.15/24 dev eth0 
3. logout

4. ssh root@10.0.0.15
5. ip addr del 10.0.0.11/24 dev eth0 

Problem: The last command removes both IP addresses and the connection is lost because 10.0.0.11 is primary, and it removes its secondary addresses (to which 10.0.0.15 belongs) when deleted.

I know I could "cheat" by adding 10.0.0.11/25 (instead of 24). However, I think it is theoretically possible to do this properly.

What do you think?

  • it is no cheat if you use /32 mask... – zb' Mar 13 '13 at 1:57
  • but it would not work because a /32 cannot communicate with anything but itself... – Totor Mar 13 '13 at 10:35
  • ok, but /25 will also not work than. – zb' Mar 13 '13 at 10:41
11

You need to set the promote_secondaries option on the interface, or on all interfaces:

echo 1 > /proc/sys/net/ipv4/conf/eth0/promote_secondaries

or

sysctl net.ipv4.conf.eth0.promote_secondaries=1

Change eth0 to all to have it work on all interfaces.

This option has been in since 2.6.12.

I tested this with a dummy interface and it worked there.

  • Exactly what I needed, thanks! See the original commit. – Totor Jan 13 '13 at 4:26
  • 1
    Please note that this option is available since 2.6.12, so before 2.6.16. – Totor Aug 27 '13 at 15:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.