1つのNICに複数のIPアドレスをアサインする
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)
これでネットワークの移行が楽になる。