3つの手順で実現、サーバOSのIPv6対応:これから始めるIPv6(3)(2/2 ページ)
IPv4アドレス在庫の枯渇やWorld IPv6 Dayの実施に伴い、「そういえば昔IPv6について読んだけれど、いまはどうなっているんだろう?」と感じている人も多いのではないでしょうか。最新状況を踏まえたIPv6の「基礎」を改めて紹介します。(編集部)
サーバOSのIPv6対応手順
サーバをIPv6対応にするためには、まずネットワークがIPv6に対応している必要があります。ネットワークがIPv6に対応していなければIPv6で通信ができないわけですから、これは当然です。
ネットワークがIPv6に対応したらば、早速OSもIPv6に対応させましょう。CentOSをIPv6に対応させるには、以下の作業を行う必要があります。
- NICにIPv6アドレスを割り当てる
- 経路制御情報を設定する
- 通信が可能かどうかを確認する
今回は、図1に示したネットワークを前提にサーバをIPv6化することにします。
なお、本稿で扱う各種設定は、あくまでもサーバをIPv6に対応させるためだけのものであって、セキュリティ設定などに関しては取り扱いません。また実際にサービスを行う場合、ネットワーク関連の設定以外にさまざまな設定が必要になりますが、そのあたりの設定に関しては、IPv4を用いたサーバ構築と同様です。本稿では、この部分は取り上げません。
なお、本稿で利用しているIPv4/IPv6アドレスは、文書化用に割り当てられているものを利用しています。
NICにIPv6アドレスを割り当てる
サーバにアドレスを割り当てる場合、DHCPなどを用いた自動設定でアドレスを割り当てるのではなく、手動でアドレスを割り当てるケースのほうが多いはずです。本稿でも、すべてのサーバに事前に決められたIPv6アドレスを割り当てることとし、Router Advertisement(RA)によるアドレス割り当ては行わないものとします。
また、実サービスで運用する場合には、別途管理用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を利用しない
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アドレス
ファイルを記述する際の注意をいくつか述べておきます。まず、キーワード(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に対応させる設定について説明します。
Copyright © ITmedia, Inc. All Rights Reserved.