Vine LinuxでIPv6を使う方法

    
    2003年 1月22日 初版公開
    2005年 8月23日 第17版公開


   本稿は Vine Linux 3.0/3.1 で IPv6 を使用する方法を簡単にまとめたものです
    Vine Linux 2.5/2.6 はこちら



目次


0. IPv6はもはや「次世代」ではない
1. カーネルのIPv6対応
2. IPv6で外部と接続する
 2.1 6to4の場合
 2.2 通常のトンネル接続の場合
  2.2.1 トンネル接続の相手先
  2.2.2 トンネル接続の設定例
  2.2.3 経路制御
 2.3 RA (Router Advertisement)
3. パケットフィルタ
4. サーバをIPv6対応にする
 4.1 DNS(53/udp, 53/tcp)
 4.2 MTA(25/tcp)
 4.3 ssh(22/tcp)
 4.4 telnet(23/tcp)
 4.5 ftp(21/tcp他)
 4.6 http(80/tcp)
 4.7 ntp(123/udp)
5. クライアントをIPv6対応にする
 5.1 DNS
 5.2 MUA(電子メール)
 5.3 ssh
 5.4 telnet
 5.5 ブラウザ
 5.6 apt
 5.7 ntp
6. 未解決の問題
7. 情報源
 7.1 リンク
 7.2 メーリングリスト
8. この文書について
 8.1 主な更新履歴





0. IPv6はもはや「次世代」ではない

 IPv6は以前「次世代インターネットプロトコル」と言われました。けれども今はもう実用期に入っています。Vine Linuxでも簡単に使用できます。もし未だに「次世代」と言う時代遅れの人がいたら実際に動いているのを見て認識を改めてもらいましょう。
 本稿はVine Linux 3.0/3.1でIPv6を使用する方法を簡単にまとめたものです。Vine Linux 2.5/2.6については旧版をご覧ください。

1. カーネルのIPv6対応

 Vineの各バージョンとカーネルの対応はこのようになっています。
Vine 1.0Kernel 2.0
Vine 1.1Kernel 2.0
Vine 2.0Kernel 2.2
Vine 2.1Kernel 2.2
Vine 2.1.5   Kernel 2.2
Vine 2.5Kernel 2.4
Vine 2.6Kernel 2.4
Vine 3.0Kernel 2.4
Vine 3.1Kernel 2.4
安定版Linuxカーネルは2.2からIPv6に対応していますので、IPv6を使用するためには少なくともVine 2.0以降でなければなりません。しかしカーネル2.2ではパケットフィルタが使えないため、カーネル2.4を使用すべきです。本稿はVine 3.0/3.1を対象としています。

 Vine 2.1以降ではカーネルのIPv6機能がモジュール化されています。デフォルトではIPv6が使用できませんので、モジュールを読み込ませる必要があります。
# /sbin/insmod ipv6
Vine 2.0のようにデフォルトで有効にしなかった理由は、IPv6を使用していない環境で悪影響を及ぼす場合があったからとのことでした。
 /etc/lilo.confに「NETWORKING_IPV6=yes」
image=/boot/vmlinuz-2.4.27-0vl17
	label=linux
	read-only
	root=/dev/hda3
	append=" NETWORKING_IPV6=yes resume2=swap:/dev/hda4"
を書き加えてカーネルに渡せば起動時自動的にモジュールが組み込まれます。
% /sbin/lsmod
で「ipv6」の行が表示されれば正常です。

2. IPv6で外部と接続する

 接続しているネットワークで既にIPv6が有効になっているのであれば特にやることはありません。設定は自動的に行われ、通信が可能です。本当に通信できるかどうかは、例えばtraceroute6コマンドで外部への経路を表示させることよって確かめられます。
% /bin/traceroute6 www.kame.net.
 自分のIPv6アドレスは、/sbin/ifconfigを実行すると表示されます。
inet6アドレス: fe80::XXXX:XXXX:XXXX:XXXX/10 範囲:リンク
inet6アドレス: 2001:XXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX/64 範囲:グローバル
重要なのは「グローバル」と書いてあるアドレスです。「リンク」の方しか表示されない場合は接続しているネットワークではまだIPv6が使えるようになっていないと考えられます。(正確なことはネットワーク管理者に問い合わる必要があります) IPv4アドレスしか表示されない場合はカーネルのIPv6機能が有効になっていません。
 現時点では既にIPv6が有効になっているネットワークは少数派ですので、多くの場合は自力で接続しなければなりません。その場合既存のIPv4インターネットを利用してIPv6 over IPv4のトンネル接続をするのが手軽です。続いてトンネル接続の方法について説明します。

2.1 6to4の場合

 簡便なのが6to4による接続です。6to4もトンネル接続の一種ですが、通常のトンネル接続と違って手続きが必要ありません。ただ自分で設定するだけです。
# /sbin/ifconfig sit0 up
# /sbin/ifconfig sit0 add 2002:XXXX:XXXX::1/16 ← 自分のパブリックIPv4アドレスから生成するIPv6アドレス
# /sbin/route -A inet6 add ::/1 dev sit0 gw ::192.26.91.178
この時、IPv6アドレス「2002:XXXX:XXXX::1/16」は自分のパブリックIPv4アドレスから生成したものでないと通信できません。「XXXX:XXXX」の部分に十六進表記のIPv4アドレスを埋め込みます。(
説明) パブリックでさえあればダイヤルアップやDHCPのアドレスでも構いません。IPv4アドレスが変更になると連動してIPv6アドレスも変えなければなりませんが。

 eth0がある場合は、次の2つのファイルを設定すると起動時自動的に6to4が有効になります。

 /etc/sysconfig/network-scripts/ifcfg-eth0に4行追加
          :
IPV6INIT=yes
IPV6TO4INIT=yes
IPV6TO4_IPV4ADDR=XXX.XXX.XXX.XXX ← eth0のIPv4アドレスと同一の場合は省略可
IPV6TO4_RELAY=192.26.91.178 ← 日本の6to4リレールータ
 /etc/sysconfig/static-routes-ipv6を作成
sit0	::/1

 実際に通信できるかどうかは前述のtraceroute6で経路を表示させることによって確かめることができます。不幸にして通信できない場合は設定の誤りかファイアウォールが原因でしょう。6to4の通信はtcpでもudpでもないプロトコル41のIPv4によって運ばれます。必要に応じてネットワーク管理者にファイアウォールの設定変更を依頼してください。

2.2 通常のトンネル接続の場合

 通常のトンネル接続の場合は特定の相手に申請してトンネル接続を受け入れてもらいます。IPv6アドレスは接続先から割り当てられます。手続は面倒ですが、ネットワーク的に近い相手とトンネル接続すれば多くの場合通信速度が6to4より有利です。

2.2.1 トンネル接続の相手先

 大学の研究室等、学術系の場合はSINETにトンネル接続することができます。
   
http://www.sinet.ad.jp/sinet/ipv6/top/

 一般の場合は契約しているISPが接続を受け入れているか問い合わせてみましょう。ISPがIPv6を提供していなかったり条件が合わない場合は無料で接続を受け入れる組織もあります。
   http://www.freenet6.net/

2.2.2 トンネル接続の設定例

# /sbin/ifconfig eth0 add 2001:XXX:XXXX::1/64 ← NICにIPv6アドレスを付ける
# /sbin/ifconfig sit0 tunnel ::XXX.XXX.XXX.XXX ← トンネル接続先のIPv4アドレスを指定
# echo 0 > /proc/sys/net/ipv6/conf/all/accept_ra ← 自動設定を禁止
# echo 0 > /proc/sys/net/ipv6/conf/all/accept_redirects ← redirectを禁止
# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding ← パケット転送を許可
# /sbin/route -A inet6 add 2001:XXX:XXXX::/64 dev eth0 ← LANへの経路
# /sbin/route -A inet6 add ::/1 dev sit1 ← デフォルト経路
 トンネルが開通したかどうかはping6で確かめられます。
# /bin/ping6 -I sit1 ff02::1
PING ff02::1(ff02::1) from fe80::XXXX:XXXX%sit1 sit1: 56 data bytes
64 bytes from ::1: icmp_seq=0 hops=64 time=155.000 usec
64 bytes from fe80::XXX:XXXX:XXXX:XXXX%sit1: icmp_seq=0 hops=64 time=9624.000 usec (DUP!)
このように::1以外からも応答があれば正常です。::1しか表示されない場合はトンネルが開通していません。

 トンネルがつながらない場合は設定の誤りやファイアウォールを疑います。ISPは特に申し込まない限りファイアウォールを設けないのが一般的ですが、大学や企業は利用者の意志に関係なくファイアウォールで通信を制限するのが普通です。通常のトンネル接続の通信も6to4と同じくtcpでもudpでもないプロトコル41のIPv4によって運ばれます。ネットワーク管理者に相談しましょう。

 以上の設定を起動時自動的に有効にするには次のようにします。

 /etc/sysconfig/network-scripts/ifcfg-eth0に2行追加(eth0でIPを使っている場合)
          :
IPV6INIT=yes
IPV6ADDR=2001:XXX:XXXX::1/64
 /etc/sysconfig/network-scripts/ifcfg-sit1を作成
DEVICE=sit1
BOOTPROTO=none
ONBOOT=yes
IPV6INIT=yes
IPV6TUNNELIPV4=XXX.XXX.XXX.XXX ← トンネル接続先のIPv4アドレスを指定
IPV6ADDR=2001:XXX:XXXX:ffff::1/128 ← eth0を設定した場合はなくて構わない
 /etc/sysconfig/static-routes-ipv6を作成
sit1	::/1
 ルータとして使用する場合は、/etc/lilo.confで変数に「IPV6FORWARDING=yes」と「IPV6AUTOCONF=no」を追加
image=/boot/vmlinuz-2.4.27-0vl7.3
	label=linux
	read-only
	root=/dev/hda3
	append=" NETWORKING_IPV6=yes IPV6FORWARDING=yes IPV6AUTOCONF=no resume2=swap:/dev/hda4"

2.2.3 経路制御

 staticの場合こちらへの経路は相手方が設定しますので、特にこれ以上の設定は必要ありません。

 RIPngの場合こちらへの経路を相手に通知するデーモンを動かす必要があります。そのために例えば
zebraに含まれるripngdとzebraが使用できます。Vine Linux用のzebraのrpmは作られていません。RedHat用のrpmを流用するという方法も考えられますが、筆者はzebraをコンパイルして使用しています。

 ripngd.confの設定例
router ripng
network sit1
route 2001:XXX:XXXX::/48 ← 割り当てられたアドレスの範囲に応じて変更

2.3 RA (Router Advertisement)

 自動設定を使ってLAN内のクライアントから外部とIPv6で通信したい場合は、自動設定のためにマルチキャストでRA (Router Advertisement)を流します。そのためのデーモンがradvdです。radvdのrpmはVine extrasにあります。
   Vine extras ソース  http://ring.asahi-net.or.jp/pub/linux/Vine/VinePlus/3.1/SRPMS.extras/
   Vine extras バイナリ http://ring.asahi-net.or.jp/pub/linux/Vine/VinePlus/3.1/i386/RPMS.extras/
 /etc/radvd.confの設定例
interface eth0
{
        AdvSendAdvert on;
        prefix 2001:XXX:XXXX::0/64
        {
                AdvOnLink on;
                AdvAutonomous on;
        };
};

3. パケットフィルタ

 パケットフィルタはお馴染みの
netfilterで、設定に使うのはip6tablesです。しかし生のVineにはip6tablesがありません。まずはip6tablesを導入する必要があります。Vine plusにありますので、# apt-get install iptables-ipv6でインストールされます。
   ソース  iptables-1.2.10-0vl2.src.rpm
   バイナリ iptables-ipv6-1.2.10-0vl2.i386.rpm
        iptables-ipv6-1.2.10-0vl2.ppc.rpm
 ip6tablesの使用方法はiptablesとほとんど同じですが、主な違いが2つあります。まず、「-m state」が使えないこと。これはとても不便です。今後に期待。もう1つは、「icmp」の代わりに「ipv6-icmp」または「icmpv6」と書くこと。詳しくはjman ip6tablesをご覧ください。

 設定ができたら
# /sbin/ip6tables-save > /etc/sysconfig/ip6tables
# /sbin/chkconfig --level 2345 ip6tables on
としておくと次回から起動時自動的にパケットフィルタが有効になります。ただし、ip6tablesとipchainsを併用することはできません。もしもIPv4のパケットフィルタ設定にまだipchainsを使用していたらiptablesに移行する必要があります。iptablesについてはLinux 2.4 Packet Filtering HOWTOが参考になります。

4. サーバをIPv6対応にする

4.1 DNS(53/udp, 53/tcp)

 Vineに入っている
BIND9はIPv6対応済ですので、設定を追加すればIPv6で通信できます。

 /etc/named.confの設定例(listen-on-v6の行を1行追加)
options {
        directory "/var/named";
        listen-on-v6 { any; };
                  :

 IPv6アドレスの登録は、従来のゾーンファイルにAAAAレコードを書き加えることによって行います。
www		IN	A	XXX.XXX.XXX.XXX
		IN	AAAA	2001:XXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX

 IPv6の逆引はIPv4の逆引と似ていて、独立したゾーンファイルを新しく作ります。IPv4との違いは、数字1桁毎にピリオドで区切るという点です。当然ですが、ISP等が管理する上位のネームサーバから権限の委譲を受けなければなりません。

 /etc/named.confの設定例
                  :
zone "X.X.X.X.X.X.X.0.1.0.0.2.ip6.arpa" {
        type master;
        file "named.ipv6-rev";
};
                  :

 逆引ゾーンファイルnamed.ipv6-revの設定例
;
;       2001:XXX:XXXX/48 rev hosts file
;
$TTL    86400
@	IN	SOA	ns.v6.vinelinux.org.	postmaster.v6.vinelinux.org. (
		200301241	; Serial	yyyymmddn
		10800		; Refresh	3h
		3600		; Retry		1h
		3600000		; Expire	42d     
		86400		; Minimum	1d
		)
	IN	NS	ns.v6.vinelinux.org.

X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X.X	IN	PTR	www.v6.vinelinux.org.
                  :

4.2 MTA(25/tcp)

 一つの方法は
sendmailを使用することです。sendmailは8.10以降がIPv6に対応しています。しかし古いsendmailにはセキュリティホールがありますので、新たにインストールする場合は最新版を使用します。Vine plusにあるsendmailのrpmを使って簡単にpostfixと入れ替えることができます。
# apt-get update
# rpm -e postfix --nodeps
# apt-get install sendmail sendmail-cf sendmail-doc

 IPv6を使用するためには、コンパイルオプションNETINET6が有効になっていなければなりません。それは次のようにして確かめることができます。
% /usr/sbin/sendmail -bt -d0
Version 8.13.1
 Compiled with: DNSMAP LOG MAP_REGEX MATCHGECOS MILTER MIME7TO8 MIME8TO7
		NAMED_BIND NETINET NETINET6 NETUNIX NEWDB PIPELINING SASLv2
		SCANF STARTTLS TCPWRAPPERS USERDB

============ SYSTEM IDENTITY (after readcf) ============
      (short domain name) $w = v6
  (canonical domain name) $j = v6.vinelinux.org
         (subdomain name) $m = vinelinux.org
              (node name) $k = v6
========================================================

ADDRESS TEST MODE (ruleset 3 NOT automatically invoked)
Enter <ruleset> <address>
> 

 そして、/etc/mail/sendmail.mcのDAEMON_OPTIONSの行を書き換えます。
DAEMON_OPTIONS(`Name=MTA-v6, Family=inet6, Port=smtp')dnl
実際にlistenしているかどうかは/bin/netstat -lnで確かめることができます。25/tcpのアドレスが::なら正常です。


 一方Postfixはつい最近ようやく2.2からIPv6に対応したものの、Vine 3.0/3.1に含まれるPostfixは2.0と古く、IPv6未対応です。これを2.2に入れ替えればIPv6が使えるはずです。

4.3 ssh(22/tcp)

 
OpneSSHはIPv6対応です。/bin/netstat -lnで22/tcpのアドレスが::なら正常です。

4.4 telnet(23/tcp)

 今やtelnetを使用する理由は何もありません。代わりにsshを使用します。telnetではパスワードを含む通信内容が平文のまま流れ、経路上の誰でも簡単に読むことができます。

4.5 ftp(21/tcp他)

 telnetと同じ理由でftpも使いたくありません。代わりにsftpやscpが使えます。

4.6 http(80/tcp)

 
Apache 2.0はIPv6に対応していますが、Vine 3.0/3.1に含まれるApache 1.3は対応していません。Vine plusにあるapache2に入れ替える必要があります。
# apt-get update
# rpm -e apache --nodeps
# apt-get install apache2 apache2-manual
 /bin/netstat -lnで80/tcpのアドレスが::なら正常です。

4.7 ntp(123/udp)

 
ntpはVine 3.0/3.1のmainに含まれていますが、Vineインストール時の選択によっては入らないようです。なければapt-getで追加インストールします。ntpdはIPv6対応です。
 /etc/ntp.confにIPv6対応の公開ntpサーバを書きます。
server          ntp1.v6.mfeed.ad.jp.
server          ntp2.v6.mfeed.ad.jp.
server          ntp3.v6.mfeed.ad.jp.
driftfile       /etc/ntp/drift
 /etc/ntp/step-tickersにもどれか一つを書いておきます。
ntp1.v6.mfeed.ad.jp.

5. クライアントをIPv6対応にする

5.1 DNS

 IPv6対応のネームサーバを使用するには、/etc/resolv.confにネームサーバのIPv6アドレスを設定します。
nameserver ::1

5.2 MUA(電子メール)

 
SylpeedはIPv6対応です。コンパイルの際にIPv6が有効になっているかどうかは「ヘルプ」→「このプログラムについて」の表示の中で「Compiled-in features:」を見ると分かります。「IPv6」があれば有効です。

5.3 ssh

 
OpneSSHはIPv6対応ですが、Vine 3.0/3.1で使用するには「ssh -6」とオプションを付ける必要があります。

5.4 telnet

 ログインにtelnetを使うことはなくなりましたが、smtpを手で喋ったり各種サーバを試すにはtelnetクライアントが今でも便利です。Vineに含まれるtelnetクライアントはIPv6に対応しています。

5.5 ブラウザ

 本来、
mozillaはIPv6に対応しています。実際、Vine 2.5/2.6のmozilla 1.4ではIPv6が使えていました。しかし何故かVine 3.0/3.1のmozilla 1.7ではnetwork.dns.disableIPv6がfalseであるにも関わらずIPv4が優先され、IPv6で通信できません。原因は調査中です。この件で何かご存知の方は知らせてもらえると助かります。

 IPv6で通信しているかどうかはKAME Projectのページで確かめることができます。亀が踊ったらIPv6です。
   http://www.kame.net/

5.6 apt

 aptはIPv6に対応しています。/etc/apt/sources.listを次のように設定すればIPv6でapt-getできます。
rpm     [vine] http://ring.asahi-net.or.jp/pub/linux/Vine/apt 3.1/$(ARCH) main devel plus extras updates
rpm-src [vine] http://ring.asahi-net.or.jp/pub/linux/Vine/apt 3.1/$(ARCH) main devel plus extras updates

5.7 ntp

 
ntpが入っていない場合はapt-getで追加インストールします。ntpdateはIPv6対応です。
# /usr/sbin/ntpdate -6 ntp1.v6.mfeed.ad.jp.
これをcrontabに書いておけば自動で時刻合わせができます。

6. 未解決の問題

 調査中

7. 情報源

7.1 リンク

Vine Linuxhttp://vinelinux.org/
ipv6.orghttp://www.ipv6.org/
Linux IPv6 HOWTO    http://www.tldp.org/HOWTO/Linux+IPv6-HOWTO/
6bonehttp://www.6bone.net/
KAME Projecthttp://www.kame.net/
USAGI Projecthttp://www.linux-ipv6.org/
TAHI Projecthttp://www.tahi.org/
KDDI研究所 6to4http://www.6to4.jp/

7.2 メーリングリスト

vine-users          IPv6の話題がたまに出ます

8. この文書について

 この文書はVine 3.1 Intel版を元にして書かれました。
 この文書はProject Vineの公式文書ではありません。筆者はProject Vineの一員ではありません。
 この文書の最新版は
http://www.v6.e.yamagata-u.ac.jp/linux/vine-ipv6.html にあります。
 この文書は改変しない限りその全部を再配布して構いません。一部分のみを再配布してはいけません。
 この文書は情報提供を目的に書かれています。保証やサポートはありません。
 この文書の誤りや改良の提案は筆者に送ってください。次版に反映させます。筆者のメールアドレスは一番上にあります。

8.1 主な更新履歴

  2003年 1月22日  初版新規公開(Vine 2.5/2.6対応)
  2004年12月 4日第15版  Vine 3.0/3.1対応
  2005年 5月 8日第16版  ntp追加
  2005年 8月23日第17版  6to4リレールータのIPv4アドレス変更