LinuxのIPアドレスの質問です。

以下の順番にIPアドレスを追加します。

# ifconfig eth0:0 192.168.0.10
# ifconfig eth0:1 192.168.0.11
# ifconfig eth0:2 192.168.0.12
# ifconfig eth0:3 192.168.0.13
# ifconfig eth0:4 192.168.0.14

以下のコマンドで、1番目のエントリーを削除します。

# ifconfig eth0:0 down


すると上で追加した全部のIPアドレスが削除されています。(2番目以降のエントリーは個別に削除可能です。)
これは、そういう仕様なのでしょうか。また、これを回避する上手い方法など無いでしょうか。
OSはCentOS 5.3 と、Ubuntu 8.10 にて試しましたが同じ動作でした。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/11/12 20:55:17
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:JULY No.1

回答回数966ベストアンサー獲得回数247

ポイント70pt

Re: issue: deleting one IP alias deletes all

linux kernel の ML に投げられメールですが、この中の

what address they suppose to use as source address when communicating to this network. In other words, what address is primary and what addresses are just some unused dummies.

という辺りを手がかりに私も試してみました。

で、なんとなく分かったのは ifconfig でインタフェースと IP アドレスを結び付けているのとは、別の要因でこのような現象が起こるようです。

例えば、

eth:0  ..... 192.168.5.1
eth:0.0 .... 192.168.5.10
eth:0.1 .... 192.168.5.11

となっているとします。この時、eth0:0 を ifconfig で down させても、eth0:1 は残ります。

しかし、

eth:0  ..... 192.168.5.1
eth:0.0 .... 192.168.10.10
eth:0.1 .... 192.168.10.11

とすれば、質問にある通り、全ての IP エイリアスがなくなります。

この2つのケースを iproute に含まれる ip コマンドを使うと、下記の様になります。

#ip addr ls eth0
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.43.128/24 brd 192.168.43.255 scope global eth0
    inet 192.168.43.200/24 brd 192.168.43.255 scope global secondary eth0:0
    inet 192.168.43.201/24 brd 192.168.43.255 scope global secondary eth0:1
#ip addr ls eth0
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.43.128/24 brd 192.168.43.255 scope global eth0
    inet 192.168.10.200/24 brd 192.168.10.255 scope global eth0:0
    inet 192.168.10.201/24 brd 192.168.10.255 scope global secondary eth0:1

後者の方は eth0:0 に対して「secondary」が付きません。

ifconfig で IP エイリアスを設定した際に、ネットワーク部のアドレスが同じものが既にある場合、iproute 上での管理では「secondary」となるようです。

しかし、既存には無いネットワークアドレスだった場合、インタフェースに対する IP エイリアスであっても、iproute 上では primary 扱いになるようです。

iproute 上で primary 扱いになっている物を down すると、それに引きづられる形で、secondary 扱いのものが無くなってしまう、という仕組みだと考えられます。

IPROUTE2 Utility Suite Documentation

そのことが、上記ページの「IP Interface Primary and Secondary Addressing」辺りに書いてあるらしいのですが、私の英語力では読み取れませんでした(^^;。

id:yoshifumi1975

回答ありがとうございます。そのものずばりですね。primary削除時にsecondaryは自動昇格しない、という旨書いてあります。independent に扱いたいなら、prefixを32にしなさいと書いてあります。

# ip addr add 10.0.10.10/32 dev eth0

# ip addr add 10.0.10.11/32 dev eth0

# ip addr add 10.0.10.12/32 dev eth0

# ip addr show primary

にて、すべてprimary 扱いになっていることを確認しました。

2009/11/12 20:52:31

その他の回答2件)

id:JULY No.1

回答回数966ベストアンサー獲得回数247ここでベストアンサー

ポイント70pt

Re: issue: deleting one IP alias deletes all

linux kernel の ML に投げられメールですが、この中の

what address they suppose to use as source address when communicating to this network. In other words, what address is primary and what addresses are just some unused dummies.

という辺りを手がかりに私も試してみました。

で、なんとなく分かったのは ifconfig でインタフェースと IP アドレスを結び付けているのとは、別の要因でこのような現象が起こるようです。

例えば、

eth:0  ..... 192.168.5.1
eth:0.0 .... 192.168.5.10
eth:0.1 .... 192.168.5.11

となっているとします。この時、eth0:0 を ifconfig で down させても、eth0:1 は残ります。

しかし、

eth:0  ..... 192.168.5.1
eth:0.0 .... 192.168.10.10
eth:0.1 .... 192.168.10.11

とすれば、質問にある通り、全ての IP エイリアスがなくなります。

この2つのケースを iproute に含まれる ip コマンドを使うと、下記の様になります。

#ip addr ls eth0
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.43.128/24 brd 192.168.43.255 scope global eth0
    inet 192.168.43.200/24 brd 192.168.43.255 scope global secondary eth0:0
    inet 192.168.43.201/24 brd 192.168.43.255 scope global secondary eth0:1
#ip addr ls eth0
2: eth0: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether xx:xx:xx:xx:xx:xx brd ff:ff:ff:ff:ff:ff
    inet 192.168.43.128/24 brd 192.168.43.255 scope global eth0
    inet 192.168.10.200/24 brd 192.168.10.255 scope global eth0:0
    inet 192.168.10.201/24 brd 192.168.10.255 scope global secondary eth0:1

後者の方は eth0:0 に対して「secondary」が付きません。

ifconfig で IP エイリアスを設定した際に、ネットワーク部のアドレスが同じものが既にある場合、iproute 上での管理では「secondary」となるようです。

しかし、既存には無いネットワークアドレスだった場合、インタフェースに対する IP エイリアスであっても、iproute 上では primary 扱いになるようです。

iproute 上で primary 扱いになっている物を down すると、それに引きづられる形で、secondary 扱いのものが無くなってしまう、という仕組みだと考えられます。

IPROUTE2 Utility Suite Documentation

そのことが、上記ページの「IP Interface Primary and Secondary Addressing」辺りに書いてあるらしいのですが、私の英語力では読み取れませんでした(^^;。

id:yoshifumi1975

回答ありがとうございます。そのものずばりですね。primary削除時にsecondaryは自動昇格しない、という旨書いてあります。independent に扱いたいなら、prefixを32にしなさいと書いてあります。

# ip addr add 10.0.10.10/32 dev eth0

# ip addr add 10.0.10.11/32 dev eth0

# ip addr add 10.0.10.12/32 dev eth0

# ip addr show primary

にて、すべてprimary 扱いになっていることを確認しました。

2009/11/12 20:52:31
id:b-wind No.2

回答回数3344ベストアンサー獲得回数440

これは、そういう仕様なのでしょうか。

そういう仕様。というか手段が間違っている。


Linux Networking-HOWTO (Previously the Net-3 Howto): IP 関係、イーサネット関係の情報

上記URLの 6.5 を参照のこと。

エイリアスを削除する場合、仮想的なデバイス名の後に `-' を付けて ifconfig します。

root# ifconfig eth0:0- 0

id:yoshifumi1975

情報が古い?ためか、上記の方法ではうまくいきませんでした。

ifconfig eth0:0- 10.0.10.1

で普通に、"eth0:0-"という名前の仮想デバイスが追加できてしまいます。

ifconfig eth0:0- 0 (0.0.0.0と等価?)

で普通に、"eth0:0-"を削除できます。

つまり現行バージョンのifconfigでは、ラベル部分の "-" には特別な意味は無いようです。

2009/11/12 20:47:37
id:azumi1975 No.3

回答回数337ベストアンサー獲得回数16

ポイント10pt

>そういう仕様なのでしょうか。

そういう仕様です。

1つめがMAINのアドレスとして扱うので、他のIPと対等でないからです。

id:yoshifumi1975

回答ありがとうございました。

2009/11/12 20:53:16

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません