Gentoo IPv6ルータガイド
1.
カーネルのセットアップ
基本的なカーネルの設定
Gentooで利用可能な2.4系カーネルの一部は、IPv6による接続を簡単に行うことができます。加えて、sys-kernel/gentoo-sourcesとsys-kernel/pfeifer-sourcesについては、任意でUSAGIパッチをあてることができます。USAGIパッチは必ずしも必要とされているわけではありませんが、積極的に開発されており、カーネルでは提供していないIPv6の多くの機能を実装しています。USAGIパッチを使用するには、上記ソースをemergeするときに、USEフラグに'usagi'があることを確認しましょう。2.5系の開発カーネルはIPv6をサポートしており、USAGIコードの多くを組み込んでいます。
コード表示 1.1: カーネルをemergeする |
# USE="usagi" emerge gentoo-sources
# USE="usagi" emerge pfeifer-sources
|
カーネルソースが置いてあるディレクトリに移り、実際にカーネルの設定を始めましょう。
コード表示 1.2: Linuxカーネルの設定 |
# cd /usr/src/linux
# make menuconfig
|
注意:
/usr/src/linuxはあなたが使用予定のソースへのシンボリックリンクという前提です。
|
注意:
カーネル設定でPrompt for development and/or incomplete code/driversを有効にしているか確認してください。
|
コード表示 1.3: 'make menuconfig'オプション |
Networking options --->
<*> IP: tunneling
...
<*> The IPv6 protocol (EXPERIMENTAL) --->
Network device support --->
<*> Universal TUN/TAP device driver support
|
IPv6動作状況の確認
上記に示したオプションを有効にしたあと、カーネルをコンパイルし、IPv6を有効にしたカーネルでリブートします。IPv6が正常に動作していれば、ループバックデバイスにIPv6アドレスが表示されるはずです。
コード表示 1.4: ループバックデバイスのチェック |
# ifconfig lo
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:6 errors:0 dropped:0 overruns:0 frame:0
TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:456 (456.0 b) TX bytes:456 (456.0 b)
|
先に進む前に、自分のUSE変数リストに"ipv6"があるか確認しましょう。その後のパッケージのemergeでIPv6サポートが含まれるようになります。
2.
トンネルの設定
基本設定
ほとんどのISPは、まだIPv6のネイティブ接続を提供していません。この制約を回避できる、無料のIPv6トンネル接続を世界中で提供している「IPv6トンネル接続サービス事業者」がいくつかあります。IPv4接続を通してIPv6通信をトンネルさせることが可能です。
以下は、2つのメジャーな北アメリカのIPv6トンネル接続サービス事業者、Hurricane ElectricとFreenet6でトンネル接続をセットアップする例です。
Hurricane Electric
Hurricane Electric(略してHE)は無料のIPv6トンネルを提供し、/64のIPv6アドレスブロックを割り当てます。DNSの逆引き設定も許可しています。HEのトンネル申込みの手間は、http://www.tunnelbroker.netに行く手間と変わりません。申込み用のページに記入するだけです。
注意:
登録には、あなたの住所、電話番号といった情報を記入する欄があります。 |
警告:
HEのトンネルは利用可能になるまで24時間かかります。これはサービスの悪用を避けるためです。 |
トンネルの利用が承認された後、/64のブロックが割り当てられ、Gentooマシンに設定できるようになります。HEはifconfigやiprouteユーティリティでの設定例を提供しています。以下の2つの例は、以下の設定が割り当てられているという前提です:
| あなたのIPv4アドレス |
68.36.91.195 |
| HE側IPv4アドレス |
64.71.128.82 |
| あなたのIPv6アドレス |
2001:470:1F00:FFFF::189 |
| 割り当てられたIPv6ブロック |
2001:470:1F00:296::/64 |
net-toolsとifconfigを使う場合、以下のように設定します:
コード表示 2.1: ifconfigでの設定 |
# ifconfig sit0 up
# ifconfig sit0 inet6 tunnel ::64.71.128.82
# ifconfig sit1 up
# ifconfig sit1 inet6 add 2001:470:1F00:FFFF::189/127
# route -A inet6 add ::/0 dev sit1
|
iprouteパッケージとipコマンドを使う場合、以下のように設定します:
コード表示 2.2: ipでの設定 |
# ip tunnel add sixbone mode sit remote 64.71.128.82 local 68.36.91.195 ttl 255
# ip link set sixbone up
# ip addr add 2001:470:1F00:FFFF::189/127 dev sixbone
# ip route add ::/0 dev sixbone
|
Freenet6
Freenet6も無料のIPv6トンネル接続サービス事業者です。登録に必要なのはユーザ名と有効なメールアドレスのみです。ユーザ名、メールアドレスは、クライアント/サーバのセットアップ時にトンネルマネジメントを参照するときに、また、tspcクライアントを生成する際に使われます。クライアントはPortageで利用可能です。インストールするには、以下を実行します:
コード表示 2.3 |
# emerge freenet6
|
/etc/freenet6/tspc.confを編集して、freenet6を設定する必要があります。ファイルのuseridとpasswdのみを編集します。useridとpasswdはFreenet6から割り当てられたものを使用してください。以下は設定例です。
コード表示 2.4: tspc.confの例 |
tsp_version=1.0.1
tsp_dir=/etc/freenet6
auth_method=any
client_v4=auto
userid=anonymous
passwd=foobar
template=gentoo
server=tsps1.freenet6.net
retry_delay=0
if_tunnel=sit3
|
接続の確認
トンネルの設定が終わったところで、接続確認をしましょう。接続を確認する一番簡単な方法は、ping6ユーティリティを使ってIPv6のホストにpingしてみることです。
コード表示 2.5: 接続の確認 |
# emerge iputils
# ping6 www.kame.net
PING www.kame.net(orange.kame.net) 56 data bytes
64 bytes from orange.kame.net: icmp_seq=1 ttl=52 time=290 ms
64 bytes from orange.kame.net: icmp_seq=2 ttl=52 time=277 ms
64 bytes from orange.kame.net: icmp_seq=3 ttl=52 time=280 ms
64 bytes from orange.kame.net: icmp_seq=4 ttl=52 time=279 ms
64 bytes from orange.kame.net: icmp_seq=5 ttl=52 time=277 ms
--- www.kame.net ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4038ms
rtt min/avg/max/mdev = 277.040/281.041/290.046/4.699 ms
|
networkのinitスクリプトへ、より優れたIPv6サポートを追加するため、現在活動を進めています。状況を知りたい、もしくは手伝いたいという方は、latexer@gentoo.orgにメールしてください。
3.
アプリケーションでのIPv6サポート
パッケージの再emerge
あらかじめ/etc/make.confでUSE="ipv6"を設定していないのでしたら、IPv6対応にするためには、おそらくパッケージ群をemergeしなおす必要があるでしょう。インストールしたパッケージで、'ipv6' USEフラグを利用するものすべてをリストするには、下記のコマンドを実行します。
コード表示 3.1: IPv6対応パッケージ |
# emerge -epv world | grep ipv6 | sed "s:^.*\\] ::; s:-[0-9]\\+.*::" | cut -d' ' -f1
|
いくつか選んだパッケージを簡単に再emergeできるように、下記のようにしてIPv6対応パッケージをpackagesファイルに書き込みます:
コード表示 3.2: IPv6対応パッケージ |
# emerge -epv world | grep ipv6 | sed "s:^.*\\] ::; s:-[0-9]\\+.*::" | \\
> cut -d' ' -f1 > packages
|
次に、現時点では再コンパイルしたくないパッケージをpackagesファイルを開いて編集します。その後は下記を実行するだけです。
コード表示 3.3 |
# emerge `cat packages`
|
IPv6仕様パッケージ
IPv6を扱うパッケージがいくつかあります。ほとんどは/usr/portage/net-miscに置かれています。
| Package |
Description |
| net-misc/ipv6calc |
IPv6アドレスを圧縮形式に変換します |
| net-misc/nc6 |
IPv6とIPv4をサポートするnetcatです |
| dev-perl/Socket6 |
Cの socket.h にある定義と構造体操作子(structure manipulators)のIPv6に関係のある部分です |
4.
DNSのセットアップ
IPv6とDNS
IPv4用のDNSがAレコードを使用するに対し、IPv6用のDNSはAAAAレコードを使用します。(これは、IPv4のアドレススペースが2の32乗であるのに対し、IPv6のアドレススペースは2の128乗であるという理由からです)。DNSの逆引き用としては、INT標準が最も多くサポートされています。ARPAは最近のフォーマットなので、INTのようにそれほど広く使われていません。ここではINTフォーマットで書かれています。
BINDの設定
BINDの最近のバージョンはIPv6対応になっています。このセクションは、BINDの利用、および設定について最低限の知識があることを前提としています。また、chrootでbindを実行していないと仮定しています。もしあなたがchrootで実行しているのであれば、以下のセクションで、ほとんどのパスの前に単にchrootするパスを付け加えるだけです。
最初に、/etc/bind/named.confの正引き、逆引きの両方のDNSゾーンファイルにエントリを追加する必要があります。
コード表示 4.1: named.confのエントリ |
zone "ipv6-rules.com" IN {
type master;
file "pri/ipv6-rules.com";
};
zone "6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.int" {
type master;
file "pri/rev-ipv6-rules.com.int";
};
|
その後ゾーンファイルを作り、全てのホストのエントリを追加しましょう:
コード表示 4.2: pri/ipv6-rules.com |
$TTL 2h
@ IN SOA ipv6-rules.com. webmaster.ipv6-rules.com. (
2003052501 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
NS ns1.ipv6-rules.com
IN AAAA 2001:470:1f00:296::1 ; address for ipv6-rules.com
host1 IN AAAA 2001:470:1f00:296::2 ; address for host1.ipv6-rules.com
host2 IN AAAA 2001:470:1f00:296::3:3 ; address for host2.ipv6-rules.com
|
コード表示 4.3: pri/rev-ipv6-rules.com.int |
$TTL 3d ; Default TTL (bind 8 needs this, bind 9 ignores it)
@ IN SOA ipv6-rules.com. webmaster.ipv6-rules.com. (
2003052501 ; Serial number (YYYYMMdd)
24h ; Refresh time
30m ; Retry time
2d ; Expire time
3d ) ; Default TTL
IN NS ns1.ipv6-rules.com.
; IPv6 PTR entries
$ORIGIN 6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.int.
1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR ipv6-rules.com.
2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0 IN PTR host1.ipv6-rules.com.
3.0.0.0.3.0.0.0.0.0.0.0.0.0.0.0 IN PTR host2.ipv6-rules.com.
|
djbdnsの設定
現在、IPv6のネームサービスが利用でき、http://www.fefe.de/dns/から入手可能なdjbdnsのパッチが、サードパーティからいくつか出ています。USEフラグに"ipv6"を加えておくことで、djbdnsをemergeするときにこれらのパッチもあわせてインストールされます。
警告:
これらのパッチをあてたからといって全てのレコードタイプがサポートされるわけではありません。具体的には、NSとMXレコードはサポートされていません。
|
コード表示 4.4 |
# USE="ipv6" emerge djbdns
|
djbdnsをインストール後、tinydns-setupを実行します。どのIPアドレスをバインドするのか、tinydnsをどこにインストールするのかなど、いくつかの質問に答えていくことによってセットアップが完了します。
コード表示 4.5: セットアップ |
# tinydns-setup
|
tinydnsを/var/tinydnsにインストールしたという前提で話を進めます。では/var/tinydns/root/dataを編集しましょう。このファイルには、tinydnsにIPv6のDNSを処理させる必要がある全てのデータが含まれています。
コード表示 4.6: dataファイルの例 |
.ipv6-rules.com:192.168.0.1:a:259200
.6.9.2.0.0.0.f.1.0.7.4.0.1.0.0.2.ip6.int:192.168.0.1:a
6host1.ipv6-rules.com:200104701f0002960000000000000001:86400
6host2.ipv6-rules.com:200104701f0002960000000000000002:86400
3www.ipv6-rules.com:200104701f0002960000000000000002:86400
|
行頭に6がついている行は、AAAAレコードおよびPTRレコードの両方を生成します。行頭に3がついている行は、AAAAレコードだけを生成します。マニュアルでdataファイルを編集するほかに、新たなエントリを追加する方法としてadd-host6やadd-alias6スクリプトを使うことができます。dataファイルの変更を終えた後、/var/tinydns/rootディレクトリでmakeする必要があります。この作業で/var/tinydns/root/data.cfbが生成され、DNSリクエストに応えるための情報源として、tinydnsが使用します。
5.
IPv6ルータ
ルーティングの設定
ほかのクライアントにもIPv6で外の世界(Internet)と通信させるためにLinuxをルータとして使いたいと思っているなら、さらなる設定が要求されます。IPv6のパケットをフォワーディング可能にする必要があります。方法は2通りあり、どちらの方法でも実現可能です。
コード表示 5.1: フォワーディングを有効にする |
# echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
または
# sysctl -w net.ipv6.conf.all.forwarding=1
|
警告:
radvdのinitスクリプトはフォワーディングをONにするので、次のステップが必要なくなります。
|
ブート時にフォワーディングをONにするには、/etc/sysctl.confを編集し、以下の行を追加します。
コード表示 5.2: sysctl.confへの追加 |
net.ipv6.conf.default.forwarding=1
|
トラフィックは今後、IPv6トンネル接続サービス事業者と自分のマシンを結ぶトンネルを通るようにフォワーディングされるはずです。
クライアントにIPv6アドレスを割り当てるには、IPv6の仕様により、ステートレスIP割り当てとステートフルIP割り当ての2つがあります。ステートレス割り当てはルータ広告というプロセスを使用し、インタフェースがUPしたときに、クライアントがIPv6アドレスとデフォルトゲートウェイを取得できるようにします。IP割り当ての記録をせずにホストに割り当てを行うので、「ステートレス」と言われています。ステートフル割り当てはDHCPv6によって割り当てが行われます。どのクライアントがIPを要求して受け取ったのかといったクライアントの状態をサーバが保持しておくので、「ステートフル」と言われます。
ステートレスの設定
ステートレスの設定は、ルータ広告デーモン、またはradvdを使うことで簡単にできます。
コード表示 5.3: radvdのインストール |
# emerge radvd
|
radvdのemergeが完了した後、/etc/radvd/radvd.confを作成する必要があります。この設定ファイルには、どのIPアドレスブロックを割り当てるかといった情報を記述します。ここで、IPv6トンネル接続サービス事業者から割り当てられたIPv6アドレスを使った、radvd.confファイルの例を紹介しましょう。
コード表示 5.4: radvd.confの例 |
interface eth0
{
AdvSendAdvert on;
AdvLinkMTU 1280;
MaxRtrAdvInterval 300;
prefix 2001:470:1F00:296::/64
{
AdvOnLink on;
AdvAutonomous on;
};
};
|
さらに細かい情報については、man radvd.confを見てください。それではradvdを起動し、ブート時にも起動するように設定します。
コード表示 5.5: radvdの起動 |
# /etc/init.d/radvd start
# rc-update add radvd default
|
ステートフルの設定
ステートフルを使いたいのであれば、dhcpv6をインストールし、設定する必要があります。
コード表示 5.6: dhcpv6のインストール |
# emerge dhcpv6
|
次に、/etc/dhcp6s.confを編集し、DHCPv6サーバの設定を行います。
コード表示 5.7: dhcp6s.confの例 |
prefer-life-time 10000;
valid-life-time 20000;
renew-time 5000;
rebind-time 8000;
interface eth1 {
link AAA {
allow unicast;
send unicast;
allow rapid-commit;
send server-preference 5;
renew-time 1000;
rebind-time 2400;
prefer-life-time 2000;
valid-life-time 3000;
pool{
range 2001:470:1f00:296::10 to 2001:470:1f00:296::110/64;
prefix 2001:470:1f00:296::/64;
};
};
};
|
それではdhcp6sを起動し、ブート時にも起動するように設定しましょう。
コード表示 5.8: dhcp6sの起動 |
# /etc/init.d/dhcp6s start
# rc-update add dhcp6s default
|
6.
IPv6クライアント
radvdの使用
ルータの配下にあるクライアントが、自由にIPv6で通信できるようにします。radvdを使うのであれば、インタフェースがUPしたときに、hostsも設定されるようにすべきでしょう。(たいていの場合、net.ethXのinitスクリプトですでに行われています)。
コード表示 6.1: IPv6による接続 |
# ifconfig eth0 up
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:09:6B:06:B7:B4
inet6 addr: fe80::209:6bff:fe06:b7b4/64 Scope:Link
inet6 addr: 2001:470:1f00:296:209:6bff:fe06:b7b4 Scope:Global
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:4 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 b) TX bytes:828 (828.0 b)
Interrupt:11 Base address:0x8400 Memory:d0204000-d0204038
|
DHCPv6の使用
ルータでDHCPv6を使用するようにセットアップするなら、クライアントもdhcpv6パッケージをインストールする必要があります。このインストール作業の後、/etc/dhcp6c.confを編集してクライアントを設定する必要があります。
コード表示 6.2: dhcp6c.confの例 |
interface eth0 {
send rapid-commit;
request prefix-delegation;
request domain-name-servers;
request temp-address;
iaid 11111;
renew-time 11000;
rebind-time 21000;
};
|
7.
6to4変換の使用
基本方針
IPv6のみの接続でIPv4のホストと通信するホストがあるという場合、6to4変換を使用します。全体的に内部ネットワークがIPv6であっても、外部のIPv4/IPv6環境にアクセスすることができます。
DNSの設定
6to4変換を可能にするには、Aレコードしかないサイトに対して、AAAAレコードを返信してくるようにDNSプロキシ(totd)を設定するする必要があります。このAAAAレコードは実際には存在していないIPv6アドレス(以下、フェイクアドレス)を指していますが、6to4プロキシを通してルーティングされます。totdはテスト待ちのため、まだ~x86のマスクがされています。
コード表示 7.1: totdのインストール |
# ACCEPT_KEYWORDS="~x86" emerge totd
|
次に、基本的な設定情報を/etc/totd.confに記述する必要があります。
コード表示 7.2: /etc/totd.confの例 |
forwarder 192.168.0.2 port 53
prefix 3ffe:abcd:1234:9876::
port 5005
pidfile /var/run/totd.pid
stf
|
注意:
ネームサーバが同一マシン上で動いている場合は、totdが使用するポート番号を53以外に設定してください。
|
6to4プロキシ
ptrtdは6to4プロキシとして使われます。6to4プロキシを使用することで、IPv6ホストはIPv4ホストとの通信が可能になります。
コード表示 7.3: ptrtdのインストール |
# ACCEPT_KEYWORDS="~x86" emerge ptrtd
|
ptrtdの設定では、プロキシのコネクションを作れるように、フェイクアドレス(totdで設定したもの)を教える必要があります。/etc/conf.d/ptrtdを編集し、IPV6_PREFIXを設定します。これはtotdで設定したIPv6アドレスと同一のものを設定しなければなりません。
コード表示 7.4: /etc/ptrtd.confの例 |
IPV6_PREFIX="3ffe:abcd:1234:9876::"
|
それではtotdを起動し、ブート時にも起動できるようにしましょう。
コード表示 7.5: totdのスタート |
# /etc/init.d/totd start
# rc-update add totd default
|
クライアントの設定と確認
クライアントが、IPv6のみの接続でIPv4、IPv6両方のホストと通信できるように設定します。クライアントがすでにradvdからIPv6アドレスを受け取っている前提であれば、単に、新しいDNSのリゾルバのエントリや「フェイクアドレス」へのデフォルトルートを追加すれば大丈夫です。」最初に/etc/resolv.confの一番上の行に、totdが起動しているマシンをネームサーバとするエントリを追加します。
コード表示 7.6: /etc/resolv.confの例 |
nameserver 2001:470:1f00:296::1
|
名前解決ができるかをテストするには、IPv4のみのサイトにAAAAレコードをリクエストします。
コード表示 7.7: DNSのテスト |
# host -t aaaa google.com
google.com has AAAA address 3ffe:abcd:1234:9876::d8ef:3364
google.com has AAAA address 3ffe:abcd:1234:9876::d8ef:3564
|
それではフェイクアドレスへのデフォルトルートを追加しましょう。
コード表示 7.8: routeユーティリティの使用 |
# route -A inet6 add 3ffe:abcd:1234:9876::/64 gw 2001:470:1f00:296::1
|
コード表示 7.9: iprouteの使用 |
# ip route add 3ffe:abcd:1234:9876::/64 via 2001:470:1f00:296::1 dev eth0
|
最後に、ping6を使ってgoogle.comにpingします。
コード表示 7.10: 6to4のテスト |
# ping6 -c 2 google.com
PING 3ffe:abcd:1234:9876::d8ef:3364(3ffe:abcd:1234:9876::d8ef:3364) 56 data bytes
64 bytes from 3ffe:abcd:1234:9876::d8ef:3364: icmp_seq=1 ttl=255 time=0.106 ms
64 bytes from 3ffe:abcd:1234:9876::d8ef:3364: icmp_seq=2 ttl=255 time=0.090 ms
--- 3ffe:abcd:1234:9876::d8ef:3364 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.090/0.098/0.106/0.008 ms
|
注意:
実際にはptrtdが動いているルータがリプライを返しているのですが、少なくとも正常に動いているのがわかります。
|
8.
参考情報
ネット上にはIPv6に関連したすばらしい情報源が数多くあります。
IRCを使っているなら、Freenodeで#gentoo-ipv6や#ipv6を試してみてはいかがでしょう。IPv6対応クライアントを使えば、irc.ipv6.freenode.netにアクセスすることでFreenodeサーバに接続できますよ。
このドキュメントの内容は、他のものが明示されない限りは、
CC-BY-SA-2.5ライセンスです。
Gentoo Name and Logo Usage Guidelines (日本語訳)が適用されます。
|