連載
» 2002年12月07日 00時00分 公開

Linuxで作るIPv6ネットワーク環境(2):Web、DNS、メール、FTPサーバのIPv6化 (2/3)

[みやもとくにお,@IT]

DNSサーバの構築(BIND 9)

 DNSについては、極力既存の環境を生かすという観点から、すでに構築されているサーバでIPv6アドレスを解決させる方法を紹介します。

 DNSサーバでIPv6アドレスを扱うに当たって、新しい種類のレコードが増えているという点以外は何ら変わりません。BIND 9で構築されたDNSサーバをIPv6ホストの名前解決に使うのであれば、特に不自由はありません。

 筆者はBIND 9.2.1を用いてDNSサーバを構築していますが、ゾーンファイルにIPv6アドレスを解決するためのレコードを追加し、namedを再起動するだけで作業は完了します。

■ゾーンファイルの編集と動作確認

 IPv6では、FQDNからIPアドレスを解決するためにA6レコードもしくはAAAAレコードを用います。通常のAレコードによってFQDNからIPv4アドレスが導き出されるのに対し、A6もしくはAAAAレコードはFQDNからIPv6アドレスが導き出されます。

 このレコードをゾーンファイルに追加するわけですが、通常使用しているゾーンファイルに以下のような項目を追加します。

  v6sample        IN      AAAA    2001:2c0:418::1

 これで、AAAAレコードの解決が実施されるようになります()。

注:ゾーンファイル変更後は、シリアル番号を増やすことを忘れずに。


 アドレス解決の例を以下に示します。なお、使用しているBIND 9は、特にIPv6を意識したコンパイルを実施しているわけではありません。

$ nslookup
Note:  nslookup is deprecated and may be removed from future releases.
Consider using the `dig' or `host' programs instead.  Run nslookup 
with
the `-sil[ent]' option to prevent this message from appearing.
> set type=AAAA
> v6sample
Server:         61.197.226.214
Address:        61.197.226.214#53

v6sample.todo.gr.jp     has AAAA address 2001:2c0:418::1

コラム ダイナミックアップデート(Dynamic Update)

 BIND 8から、DNSのレコードをクライアントから更新できる仕組み(Dynamic Update:動的更新)が用意されています。

  • アドレス表記が長いIPv6の管理を省力化できる可能性がある
  • ユーザーが自由にレコードを登録できる

という点において、ダイナミックアップデートは優れていますが、セキュリティや管理上の問題も発生しやすいことから、本稿では取り上げません。


Webサーバの構築(Apache 2.0)

 筆者が今回使用したRed Hat Linux 7.3はもともとIPv6に対応しており、Apache 2.0もIPv6に対応しています。これより、すでにApache 2.0をインストールしている場合は、USAGIカーネルをインストールするだけでWebもIPv6対応となります。新規にApache 2.0をインストールする場合も、基本的にはconfigureからmake installまで、特に手順を変更することはありません。

 これだけでは面白くないので、KAME Project(http://www.kame.net/)のように、IPv4でアクセスした場合とIPv6でアクセスした場合で表示されるページが異なるサイトにしてみましょう。そのために実施することは、httpd.confにVirtualHostの指定を加えることです。

■IPv4とIPv6で表示が異なるページに

 VirtualHostの指定例を以下に示します。61.197.226.210および2001:2c0:418::1の2つのアドレスを割り当て、それぞれのアドレスについてServerName、ServerAdmin、DocumentRoot、ErrorLog、TransferLogを指定しています。

<VirtualHost [::ffff:61.197.226.210]:80>
ServerName vifam7.todo.gr.jp
ServerAdmin webmaster@todo.gr.jp
DocumentRoot /home/apache/v4
ErrorLog /home/apache/log/v4err_log
TransferLog /home/apache/log/v4access_log
</VirtualHost>

<VirtualHost [2001:2c0:418::1]:80>
ServerName v6sample.todo.gr.jp
ServerAdmin webmaster@todo.gr.jp
DocumentRoot /home/apache/v6
ErrorLog /home/apache/log/v6err_log
TransferLog /home/apache/log/v6access_log
</VirtualHost>

 httpd.confを編集したらApache 2.0を再起動して、telnetクライアントでそれぞれのアドレスに対してHTTPアクセスを実施してみましょう。なお、例では/home/apache/v4および/home/apache/v6配下に、以下のようにしてindex.htmlを作成してあります。

$ echo IPv4 > /home/apache/v4/index.html
$ echo IPv6 > /home/apache/v6/index.html

$ telnet 61.197.226.210 80
Trying 61.197.226.210...
Connected to 61.197.226.210.
Escape character is '^]'.
GET /
IPv4
Connection closed by foreign host.
IPv4アドレスへアクセス

$ telnet 2001:2c0:418::1 80
Trying 2001:2c0:418::1...
Connected to 2001:2c0:418::1.
Escape character is '^]'.
GET /
IPv6
Connection closed by foreign host.
IPv6アドレスへアクセス

■Apache 1.3系は?

 Apache 1.3はIPv6に対応していないため、IPv6対応パッチを適用する必要があります。http://orange.kame.net/dev/cvsweb.cgi/kame/FAQ?rev=1.76でIPv6対応パッチの所在を調べることができます。しかし、最新のパッチでもApache 1.3.22向けであり、Apacheのバージョンが若干古めです。

 IPv6対応のWebサーバを構築するのであれば、Apache 2.0ベースにすることをお勧めします。

SMTPサーバの構築(Postfix)

 Postfixは2002年12月現在で1.1.12がリリースされていますが、残念ながらこのバージョンに適合するパッチは見つけられませんでした()。1.1.11-20021115に対するパッチはDean Strik's Postfix Page(http://www.ipnet6.org/postfix.html)で公開されているので、そちらを用いることにします。

注:原稿執筆時点では存在しませんでしたが、2002年12月6日現在ではpostfix-1.1.12-20021124に対応するパッチが取得できます。


■PostfixとIPv6パッチのインストール

 Postfix本体は、Postfix Download Siteの一覧(http://www.postfix.org/ftp-sites.html)から、Postfix-1.1.11-20021115のアーカイブをダウンロードします。

 IPv6パッチは、Dean Strik's Postfix Page(http://www.ipnet6.org/postfix.html)からPatch for TLS and IPv6 support, 1.1.11-20021101(tls+ipv6-1.8-pf-1.1.11-20021115.patch)をダウンロードします。

 Postfixとパッチをダウンロードしたら、以下の手順でPostfixのアーカイブを展開してパッチを適用します。

$ gzip -dc postfix-1.1.11-20021115.tar.gz | tar xvf -
$ cd postfix-1.1.11-20021115
$ patch -p1 < [tls+ipv6-1.8-pf-1.1.11-20021115.patchのパス名]

 パッチを当てたら、Postfixのmakeおよびインストールを実施します。インストール前に、Postfixの動作に必要なユーザーおよびグループを作成しておきます。

$ make
$ /usr/sbin/groupadd postfix
$ /usr/sbin/groupadd postdrop
$ /usr/sbin/useradd -g postfix postfix
$ make install

 最後のmake installの時点でいろいろと質問されますが、すべてデフォルト値で問題ありません(すべて[Enter]キーで答える)。

■/etc/postfix/main.cfの設定と動作チェック

 Postfixの設定は、/etc/postfix/main.cfに格納されます。/etc/postfix配下にサンプルファイルがあるので、自分の用途に合ったサンプルを選んで適宜編集してください。

 すでに使用実績がある設定ファイルを持っているのであれば、それを利用します。追加設定はほとんど不要ですが、mynetworksなどの指定においてIPv6アドレスを指定するには、例えば以下のように記述します。

mynetworks = 61.197.226.208/29, 127.0.0.1/8, [2001:2c0:418::]/48

 上記の例のように、IPv6アドレスは前後を「[]」で囲い、ネットワークの指定が必要な場合はアドレスマスクのビット長を「/」の後に記述します。

 ここまで完了したら、Postfixを起動させてみましょう。

$ su root
# /usr/sbin/postfix start

 Postfixのチェックは、telnetでSMTPポートに対するコネクションを開設することで実施可能です。

$ telnet v6sample 25
Trying 2001:2c0:418::1...
Connected to v6sample.
Escape character is '^]'.
220 v6sample.todo.gr.jp ESMTP Postfix
mail From: wakatono@todo.gr.jp
250 Ok
rcpt To: wakatono@todo.gr.jp
250 Ok
data
354 End data with <CR><LF>.<CR><LF>
This is sample mail from IPv6 host.
.
250 Ok: queued as C9394ABB4
quit
221 Bye
Connection closed by foreign host.

 これで、ちゃんとメールが届けば問題ありません。

■Postfix-1.1.12の場合

 2002年11月24日にPostfix-1.1.12がリリースされましたが、実はこれに対応するIPv6パッチが存在します。高山啓介氏が作成された非公式パッチ()ですが、このパッチはKAMEを対象にしていることもあり、USAGI環境ではそのままコンパイルして動作するというわけにはいきませんでした。

 そこで、1.1.11-20021115に対するパッチと高山氏のパッチを比較して、取りあえずUSAGI環境で動くパッチを作成しました。興味がある方は試してみてください。

http://www.todo.gr.jp/~wakatono/ipv6/postfix-1.1.12+ipv6-usagi.patch.gz

から取得可能です。

注:KAME Projectから配布されているPostfix IPv6対応パッチpostfix-20010228pl04-v6-20010913a.diff.gzを基に作ったとのことです。

http://www.uinet.or.jp/~taka/network/postfix.html

で配布されています。


SMTPサーバの構築(qmail)

 qmailのインストールについては、実用qmailサーバ運用・管理術があるので割愛します。ここではIPv6対応のパッチを中心に解説します。

 qmailはtcpserverとともに使われることが多いので、qmailのパッチおよびtcpserverのパッチを準備します。

よりそれぞれ入手可能です。

 一応紹介しておくと、ucspi-tcp-0.88およびqmail-1.03のオリジナルアーカイブは、

でダウンロードできます。

 それぞれのパッチは特にエラーもなく適用可能であり、パッチ施行→コンパイル→インストールも問題なく行えます。

$ gzip -dc ucspi-tcp-0.88.tar.gz | tar xvf -
$ bzip2 -dc ucspi-tcp-0.88-ipv6.diff13.bz2 > ucspi-patch
$ cd ucspi-tcp-0.88
$ patch -p1 < ../ucspi-patch
tcpserverへのパッチ適用例

$ gzip -dc qmail-1.03.tar.gz | tar xvf -
$ cd qmail-1.03
$ patch -p1 < ../qmail-1.03-v6-20021006.diff
qmailへのパッチ適用例

 コンパイルおよびインストールの手順は、実用qmailサーバ運用・管理術 第1回で紹介されている方法で問題ありません。

 以上の作業が完了した時点で、tcpserverで使用するデータベースファイル(cdb)もIPv6アドレスからのアクセスを制御できるようになります。例えば、特定のIPv6ネットワークからのアクセスについて、以下のような形でcdbの基になるファイルに記述できます。

2001:2c0:418:::allow,RELAYCLIENT=""

 最初の「2001:2c0:418::」がIPv6のネットワークアドレス表記ですが、「:allow」以降は従来と変わりません。

 恒例の動作確認用telnetの結果を以下に示します。

# telnet v6sample smtp
Trying 2001:2c0:418::1...
Connected to v6sample.
Escape character is '^]'.
220 vifam7.todo.gr.jp ESMTP

 ここまでできれば、後はqmailの基本的な設定を済ませ、Postfixと同様に配送試験を実施すればOKです。

POP3/IMAP4サーバの構築(courier-imap)

 SMTPサーバとして紹介したPostfixおよびqmailは、Maildir形式のメールスプールをサポートしています。Maildir形式をサポートしているPOP/IMAPサーバとしてはcourier-imapがあります。courier-imapはIPv6にも対応しており、2002年12月現在の最新版はcourier-imap-1.6.1です。

http://www.courier-mta.org/

 インストールや設定の方法は、実用qmailサーバ運用・管理術 第2回と同じです。コンパイルから設定まで、IPv4と手順がまったく変わらないため、詳細は割愛します。筆者の場合、/usr/local/courier-imap/libexec/authlib/配下にauthdaemond.ldapが存在したために認証を受け付けてもらえなかったという経験があります。このように拡張モジュールが存在した場合の対処方法も同記事に記載されています。

FTPサーバの構築(ProFTPD)

 USAGIのユーザーランドを構築/インストールした時点で、IPv6対応のinetdとFTPサーバがインストールされます。しかし、ここではFTPサーバの定番ともいえるProFTPDを使ってみましょう。ただし、ProFTPDがIPv6対応を実施するのは1.3からであり、現在リリースされている1.2.xではIPv6に対応していません。従って、IPv6環境でProFTPDを使う場合はパッチが必要になります。

 2002年12月現在、ProFTPDの最新版は1.2.7rc3ですが、IPv6対応パッチがリリースされている範囲の最新版は1.2.5です。そこで、今回はProFTPD 1.2.5を使います。

■ProFTPDのソースコードおよびパッチの入手

 ProFTPDのオリジナル・アーカイブは、ProFTPDの本家サイトおよびミラーサイトからも入手が可能です。ただし、今回利用する1.2.5は最新版ではないため、

ftp://ftp.middle-earth.it/proftpd/historic/v1.2/proftpd-1.2.5.tar.bz2

のようにhistoricディレクトリ配下に移動しています。探すときには気を付けてください。

 IPv6パッチは、proftpd-1.2.5-ipv6.diff.gzという名前で公開されています。例えば、以下のところから入手可能です。

http://kebo.vlsm.org/debian-ipv6/patch/proftpd/1.2.5/

■パッチの適用とコンパイル/インストール

 入手したソースにパッチを適用します。

$ bzip2 -dc proftpd-1.2.5.tar.bz2 | tar xvf -
$ cd proftpd-1.2.5
$ gzip -dc ../proftpd-1.2.5-ipv6.diff.gz | patch -p1

 ここで問題が1つ発生します。Make.rules.inというファイルに対してパッチを適用する際にrejectされてしまいます。rejectされた内容をチェックしてMake.rules.inを修正するか、以下のものに差し替える必要があります。

 この後は、普通にconfigure+make+make installを実施すれば問題ありません。

 インストールできたら、動作確認してみましょう。FTPサーバのIPv6アドレスに対してFTP接続してみます。FTPクライアントもIPv6に対応している必要がありますが、USAGIのコマンドインストール時にインストールされています。動作の様子を以下に示します。

$ /usr/local/v6/bin/ftp v6sample
Connected to 2001:2c0:418::1 (2001:2c0:418::1).
220 ProFTPD 1.2.5 Server (ProFTPD Default Installation) 
[vifam7.todo.gr.jp]
Name (v6sample:wakatono):
331 Password required for wakatono.
Password:
230 User wakatono logged in.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> lcd /tmp
Local directory now /tmp
ftp> ls
200 EPRT command successful.
150 Opening ASCII mode data connection for file list.
drwx------   3 wakatono wakatono     4096 Nov 24 11:58 Desktop
-rw-rw-r--   1 wakatono wakatono     1622 Aug  4 17:23 Emacs
(中略)
drwxrwxr-x   5 wakatono wakatono     4096 Oct  9 19:30 work
226 Transfer complete.
ftp> get v6patpost
local: v6patpost remote: v6patpost
200 EPRT command successful.
150 Opening BINARY mode data connection for v6patpost (98726 bytes).
226 Transfer complete.
98726 bytes received in 0.0262 secs (3.7e+03 Kbytes/sec)
ftp> pas
Passive mode on.
ftp> get v6patpost
local: v6patpost remote: v6patpost
229 Entering Extended Passive Mode (|||4294934920|).
150 Opening BINARY mode data connection for v6patpost (98726 bytes).
226 Transfer complete.
98726 bytes received in 0.00771 secs (1.2e+04 Kbytes/sec)
ftp> bye
221 Goodbye.

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

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

メールマガジン登録

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