  Linux IPv6 FAQ/HOWTO
  Eric Osborne <osborne@notcom.com>
  v3.2.1, 1997/07/14
  Araki Yasuhiro <yasuhi-a@is.aist-nara.ac.jp>
  v3.2.1j, 1997/07/14

  この文書 (Linux IPv6 FAQ/HOWTO) はすべての Linux ユーザに対して、IPv6
  がつかえること (Linuxはそのうちのひとつです)、開発がどのようにおこなわ
  れているか、そしてあなたの Linux マシンに IPv6 関連のソフトをどのよう
  にインストールするかを説明することが目的です。

  JF より：この文書は 1997年6月以来、更新されていません。現在とは事情が
  異なると思われるので、ご注意ください。

  1.  バージョン

  この文書は Linux IPv6 FAQ/HOWTO, バージョン 3.2.1 - 7/14/1897です。

  以前からの変更点:

  o  古くなったところを削除しました。

  o  いくつかのversion番号をあげました。

  o  いくつかのまちがいをなおしました。

  o  いくつかのミススペルをなおしました....

  Copyright 1997 Eric Osborne.  この文書を非商用目的に、新たな配布制限を
  設けず、かつ全文そのままのかたちで再配布することは、筆者の望むところで
  す。商用出版の際は著者にあらかじめコンタクトしてください。

  2.  この文書について

  2.1.  著者

  Linux IPv6 FAQ/HOWTOの主たる著者は Eric Osborne <osborne@notcom.com>
  ですが、いくつかは、 netdev メーリングリストや、その他の情報源からのも
  のです。いつでもできるかぎり、その所属を明示します。

  2.2.  FAQ/HOWTO のミラーサイト

  この FAQ/HOWTO はいまのところ、全部で 4 の大陸にミラーされています。あ
  なたから近いところを試して利用してください。

  北アメリカ：

  o  <http://www.terra.net/ipv6/> (マスターサイト)

  o  <http://www.psych.neu.edu/ipv6/>

  o  <http://www.wcug.wwu.edu/ipv6/faq/>

  南アメリカ：

  o  <http://www.icmsc.sc.usp.br/~dfnolive/ipv6-faq/>

  ヨーロッパ：

  o  <http://www.ncl.ac.uk/~n4319682/ipv6/>

  o  <http://www.cs.tu-bs.de/~strauss/ipv6/linux-faq/>

  o  <http://www.london.uk.eu.org/ipv6/FAQ/>

  o  <http://www.cs-ipv6.lancs.ac.uk/ipv6/systems/linux/faq/>

  o  <http://www.akdeniz.edu.tr/mirrors/ipv6/faq/>

  オーストラリア：

  o  <http://linux.vv.com.au/ipv6/faq/>

  アジア

  o  <http://fukuda.aist-nara.ac.jp/~yasuhi-a/linux/ipv6/> (日本語です)

  ミラーサイトのセットアップの情報は Eric <osborne@notcom.com> にコンタ
  クトしてください。

  3.  IPv6 とは?

  (Tony Gale さんからほとんどの寄稿をいただきました。感謝します。)

  IPv6 は次世代のインターネットプロトコルで、現在のプロトコル(IPv4)の後
  継者として設計されています。 [RFC-791]

  IPv6 は IPv4 に無い、いくつかの特徴を含んでいます。

  o  拡張されたアドレス

     IPv6ではIPアドレスのサイズが32から128ビットに増大した。これはさらな
     るアドレス階層化、アドレスをつけられるノードの増大、そしてアドレス
     自動設定のサポートのためである。マルチキャストルーティングの拡張性
     は、マルチキャストアドレスに「スコープフィールド」を加えることで改
     良される。また、「エニーキャスト」とよばれる新しいアドレス型がグル
     ープノードにパケットを送るために定義された。

  o  ヘッダー形式の簡略化

     いくつかのIPv4のヘッダー領域はつかわれなかったり、オプションになっ
     ている。これはパケットの生成コストを減少させ、 IPv6のヘッダの帯域コ
     ストを抑制させるためである。

  o  拡張やオプションのサポートの改善。

     IPヘッダのオプションの変更は、より効率的なフォワーディング、オプ
     ションの長さ制限の厳密さの緩和、そして将来提供されるオプションの柔
     軟性が盛りこまれている。

  o  フローラベルの整備。

     あたらしく、特別のトラフィックの「フロー」に属するパケットのラベル
     を可能なように整備された。これは送信者が通常つかわれない品質のサー
     ビスや、「リアルタイム」サービスのためのものである。

  o  認証と機密性の整備。

     認証、完全性、そしてオプションで機密性の拡張が IPv6 での仕様とされ
     た。

  LinuxのIPv6の核となるコードは David Miller <davem@caip.rutgers.edu> と
  Eric Schenk <Eric.Schenk@dna.lth.se> によってメンテナンスされていま
  す。

  詳しくは以下を読んでください。

  3.1.  Web sites

  私が見た中で IPv6 と 6bone に関して始めに読む最も良いサイトは次世代IP
  (IPng).

  あなたは NASA にある IPv6 at the NAS をチェックしたくなることでしょ
  う。

  Kevin Rae がウェブ上で面白い見解 - " ディジタルオーディオと IPv6 - を
  述べています。IPv4とIPv6をならべた比較と、IPv6 の QoS (帯域保証) の紹
  介があります。

  3.2.  RFC とインタネットドラフト

  (私がかぞえたところでは) CATNIPやTUBAなど、IPv6がプローザルになる前の
  ものも含めて、55のRFCがIPv6に関して出ています。いくつかは関連したRFCで
  す。

  o  2147: TCP and UDP over IPv6 Jumbograms

  o  2133: Basic Socket Interface Extensions for IPv6

  o  2073: An IPv6 Provider-Based Unicast Address Format

  o  2101: IPv4 Address Behaviour Today

  o  2081: RIPng Protocol Applicability Statement

  o  2080: RIPng for IPv6

  o  2030: Simple Network Time Protocol (SNTP) Version 4 for IPv4, IPv6
     and OSI

  o  2023: IP Version 6 over PPP

  o  1981: Path MTU Discovery for IP version 6

  o  1972: A Method for the Transmission of IPv6 Packets over Ethernet
     Networks

  o  1971: IPv6 Stateless Address Autoconfiguration

  o  1970: Neighbor Discovery for IP Version 6 (IPv6)

  o  1933: Transition Mechanisms for IPv6 Hosts and Routers

  o  1897: IPv6 Testing Address Allocation

  o  1888: OSI NSAPs and IPv6

  o  1887: An Architecture for IPv6 Unicast Address Allocation

  o  1886: DNS Extensions to support IP version 6

  o  1885: Internet Control Message Protocol (ICMPv6) for the Internet
     Protocol Version 6 (IPv6)

  o  1884: IP Version 6 Addressing Architecture

  o  1883: Internet Protocol, Version 6 (IPv6) Specification

  o  1881: IPv6 Address Allocation Management

  o  1809: Using the Flow Label Field in IPv6

  多くの インターネットドラフトがあります。これらは急速に変化します
  が、7/14/97 の時点で有用なものを以下に挙げます。

  o  Transmission of IPv6 Packets over FDDI Networks

  o  IP Version 6 over PPP

  o  Advanced Sockets API for IPv6

  o  Generic Packet Tunneling in IPv6 Specification

  o  IPv6 Router Alert Option

  o  Transmission of IPv6 Packets over Token Ring Networks

  o  An IPv6 Aggregatable Global Unicast Address Format

  o  IPv6 Multicast Address Assignments

  o  IP Version 6 Management Information Base for the User Datagram
     Protocol

  o  IP Version 6 Management Information Base for the Transmission
     Control Protocol

  o  Management Information Base for IP Version 6:  Textual Conventions
     and General Group

  o  A proposal for an IPv6 site database object

  o  Mobility Support in IPv6

  o  Dynamic Host Configuration Protocol for IPv6 (DHCPv6)

  o  IPv6 Testing Address Allocation

  o  Dynamical routing (unicast and multicast) for the Ipv6 protocol

  o  Routing Aspects Of IPv6 Transition

  o  Router Renumbering for IPv6

  o  IPng Analysis of the GSE Proposal

  o  The Use of End System Designators in IPv6

  o  IP Version 6 Addressing Architecture

  o  OSPF for IPv6

  o  Implications of the GSE Addressing Scheme to IPv6 Multicast

  o  Host Reachability Advertisement for IPv6

  o  Header Compression for IPv6 over PPP

  o  Synthesis of Routing Goop and AAAA Records in IPv6

  o  Realizing the Benefits of Virtual LANs by Using IPv6

  o  Management Information Base for IP Version 6: ICMPv6 Group

  o  Management Information Base for IP Version 6: UDP and TCP Groups

  o  Transient Neighbors for IPv6 over ATM

  o  Transmission of IPv6 over IPv4 Domains without Explicit Tunnels

  o  GSE - An Alternate Addressing Architecture for IPv6

  o  Service Location Modifications for IPv6

  o  Link Local Addressing and Name Resolution in IPv6

  3.3.  本、メーリングリスト、その他

  この本の章はまだ乏しいです。しかしながらスタートするためのいくつかをあ
  げておきます。

     Internetworking with TCP/IP, Volume 1, Third Edition - Douglas
        Comer
        TCP/IP の古典的な本です、第 3 版には IPv6 の紹介の章があります。

     Data and Computer Communications, Fifth Edition - William Stallings
        もうひとつの古典的な、データ通信全体を視野にいれた本です。 IPv6,
        ICMPv6 にためになる何ページかを含んでいます。

     Routing in the Internet - Christian Huitema
        私は持っていませんが(いくつかの理由から手にいれるのがむずかしい
        のです) しかし、著者の評判は知っていますし、見る価値があるでしょ
        う。

  3.4.  6bone について

  6bone はインターネットで IPv6 を IPv4 にカプセル化するプロジェクトで
  す。

  もっと 6bone について詳しく知りたいときは、 6boneのホームページを見て
  ください。

  6bone メーリングリストの内容は IPv6 - 6bone Mailing List で、見ること
  ができます。

  3.5.  IPv6 のアドレスの構造

  IPv6のアドレスは128ビットの長さで、3つの型がある。ユニキャスト、エニー
  キャスト、マルチキャストである。ユニキャストアドレスは個々のインター
  フェースにつけられる。エニーキャストアドレスはインターフェースの集合を
  示すが、エニーキャストアドレスに送られるパケットはその集合のうちの一つ
  のインターフェースに送られる。例えば、一番近いところに送る。マルチキャ
  ストアドレスもまた、インターフェースの集合を示すが、マルチキャストアド
  レスに送られるパケットはその集合の全てのインターフェースに送られる。そ
  の意味で、マルチキャストアドレスはブロードキャストアドレスの子孫である
  といえる。

  IPv6 アドレスの表記

  FEDC:BA98:7654:3210:FEDC:BA98:7654:3210

  アドレスはしばしばいくつかの「0」を含む。たとえば

  FF01:0:0:0:0:0:0:43

  0 がいくつか連続するときはアドレスを縮めることが許されている。「::」
  は、16 ビットの 0 の連続を示す。上の例だと次のようになる。

  FF01::43

  IPv4とIPv6の混在した環境では、他の表記法も用意されている。たとえば

  ::10.5.27.200

  は IPv6-in-IPv4 のパケットをおくる。

  具体的なIPv6のアドレスタイプはそのアドレスの先頭に示される。先頭 bit
  から構成される可変長フィールドは Format Prefix (FP) といわれる。それら
  のプリフィックスの先頭の構造は以下。

               Allocation                      Prefix                 Fraction of
                                               (binary)               Address Space

       Reserved                               0000 0000               1/256
       Unassigned                             0000 0001               1/256
       Reserved for NSAP Allocation           0000 001                1/128
       Reserved for IPX Allocation            0000 010                1/128
       Unassigned                             0000 011                1/128
       Unassigned                             0000 1                  1/32
       Unassigned                             0001                    1/16
       Unassigned                             001                     1/8
       Provider-Based Unicast Address         010                     1/8
       Unassigned                             011                     1/8
       Reserved for Geographic-based          100                     1/8
              Unicast Addresses
       Unassigned                             101                     1/8
       Unassigned                             110                     1/8
       Unassigned                             1110                    1/16
       Unassigned                             1111 0                  1/32
       Unassigned                             1111 10                 1/64
       Unassigned                             1111 110                1/128
       Unassigned                             1111 1110 0             1/512
       Link Local Use Addresses               1111 1110 10            1/1024
       Site Local Use Addresses               1111 1110 11            1/1024
       Multicast Addresses                    1111 1111               1/256

  15% のアドレス空間がはじめ割当てられていて、のこり 85% は将来のために
  残されている。

  [RFC-1897] 6bone 上での IPv6 アドレス割当ての方法の記述。アドレス割当
  てのプランは一時的なもので、将来変更されることになっている。

  4.  Linux に特化した情報

  4.1.  IPv6 の異ったアーキテクチャへの実装

  ほとんどのLinux愛好家が知っているように、Linuxの移植はほとんどのアーキ
  テクチャ - x86, Sparc, PowerPC, and Alpha, などなどに可能だ。理論的に
  はLinuxのIPv6のコードはアーキテクチャに依存しない。 Alphaでは動くこと
  がわかっているし、Sparcでも動くという噂だ。しかしこの文書はほかがどう
  であるかにかかわらず、コードが安定化され、2.2.0が開発されているx86版
  のLinuxを参照している。そして私はIPv6のコードが全てに移植されると確信
  している。

  4.2.  カーネルバージョンに関する情報

  この文書を書いている時点での最新の開発版のカーネルは 2.1.35 ですが、お
  そらくこの文書を読むころにはかわっているとおもいます。 IPv6 のサポート
  は今はカーネルのコンパイル時のオプションです。目標は IPv6 のコードを至
  る 2.2.0 で安定させることです。

  4.3.  メーリングリスト

  役にたついくつかのメーリングリストを挙げます。希望すれば参加できます。

     The netdev list
        このリストはLinuxでIPv6を行うための作業にくわわるか、あるいは単
        に興味がある人のためのものです。ここには開発者たちが参加していま
        す。

        参加するには majordomo@nuclecu.unam.mx に

        アーカイブ

        o  <ftp://nuclecu.unam.mx/lists/netdev/>

        o  <news://NNTP.Q.NET/q.ml.sw.os.linux.netdev/>

        o  <http://www.wcug.wwu.edu/lists/netdev>

     Linux-net
        Linuxでのnetworkingに関するメーリングリストです。参加するには
        linux-net@vger.rutgers.edu .

     Linux-kernel
        Linux-netのようなものですが、Linuxのカーネルに関連する内容です。
        参加するには linux-kernel@vger.rutgers.edu .

  5.  どうしたら私のマシンで IPv6 がうごきますか?

  この章では Linux マシンに IPv6 のソフトウェアをインストールするところ
  をカバーします。これは、経験のある Linux ユーザが対象です。あなた
  は、Makefile や、ヘッダファイル、あるいはソースコードを動作させるため
  に入手しハックすることをおそらく必要とします。しかしながら、IPv6 に特
  化した知識は必要としません。

  以下のそれぞれのパッケージはその最新版の置いてあるサイトにリンクしてい
  ます。その次の章にダウンロードのためのミラーサイトが書かれていますの
  で、ますミラーに行ってください。

  5.1.  必要不可欠なソフトウェア

  これはあなたが Linux マシンで、IPv6 を 6bone 上で動作させるのに入手す
  る必要がある一連のソフトウェアです。

  o  IPv6 のつかえるカーネル。あなたは 2.1.x のカーネル をつかわねばなり
     ません。2.1.44 が最新版です。

  5.1.1.  開発用ライブラリ

  Craig Metz さんからです。

       私は Linux libc 5.4.26 と、ヘッダのおきかえと、inet6-apps の
       libinet6 をつかってIPv6 のアプリを開発している。

       Philip は IPv6 のアプリを GNU libc 2.1 で開発している。これは、
       彼がマージした適切なヘッダや、いくつかの必要な関数が含まれて
       いる。

       思うに、IPv6 のアプリケーションを使いたい人にはどちらの場合で
       あっても合理的な方法だろう。どちらかの場合ではうごかないかも
       しれないが。

  あなたは、libc5 with libinet6 か、 a patched glibc 2.0 か or glibc 2.1
  が必要です。

     libinet6
        libinet6 は後述の inet6-apps パッケージに同根されています。

     Glibc 2.0 patch
        <ftp://ftp.cs-ipv6.lancs.ac.uk/pub/Code/Linux/glibc/>

     Glibc 2.1
        <ftp://alpha.gnu.ai.mit.edu/gnu/libc>

  5.1.2.  上記以外の必須ソフトウェア

     net-tools
        <ftp://ftp.london.uk.eu.org/pub/ipv6/>, <ftp://ftp.cs-
        ipv6.lancs.ac.uk/pub/Code/Linux/Net_Tools/>

        NET-3 系の Linux ディストリビューションのベースとなっているパッ
        ケージであり、ifconfig, hostname, route, arp, rarp, netstat,
        ipfw が含まれます。 現時点での最新版は 1.41 です。

     inet6-apps (ftp.inner.net:/pub/ipv6/inet6-apps-0.24.tar.gz)
        本書の執筆時点で inet6-apps の最新版は 0.24 です。

  注意：このパッケージは web ブラウザで入手することができません。 FTP ク
  ライアントを用いてください。そのため、リンクしていません。

  また、Craig Metz は、独自のソフトウェア熟成計画を彼の FTP サイトに組み
  入れています。彼は次にように述べています。

       新バージョンのソフトウェアはまず ftp.ipv6.inner.net 上でリリースされる。
       この FTP サーバは、IPv6 でしかアクセスできない。そのバージョンのリリース
       から一週間経つと、ftp.inner.net にコピーされる。これは、IPv4 でアクセス
       が可能だ。あるバージョンが一週間以内に更新された場合、そのバージョンは
       IPv4 FTP サーバには登場しない。つまり、IPv6 サーバは、パブリックベータ
       バージョンを掲載する場であり、IPv4 サーバはもうちょっと年期の入った
       バージョンを掲載する場だと考えることができる。

       どっちかの FTP サーバ上のソフトウェアでトラブルが生じた場合、適当にブーブー
       言うだけでもいいし、あるいは、生じた問題を説明して、改善要求を出してくれても
       いい。どっちの方法が問題解決に適しているかは、言うまでもないと思うけど。

  5.2.  役に立つかもしれないソフトウェア

  これらは必要ではありませんが、持っておくと便利です。

     netkit
        いくつかの BSD ユーティリティが IPv6 に移植されました。 (finger,
        ftp, telnet, etc...)  Netkit は、かならずしも必須の IPv6 ソフト
        ウェアではないがすくなくとも、いくつかのパッケージでは強く推薦さ
        れる。

     BIND
        2 つの理由から BIND がインストールされている必要があります。も
        し、あなたが最新版の glibc (2.1.x) をもっていないならば、リゾル
        バのライブラリのため、インストールしなければなりません。 2 つ目
        の理由は IPv6 の DNS の仕様である、AAAA レコードのサポートのため
        です。もし IPv6 のネームサーバを使いたければインストールしなけれ
        ばなりません。

     RADVD
        RADVD は the Router ADVertisement Daemon (ルータ通知デーモン) の
        ことです。これは IPv6 のホストの自動設定のために使われます。くわ
        しい情報は ``ここ''。

     rc.inet6 (ftp.inner.net:/pub/ipv6/)
        あなたのマシンで IPv6 をサポートさせるサンプルのスクリプトです。

     inner-apps (ftp.inner.net:/pub/ipv6/)
        IPv6のサポートのためにスクラッチから書かれた fdsniff, fingerd,
        netd (inetd/tcp_wrappers とおきかえます)です。

     inn-1.5.1+ipv6-1.tar.gz (ftp.inner.net:/pub/ipv6/)
        INNをIPv6対応にするパッチです。

     lmbench
        ネットワークベンチマークプログラムです。あなたが友人にあなたの
        IPv6 の Linux マシンが彼の IPv4 マシンより高速であることを見せて
        くれるでしょう。

     RSVP
        Linux 向け RSVP ポートの始まり。

  5.3.  ソフトウェアのミラー

  これは私の知る限りのIPv6のソフトウェアのミラーのリストです。いまのとこ
  ろ、全てのミラーをまとめるような中心組織はありません。これは、いくつか
  のサイトが最新版をもっていて、その他のサイトはもっていないことがあるこ
  とになります。このFAQは最も更新の頻繁なホームとなるサイトにリンクして
  いなければいけません。おそらく一番良い方法は、はじめにあなたから一番近
  いミラーをチェックして、次にホームサイトに行くことです。

  5.3.1.  アメリカにあるミラー

  o  <ftp://ftp.wcug.wwu.edu/pub/ipv6>

  o  <ftp://vger.rutgers.edu/pub/linux/IPv6/>

  o  <ftp://ftp.thirdwave.net/pub/linux/kernel/IPv6/>

  o  <ftp://ftp.terra.net/pub/ipv6/>

  o  <ftp://ftp.psych.neu.edu/pub/ipv6/>

  5.3.2.  ヨーロッパにあるミラー

  o  <ftp://ftp.cs-ipv6.lancs.ac.uk/pub/Code/Linux/>

  o  <ftp://ftp.gwdg.de/pub/linux/misc/ftp.ul.pt/IPv6/>

  o  <ftp://eclipse.asta.uni-essen.de/pub/linux/kernel/ipv6>

  o  <ftp://ftp.via.ecp.fr/pub/unix/linux/IPv6/>

  o  <ftp://dns.marwin.ch/pub/Linux/IPv6/>

  o  <ftp://ftp.funet.fi/pub/Linux/kernel/ipv6/>

  o  Viking BBS in France: +33 4 76 91 81 25: /pub/Systemes/linux/IPv6/

  5.3.3.  オーストラリアにあるミラー

  o  <ftp://ftp.syd.dit.csiro.au/pub/ipv6/linux/>

  o  <http://linux.vv.com.au/ipv6/>

  5.3.4.  南アメリカにあるミラー

  o  <ftp://ftp.inf.utfsm.cl/pub/Linux/ALPHA/IPv6/>

  5.3.5.  南アフリカのミラー

  o  <ftp://ftp.is.co.za/linux/networking/ipv6/>

  5.4.  その他Linuxに特化した情報

  A quick 6bone howto

  以下は Craig Metz <cmetz@inner.net> から寄せられたものです。

       いくつかの質問に対するわたしのおこなった回答です。

       1. IPv6の動作する最新のカーネルをインストールします。
       2. ftp.ul.ptからもってきたnet-toolsの最新版をインストールします。
       3. ftp.inner.netからもってきたinet6-apps kitの最新版をインストールします。
       4. ftp.cityline.netからもってきたradvdの最新版をインストールします。
       5. あなたのプリフィックスをRFC 1897のアルゴリズムで計算します。
               注意深く読んでください。もし、なぜそうするかわからないときは、
               64bitのプリフィックスを計算してください。
       6. あなたの接続点をみつけてください。
               あなたはどこかトポロジ的に近くて、依存するに十分なとこを望むでしょう。
       7. 彼等にトンネリングのセットアップを依頼してください。あなたは
               5で計算したプリフィックスとIPv6のルータのIPv4のアドレスを
               提供しなければなりません。
       8. ftp.inner.netからrc.inet6のスケルトンを入手して、
       必要なところを埋めてください。
       9. pingをつかって、トンネリングを確認してください
       10. あなたのルーティングを接続点に依頼してください。
       11. ftp.ripe.netにIPv6のルーティングをputしてください。
       12. BIND >4.9.5 をインストールします。
       13. IPv6のフォワードをするDNSドメインの設定をAAAAレコードにします。
       (おそらく ipv6.foo.com というところのは foo.comがIPv4のドメインでしょう)
       14. on-site と off-siteで、テストしてください。
       15. IPv6 のreverse DNS domainを設定します。
       16. on-siteでテストしてください。
       17. 逆引き DNS を要求します。
       18. off-siteでテストしてください。

       これは面倒なように聞こえるかもしれませんが、それほどむずかしいものでは
       ありません。必要なのは、安定したネットワークコネクションと、ちょっとした
       てかがりと、時間だけです。

  6.  IPv6のアプリケーションの情報

  6.1.  どのようにしてIPv6のコードを書いたり移植したりするか

  IPv4/IPv6 用ソフトウェア

  Matt Aarnio の質問：

  もしも可能なら、混在した環境ではソフトをどのようにすればいいのか
  おしえてください。
  これはすなわち、IPv4 だけのシステムでも、新しいファンシーなウィジェット
  ルーチンをすべて備えたIPv6のシステムでもコンパイルできるソフトウェアです。
  少なくとも現在においては、ほとんどすべてのアプリケーションがこの分野に
  入るものと、私は確信しています。
  (それらのシステムにはNRLのライブラリはいれていません)

  Philip Blundell の答え：

       2つの問題があります。ひとつは、どうやってIPv6のつかえる新しい環境と
       古いIPv4だけのシステムの両方でコンパイルできるソフトウェアを作るか。
       次に一度あなたがコンパイルしたコードが、IPv6、IPv4、あるいは混在に
       かかわらずおなじコードが動作させることによって問題が生じることです。

       2つ目を先にいきましょう。
       一番よいのはgetaddrinfo() を名前探索に使うことです。
       これはアドレスファミリーとアドレス構造をかえします。すると、あなたは
       ソケットのソートを作るのにアドレスファミリを socket()に入れることが
       できます。もしAAAAレコードを聞いたら、あなたは AF_INET6 と
       struct sockaddr_in6 を得ます。(AレコードのAF_INETと struct sockaddrの
       かわりに)。getaddrinfo() は getnameinfo() のかわりになるもので、
       glibc 2.1にあります。

       これらの関数によって、アドレスファミリをつかうことを気にせず、
       sockaddr_inやsockaddr_in6を無視できます。
       これであなたのコードはIPv6でも、IPv4でも、混在環境でもうれしいでしょう。
       たとえばinet6-appsのソースがそうですから、見てください。

       ひとつ目の問題はやっかいです。古いバージョンのCは getaddrinfo() が
       ありません。そして libinet6で提供されています。
       あなたはおそらくコンパイル時に #ifdef などをつかった多くのオプションを
       用意して、getaddrinfo()と、以前の名前探索関数をわけねばなりません。

       getaddrinfo()はNRLに特化しているというより、POSIXの関数ですので
       移植可能なコードとしても問題ないでしょう。

  6.2.  IPv6 のアプリケーション

  IPv6に移植する人のためのメーリングリストはありますか?

  あります。bound@zk3.dec.com から、回答をいただきました。参加するには
  ipv6imp-request@munnari.oz.au まで。

  7.  (訳注) RADVD Introduction

  by Lars Fennberg <lf@elemental.net>

  IPv6 は IPv4 よりさらに進んだ自動設定をサポートしている。しかしそのた
  めには、この自動設定はネットワーク上のホストで動作し、ローカルネットワ
  ークのルータはホストの自動設定要求に答える動作が必要にである。

  Linux ではこのプログラムは radvd (Router ADVertisement Daemon ：ルータ
  通知デーモン) とよばれる。このデーモンはルータ要請(RS)を聞き、ルータ通
  知(RA)を答える。なお、求められない要求も送られる。

  これらの RA にはホストのインターフェースの設定に使用される情報を含んで
  いる。この情報は、アドレスプリフックス、デフォルトルータの経路MTU と情
  報が含まれている。

  もちろん、ルータ自身は自動設定できないため、ルータ情報はシステムの管理
  人によって設定されなければならない。これは、インターフェースと経路の手
  動設定と、ルータ通知デーモンの設定によっておこなわれる。

  簡単な設定スクリプトは以下のようになる。

       interface eth0 {
               AdvSendAdvert on;
               prefix 5f15:9100:c2dd:1400:8000::0/80
               {
                       AdvOnLink on;
                       AdvAutonomous on;
               };
       };

  これは、radvd が、eth0 で80の長さのプリフィックス
  5f04:f900:c2dd:1400:8000::0 を流している。プリフィックスは autonomous
  (AdvAutonomous がon) かつ、on-link (AdvOnLink が on)でる。そのほかのオ
  プションはデフォルトの値である。

  Autonomous はそのプリフィックスが自動アドレス設定につかえてることで、
  on-link はそのホストが、全てのこのプリフィックスを使用するマシンが
  RAを受信したマシンから到達可能と仮定できることを示す。

  そのプリフィックスは、この例のようにランダムに選ぶことはできなかった。
  それは RFC 1897 (IPv6 のテストアドレス割当て)にもとづいて決定された。
  その上、プリフィックス長も自由に選べず、ネットワークメディアによって決
  定される。イーサネット用には、プリフィックス長は80であるが、これは
  48bit 長のイーサネットハードウェアアドレスと、128bit のIPv6 アドレスを
  結びつけるものだ。詳細は、RFC 1971 (IPv6 Stateless Address
  Autoconfiguration) および、 RFC 1972 (A Method for the Transmission of
  IPv6 Packets over Ethernet Networks) を参照のこと。

  より詳しい radvd の設定に関する情報は radvd の配布に含まれています。

  ホスト上のインターフェースが UPed とRA を受信したとき、そのホストはプ
  リフィックスと、イーサネットハードウェアアドレスを使って、アドレスの設
  定ができる。次に1例をあげる。

       Announced prefix    5f15:9100:c2dd:1400:8000:0000:0000:0000

       Link-layer token                             0800:0040:1726

       Configured address  5f15:9100:c2dd:1400:8000:0800:0040:1726

  ホストは、デフォルトルータの選択を RA を調べて実行できる。これは、IPv6
  のみのホストは単にインターフェースに UP をおこなうだけで、それ以外は自
  動でおこなわれることを意味する。

  そのため、我々が radvd を設定したときは、インターフェースの設定と、ル
  ータでの経路の設定がまだ必要である。簡便にするため、我々はただ一つのイ
  ンターフェースがあり、ルータがトンネリングを使って「外の世界」へ通信さ
  れることにする。

  下の例は、IPv6 のルータでの設定のシェルスクリプトである。これは、本当
  に私の使っているルータと同じものです。... :)

  見ての通り、アドレスと経路を手で加えて、IPv6 over IPv4 のトンネルを設
  定しています。

  /etc/init.d/functions は、ちょっとした助けになる関数があつまっていて、
  radvd を kill するのに "stop" が必要でしょう。 /usr/ipv6/sbin は、IPv6
  の net-tools と、radvd の新しいバージョンがインストールされています。
  これを PATH の先頭に入れて、IPv6 関連プログラムの以前のバージョンより
  先に見つかるようにしています。

  このスクリプトは、eth0 のような通常のインターフェースでのもので、すで
  に IPv4 などで設定されているとします。

  #! /bin/sh

  . /etc/init.d/functions

  PATH=/usr/ipv6/sbin:/usr/ipv6/bin:/bin:/usr/bin:/sbin:/usr/sbin
  export PATH

  case "$1" in
    start)
          # enable forwarding
          echo 1 >/proc/sys/net/ipv6/ipv6_forwarding

          # get IPv6-over-IPv4 tunnels up (enables automatic tunneling to 0::0/96)
          ifconfig sit0 up

          # configure the local interface
          ifconfig eth0  add 5f15:9100:c2dd:1400:8000:0080:ad1c:22ca/80
          route -A inet6 add 5f15:9100:c2dd:1400:8000::0/80 dev eth0

          # if you're on the 6bone you can setup tunnels like shown below.
          # every ifconfig sit0 tunnel 0::<other-tunnel-endpoint-ip>
          # creates a new sit interface. they're named sequentially (sit1,
          # sit2, sit3 and so on)

          # setup a tunnel to NRL
          ifconfig sit0 tunnel 0::132.250.90.5
          ifconfig sit1 up
          route -A inet6 add 5f00::0/8 gw fe80::132.250.90.5 dev sit1

          # setup a tunnel to G6
          ifconfig sit0 tunnel 0::129.88.26.1
          ifconfig sit2 up
          route -A inet6 add 5f06:b500::/32 gw fe80::129.88.26.1 dev sit2

          # start router advertisement daemon
          radvd
      ;;
    stop)
          killproc radvd
          ifconfig sit0 down
      ;;
    *)
      echo "Usage: /etc/init.d/ipv6 {start|stop}"
      exit 1
  esac

  exit 0

  Last changed: Sat Mar  1 19:17:33 MET 1997
  Copyright (C)1997 Lars Fennberg <lf@elemental.net

