1つのNICに複数のIPアドレスを割り振る方法 | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

PC環境などで、システムの構築や検証作業を行う場合、本番のサーバー環境と違いNIC(Network Interface Card )が1枚しかなく、システムの構成に合わない場合があったりします。

例えば、表と裏のネットワークセグメントにサーバーが接続されていて、表をユーザーからのリクエスト処理用に、裏はDBサーバーに接続するなどのプログラムの通信用にしたりとか。

(本来であれば、構築や検証は本番と同様のサーバー環境上で行う事が望ましいですが)


こうした場合、1つのNICに対して、複数のIPアドレスを割り振る事ができます。

(RedHatの場合。他のディストリビューションでも検証できたら掲載します・・・)



1. ネットワークの設定ファイルを複製


RedHatの場合、「/etc/sysconfig/network-scripts/ifcfg-ethX」(Xは数値)というファイル上にそのNICに割り振るIPアドレスなどの設定が記載されています。

eth0が1枚目のNIC、eth1が2枚目のNICという具合です。

PC環境でNICが1枚しかない場合は、当然「ifcfg-eth0」というファイルしかないはずです。

現状、ifcfg-eth0のファイルが下記のようになっているとします。


DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.100
NETMASK=255.255.255.0

※ DHCPでIPを取得するように設定されている場合「BOOTPROTO=dhcp」と設定されており「IPADDR」や「NETMASK」

  の項目がありません。静的にIPを振るのであれば上記のように「BOOTPROTO=static」と設定し、その上で

  「IPADDR」(IPアドレス)や「NETMASK」(ネットマスク値)を記載してください。


このファイルを複製して、ifcfg-eth0:1というファイルを作成します。


# cd /etc/sysconfig/network-scripts
# cp ifcfg-eth0 ifcfg-eth0:1


2. 複製したファイル(ifcfg-eth0:1)の編集


複製したファイルに、割り振るIPアドレスなどのネットワークの設定を書き込みます。


DEVICE=eth0:1
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.0.200
NETMASK=255.255.255.0


3. ネットワークデーモンの再起動


そのPC上のネットワークの処理を行っているデーモンを再起動し、設定ファイルを読み込ませます。


# /etc/init.d/network restart

これで、そのPC上にて1枚にNICに複数のIPアドレスが割り振られているはずです。


確認は、ifconfigコマンドを使うとかPINGで疎通を確認するとかで行ってみてください。

ifconfigを使う場合、「ifcfg-eth0」と「ifcfg-eth0:1」の項目があり、そこに表示されているIPなどの情報が設定ファイルに書き込んだものとイコールであれば問題ありません。


ここまでの話は1つのNICに対して複数のIPアドレスを割り振る方法です。

ですが、これはあまり本番で稼動するようなサーバーでは利用しない手法です。

何故なら、NICが1枚しかないということはそこにつながっているLANの線も1つしかないということで、NICが壊れたら全ての通信が途絶えてしまう事と、アクセス数が多い場合そのLAN上の帯域が使い切られてしまい、ネットワークの方がボトルネックになる可能性があるからです。

また、サーバーを購入する前にシステムの構成が明らかになっているはずなので必要なNICの数もはっきりしており、それに見合ったサーバーを導入する事になります。


で、本番のサーバー環境ではどのような事をするかと言うと、これと逆の事を行ったりする場合があります。

つまり、複数のNICに対して一つのIPアドレスを割り振ると言う事です。

これをBonding(ボンディング)やTeaming(チーミング)と言います。

こうする事で、1つのNICが壊れても他方のNICで同IPからリクエストを受け付けることができます。またネットワークの経路を別にしておけば帯域を分散させる事も可能となります。

この設定については、下記を参照してみてください。


LinuxでNIC Teaming