1つのNICに複数のIPアドレスをアサインする

2009/10/18PC::Linux/BSD

Linuxで1つの物理NICに複数のIPアドレスをアサインする方法に関するメモ。

環境

以下の環境で試してみました。

  • Kubuntu 9.04/amd64
    • Kernel: 2.6.28-15-generic

この環境でのifconfigの出力は以下の通り。

$ ifconfig
eth0      Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx
          inetアドレス:192.168.xxx.xxx  ブロードキャスト:192.168.xxx.255  マスク:255.255.255.0
          inet6アドレス: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 範囲:グローバル
          inet6アドレス: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:2224992 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:1592433 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000
          RXバイト:2753802229 (2.7 GB)  TXバイト:552776890 (552.7 MB)
          割り込み:16

lo        Link encap:ローカルループバック
          inetアドレス:127.0.0.1  マスク:255.0.0.0
          inet6アドレス: ::1/128 範囲:ホスト
          UP LOOPBACK RUNNING  MTU:16436  メトリック:1
          RXパケット:7135 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:7135 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:0
          RXバイト:4808865 (4.8 MB)  TXバイト:4808865 (4.8 MB)

別ネットワークのIPアドレスを割り当てる

ifconfigで仮想的なインターフェイス(eth0:0)をeth0に対して割り当て、eth0:0に対して172.16.0.1/16を割り当ててみる。
このような機能をIPエイリアスと呼ぶらしい。

$ sudo ifconfig eth0:0 172.16.1.1 netmask 255.255.0.0 broadcast 172.16.255.255
$ ifconfig
eth0      Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx
          inetアドレス:192.168.xxx.xxx  ブロードキャスト:192.168.xxx.255  マスク:255.255.255.0
          inet6アドレス: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 範囲:グローバル
          inet6アドレス: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:2224992 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:1592433 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000
          RXバイト:2753802229 (2.7 GB)  TXバイト:552776890 (552.7 MB)
          割り込み:16

eth0:0    Link encap:イーサネット  ハードウェアアドレス 00:14:5e:1e:26:92
          inetアドレス:172.16.1.1  ブロードキャスト:172.16.255.255  マスク:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          割り込み:16

lo        Link encap:ローカルループバック
          inetアドレス:127.0.0.1  マスク:255.0.0.0
          inet6アドレス: ::1/128 範囲:ホスト
          UP LOOPBACK RUNNING  MTU:16436  メトリック:1
          RXパケット:7261 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:7261 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:0
          RXバイト:4817685 (4.8 MB)  TXバイト:4817685 (4.8 MB)

定義したIPエイリアスを削除する

eth0をダウンさせるのと同様にeth0:0をダウンさせればいい。

$ sudo ifconfig eth0:0 down
$ ifconfig
eth0      Link encap:イーサネット  ハードウェアアドレス xx:xx:xx:xx:xx:xx
          inetアドレス:192.168.xxx.xxx  ブロードキャスト:192.168.xxx.255  マスク:255.255.255.0
          inet6アドレス: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 範囲:グローバル
          inet6アドレス: xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx:xxxx/64 範囲:リンク
          UP BROADCAST RUNNING MULTICAST  MTU:1500  メトリック:1
          RXパケット:2224992 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:1592433 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:1000
          RXバイト:2753802229 (2.7 GB)  TXバイト:552776890 (552.7 MB)
          割り込み:16

lo        Link encap:ローカルループバック
          inetアドレス:127.0.0.1  マスク:255.0.0.0
          inet6アドレス: ::1/128 範囲:ホスト
          UP LOOPBACK RUNNING  MTU:16436  メトリック:1
          RXパケット:7261 エラー:0 損失:0 オーバラン:0 フレーム:0
          TXパケット:7261 エラー:0 損失:0 オーバラン:0 キャリア:0
          衝突(Collisions):0 TXキュー長:0
          RXバイト:4817685 (4.8 MB)  TXバイト:4817685 (4.8 MB)

これでネットワークの移行が楽になる。

参考

ITmedia Linux Tips「1枚のNICに複数のIPアドレスを割り当てたい」