連載
» 2011年11月28日 00時00分 公開

これから始めるIPv6(3):3つの手順で実現、サーバOSのIPv6対応 (2/2)

[許先明,株式会社ラック]
前のページへ 1|2       

サーバOSのIPv6対応手順

 サーバをIPv6対応にするためには、まずネットワークがIPv6に対応している必要があります。ネットワークがIPv6に対応していなければIPv6で通信ができないわけですから、これは当然です。

 ネットワークがIPv6に対応したらば、早速OSもIPv6に対応させましょう。CentOSをIPv6に対応させるには、以下の作業を行う必要があります。

  1. NICにIPv6アドレスを割り当てる
  2. 経路制御情報を設定する
  3. 通信が可能かどうかを確認する

 今回は、図1に示したネットワークを前提にサーバをIPv6化することにします。

図1 設定例のネットワーク図 図1 設定例のネットワーク図

 なお、本稿で扱う各種設定は、あくまでもサーバをIPv6に対応させるためだけのものであって、セキュリティ設定などに関しては取り扱いません。また実際にサービスを行う場合、ネットワーク関連の設定以外にさまざまな設定が必要になりますが、そのあたりの設定に関しては、IPv4を用いたサーバ構築と同様です。本稿では、この部分は取り上げません。

 なお、本稿で利用しているIPv4/IPv6アドレスは、文書化用に割り当てられているものを利用しています。

NICにIPv6アドレスを割り当てる

 サーバにアドレスを割り当てる場合、DHCPなどを用いた自動設定でアドレスを割り当てるのではなく、手動でアドレスを割り当てるケースのほうが多いはずです。本稿でも、すべてのサーバに事前に決められたIPv6アドレスを割り当てることとし、Router Advertisement(RA)によるアドレス割り当ては行わないものとします。

【関連記事】

第2回 どう割り振る? IPv6でのアドレス設計

http://www.atmarkit.co.jp/fnetwork/rensai/v6again02/01.html


 また、実サービスで運用する場合には、別途管理用NICなどを設けて利用する場合が多いでしょうが、今回はそのあたりは考慮せず、利用するNICはeth0のみとします。

 このような条件で、サーバをIPv6対応にする場合の手順を以下に挙げます。

RAによるIPv6アドレスの割り当てを受けないようにする

 サーバに自動でIPアドレスが割り当てられると、運用上やセキュリティ対策上、管理するべき対象が増えます。従って、サーバに関してはRAによるアドレスの自動設定を切っておき、手動で固定アドレスを割り当てるほうが望ましいと考えられます。

 RAを受け取らないようにするには、カーネルがRAを受け取らないように設定する必要があります。サーバにログインし、rootになってください。その上で、以下のコマンドを入力してください。

[Web:/]# sysctl net.ipv6.conf.eth0.accept_ra=0
net.ipv6.conf.eth0.accept_ra = 0

 これで、eth0ではRAを受け取らないようになります。

 また、すでにRAによってIPv6アドレスが付いている場合には、そのアドレスを削除しておきましょう。まず、現在割り振られているIPv6アドレスを確認してみます。

[Web:/]# ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 9a:07:18:62:b9:c5 brd ff:ff:ff:ff:ff:ff
    inet 192.0.2.2/29 brd 192.0.2.7 scope global eth0
    inet6 2001:db8::200:ff:fe00:1/64 scope global 
        valid_lft forever preferred_lft forever
    inet6 fe80::9807:18ff:fe62:b9c5/64 scope link 
       valid_lft forever preferred_lft forever

 ここから、すでに割り当てられているIPv6アドレスを削除するには、以下のように入力します。

[Web:/]# ip addr del 2001:db8::200:ff:fe00:1/64 dev eth0
[Web:/]# ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 9a:07:18:62:b9:c5 brd ff:ff:ff:ff:ff:ff
    inet 192.0.2.2/29 brd 192.0.2.7 scope global eth0
    inet6 fe80::9807:18ff:fe62:b9c5/64 scope link 
       valid_lft forever preferred_lft forever

NICにIPv6アドレスを割り当てる

 NICに任意のIPv6アドレスを割り当てるには、ipコマンド(ifconfigコマンドでも可能)を用いて、以下のように入力します。

[Web:/]# ip addr add 2001:db8::80:1/64 dev eth0
[Web:/]# ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 9a:07:18:62:b9:c5 brd ff:ff:ff:ff:ff:ff
    inet 192.0.2.2/29 brd 192.0.2.7 scope global eth0
    inet6 2001:db8::80:1/64 scope global 
        valid_lft forever preferred_lft forever
    inet6 fe80::9807:18ff:fe62:b9c5/64 scope link 
       valid_lft forever preferred_lft forever

 これでeth0にIPv6アドレスが割り当てられました。

経路制御情報を設定する

 経路制御情報も、同様にipコマンドで設定できます。もちろんrouteコマンドでも可能です。

[Web:/]# ip route add ::/0 via 2001:db8::1 dev eth0
[Web:/]# ip -6 route show | grep default
default via 2001:db8::1 dev eth1  proto kernel metric 1024 expires 0sec mtu 1500 advmss 1440 hoplimit 64

 これで設定できました。

通信確認をする

 ここまでくれば、とにかく外部と通信できるか確認したくなるはずです。IPv6のアドレスを持っているサーバを探して、そこにICMPを打ってみましょう。ここでのコマンドは、IPv4で利用しているpingではなく、ping6となります。

 この結果、問題なく通信できていれば設定はOKです。うまく通信できない場合には、まず設定に間違いがないか確認してください。それでもダメなら、ネットワークの管理者に確認してください。

Systemの設定ファイルに必要な情報を書き込む

 CentOSでネットワークの設定を行う場合は、

  • /etc/sysconfig/network
  • /etc/sysconfig/network-scripts/ifcfg-eth0

の2つのファイルにデータを書きこむ必要があります。

 今回の例に合わせて作成したファイルを以下に記載します。

HOSTNAME=Web.example.jp
−−
#IPv4
NETWORKING=yes
GATEWAY=192.0.2.1
−−
#IPv6
NETWORKING_IPV6=yes           # IPv6を利用する
IPV6_DEFAULTGW=2001:db8::1    # IPv6を利用する際のDefault Router
IPV6_AUTOCONF=no              # RAを利用しない
/etc/sysconfig/networkの内容
DEVICE=eth0
BOOTPROTO=none
ONBOOT=yes
NETWORK=192.0.2.0
NETMASK=255.255.255.0
IPADDR=192.0.2.2
IPV6INIT=ye                      # IPv6を利用する
IPV6ADDR=2001:db8::80/64         # IPv6アドレス
/etc/sysconfig/network-scripts/ifcfg-eth0の内容

 ファイルを記述する際の注意をいくつか述べておきます。まず、キーワード(IPV6ADDRなど)はすべて、大文字で記載してください。間違えると設定が反映されません。筆者も「IPv6ADDR」などと記載したため、システムに反映されず、悩んでしまったことがあります。

 また、メールサーバのように、1つのNICに複数のIPv6アドレスを割り当てる場合には、

/etc/sysconfig/network-script/ifcfg-eth0

/etc/sysconfig/network-script/ifcfg-eth0:1

/etc/sysconfig/network-script/ifcfg-eth0:2

のように設定ファイルを追加していってください。これは、IPv4の場合と同様です。

正しく設定できているかの確認

 ここまで設定ができたら、一度、正しく設定がなされているかどうか確認しましょう。

[Web:/]# service network restart
Shutting down interface eth0:                            [  OK  ]
Shutting down interface eth1:                            [  OK  ]
Shutting down loopback interface:                        [  OK  ]
Bringing up loopback interface:                          [  OK  ]
Bringing up interface eth0:                              [  OK  ]
Bringing up interface eth1:                              [  OK  ]
[Web:/]

 このようにすべて正常に終了すれば、設定ファイルに致命的なミスはありません。その後、以下のように入力して、NICに割り当てたIPv6アドレスが正しく設定されているか、経路情報が正しいかを確認します。

[Web:/]# sysctl net.ipv6.conf.eth0.accept_ra
net.ipv6.conf.eth0.accept_ra = 0         # RAを受け取らない
[Web:/]# ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 9a:07:18:62:b9:c5 brd ff:ff:ff:ff:ff:ff
    inet 192.0.2.2/29 brd 192.9.2.7 scope global eth0
    inet6 2001:db8::80:1/64 scope global # 正しくIPv6アドレスが割り当てられている
       valid_lft forever preferred_lft forever
    inet6 fe80::9807:18ff:fe62:b9c5/64 scope link 
       valid_lft forever preferred_lft forever
[Web:/]# ip -6 route show | grep default
default via 2001:db8::1 dev eth1 proto kernel metric 1024 expires 0sec mtu 1500 advmss 1440 hoplimit 64
                                        # IPv6のdefault routeが登録されている

 この段階で、正しい情報が設定されていない場合、設定ファイル内に間違いがあるはずです。キーワードの大文字小文字などに注意して見直してください。

 これでサーバの設定ができました。次回は、そのサーバ上で動作するアプリケーションをIPv6に対応させる設定について説明します。


前のページへ 1|2       

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。