2013年10月31日木曜日

CentOS6から複数IPアドレス設定の方法か変わったらしい、件

UNIX系OSにおいて、1つの物理ネットワークインターフェースで複数のIPアドレスを使うのに、eth0:0といった仮想?インターフェースを定義して別のアドレスを振る、ってのがここ20年近く使われてきた常套手段だと思いますが、どうも最近のCentOSには別の方法があるようです。

 CentOSでIPアドレスを固定にしようと思いGUIメニューから、システム→設定→ネットワーク接続、でネットワークインターフェースを選択して編集をクリック、IPv4のセッティングタブを開くと、IPアドレスを複数設定できるように見えます。


おそらく最初のIPがeth0に割り当てられ、2つ目がeth0:0、3つ目がeth0:1、と言った具合に続くと予想していました。仕事で複数IP振る必要があったので、早速試してみました。

下のように192.168.100.101と192.168.100.102を設定して、


ifconfigで確認したところ、アドレス192.168.100.102は出てきません。


bash-4.1$ ifconfig -a
eth0      Link encap:Ethernet  HWaddr 08:00:27:DC:58:77
          inet addr:192.168.100.101  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fedc:5877/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:25 errors:0 dropped:0 overruns:0 frame:0
          TX packets:47 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:12297 (12.0 KiB)  TX bytes:3305 (3.2 KiB)
          Interrupt:10 Base address:0xd020

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:480 (480.0 b)  TX bytes:480 (480.0 b)


しかし、他のマシンからpingを打つとちゃんと帰ってきます。pingを打ったマシンでarpを見ると、ちゃんと複数IPアドレスが同一MACアドレスにリンクされています。


$ arp -a
? (192.168.100.101) at 8:0:27:dc:58:77 on en1 ifscope [ethernet]
? (192.168.100.102) at 8:0:27:dc:58:77 on en1 ifscope [ethernet]


どゆこと???
(◕‿‿◕)わけがわからないよ。

意図した通りに動いているけど原理がまったくわからない。
「CentOS6+複数IPアドレス」で検索しても、従来の方法しか見つかりませんでしたが、「RedHat6+複数IPアドレス」でようやくこのページにたどり着きました。

RHEL6: ifconfig is obsolete!

このページによると、ifconfigは廃止なんだそうで、今後はip addrを使えってことでした。早速やってみると、


bash-4.1$ ip addr
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 08:00:27:dc:58:77 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.101/24 brd 192.168.100.255 scope global eth0
    inet 192.168.100.102/24 brd 192.168.100.255 scope global secondary eth0
    inet6 fe80::a00:27ff:fedc:5877/64 scope link
       valid_lft forever preferred_lft forever


でてきました。 どうやら最近のRedHat系OSは1つのインターフェースに仮想インターフェースを追加することなくフツーに複数IPアドレス設定できるようになっているようです。従来のifconfigではこの設定を見ることはできず、ip addrでないと見れない。

設定ファイルの中は、以下の通り2つ目以降のアドレスをIPADDR2等で設定しています。


bash-4.1$ cat /etc/sysconfig/network-scripts/ifcfg-Auto_eth0
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.100.101
PREFIX=24
GATEWAY=192.168.100.254
DNS1=192.168.100.254
DOMAIN=burger.jp
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
NAME="Auto eth0"
UUID=e35c20d7-be0a-44e4-bdea-a3f20d6a9165
ONBOOT=yes
IPADDR2=192.168.100.102
PREFIX2=24
HWADDR=08:00:27:DC:58:77
LAST_CONNECT=1383196516


ずいぶん簡単にできるようになりました。が、このリンク先にもある通り、仮想インターフェース方式ならup/downを別にできる(ip addr add/delでできそうなので削除)、webminが複数IPアドレス方式だと認識できない、といったこともあるようなので、用途によってどちらを使うか考える必要があります。Apahce2.2は問題なく動きました。

ためしにこの状態で仮想インターフェースも使えるかやってみました。/etc/sysconfig/network-scripts/ifcfg-eth0:0を以下のように用意します。192.168.100.103を仮想IPアドレスにします。


bash-4.1$ cat /etc/sysconfig/network-scripts/ifcfg-eth0:0
TYPE=Ethernet
BOOTPROTO=none
IPADDR=192.168.100.103
PREFIX=24
GATEWAY=192.168.100.254
ONBOOT=yes


リブート後ifconfigで確認すると、192.168.100.102は相変わらず出ませんがeth0:0で192.168.100.103が出てきました。


bash-4.1$ ifconfig -a
eth0      Link encap:Ethernet  HWaddr 08:00:27:DC:58:77
          inet addr:192.168.100.101  Bcast:192.168.100.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fedc:5877/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:23 errors:0 dropped:0 overruns:0 frame:0
          TX packets:45 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:12171 (11.8 KiB)  TX bytes:3221 (3.1 KiB)
          Interrupt:10 Base address:0xd020

eth0:0    Link encap:Ethernet  HWaddr 08:00:27:DC:58:77
          inet addr:192.168.100.103  Bcast:192.168.100.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:10 Base address:0xd020

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:480 (480.0 b)  TX bytes:480 (480.0 b)


ip addrはこんなカンジです。


bash-4.1$ ip addr
1: lo:  mtu 16436 qdisc noqueue state UNKNOWN
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 1000
    link/ether 08:00:27:dc:58:77 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.101/24 brd 192.168.100.255 scope global eth0
    inet 192.168.100.102/24 brd 192.168.100.255 scope global secondary eth0
    inet 192.168.100.103/24 brd 192.168.100.255 scope global secondary eth0:0
    inet6 fe80::a00:27ff:fedc:5877/64 scope link


他のマシンからはすべて問題なくpingが通りました。