query - IPv6の使い方



ルータの設定 - NetBSD 1.6Rの場合

まずはルータにする
/etc/rc.confに以下の一行を追加
ip6mode=router
これで、IPv6のパケットを転送できるようになります。
この行を加えると実際には/etc/rc.d/networkの中で、
sysctl -qw net.inet6.ip6.forwarding=1
を実行するようになります。
インタフェースの設定
ifconfigでアドレス設定してください。
このホストのEtherインタフェースはep0なので、/etc/ifconfig.ep0に設定内容を書いておくと、起動時に/etc/rc.d/networkで自動的に反映されます。
我が家の/etc/ifconfig.ep0(抜粋)
inet6 2001:240:ff:1::10 prefixlen 64
inet6 2001:240:ff:1:: prefixlen 64 anycast alias
inet6 3ffe:8020:10fd:1::10 prefixlen 64 alias
inet6 3ffe:8020:10fd:1:: prefixlen 64 anycast alias
トンネルの設定
ふつーIPv6って生で通すよねって人は、読み飛ばしてください。
トンネルにはgifというトンネルインタフェースを利用します。manを見ればわかりますが、Generic tunnel interfaceというものでIPv[46] over IPv[46]というトンネル設定ができます。我々はまだIPv4の海に浮かぶIPv6小島なので、IPv6 over IPv4の設定で利用します。
NetBSDも1.6リリースからgifインタフェースを使う前にcreateするようになりました。 gif0にトンネルの設定をするには、createで作成してから
# ifconfig gif0 create
# ifconfig gif0 tunnel <送信元IPv4アドレス> <送信先IPv4アドレス>
# ifconfig gif0 up
とします。gifconfigではないので注意。送信元IPv4アドレスは、一般に自ホストのIPv4アドレスになります。Etherインタフェースと同じように、/etc/ifconfig.gif0に設定内容を書いておくと起動時に自動的に反映されるようになります。
/etc/ifconfig.gif0の書き方。
create
tunnel <送信元IPv4アドレス> <送信先IPv4アドレス>
up
トンネル設定の確認
せっかくIPv6には機能豊富なICMPが実装されてるので、これを利用してトンネル設定を確認しましょう。RFC2375ではFF02:0:0:0:0:0:0:1 All Nodes Addressというアドレスが提唱されています。トンネル上にこのアドレス宛てのパケットを投げれば、自分とトンネル先のホストが反応してくれる事が期待できます。
$ ping6 -I gif0 ff02::1
PING6(56=40+8+8 bytes) fe80::220:afff:fe70:1af6%gif0 --> ff02::1
16 bytes from fe80::220:afff:fe70:1af6%lo0, icmp_seq=0 hlim=64 time=2.422 ms
16 bytes from fe80::250:8bff:fe0c:9ea5%gif0, icmp_seq=0 hlim=64 time=43.888 ms(DUP!)
このホストだとこんな出力が得られます。2個所から応答があるので、(DUP!)が付いた応答があるのが正解です。
ルータアドバタイズの設定
ルータは自分がルータであることを主張する事ができます。
すると、エンドホストはルータから広告される情報を聞いて自動設定を行うことができるのです。設定は簡単。rc.confで、
rtadvd=yes
rtadvd_flags="ep0"
flagsのところには、自分のEtherインタフェースを書いておくと概ね思った挙動をしてくれます。詳しくはmanを参照のこと。設定ファイルは標準で/etc/rtadvd.confです。特に弄らなくても支障はありません。

ルータの設定 - FreeBSD4.8Rの場合

まずはルータにする
/etc/rc.confに以下の二行を追加
ipv6_enable="YES"
ipv6_gateway_enable="YES"
まずは一行目でboot時にIPv6関連の設定を行うことを宣言します。
二行目がIPv6ルータになる宣言で、実際には/etc/rc.network6のなかで
sysctl net.inet6.ip6.forwarding=1
sysctl net.inet6.ip6.accept_rtadv=0
等を実行するようになります。
インタフェースの設定
ifconfigでアドレス設定してください。
FreeBSDでは、/etc/rc.confに設定内容を書いておくと、起動時に自動的に反映されます。
ルータにするなら、prefixもきちんと設定しておくと良いでしょう。
ep0にアドレスを割当てるとすると、/etc/rc.confはこんな感じになります。
ipv6_prefix_fxp0="2001:0240:00ff:0001"
ipv6_ifconfig_fxp0="2001:240:ff:1::10 prefixlen 64"
トンネルの設定
ふつーIPv6って生で通すよねって人は、読み飛ばしてください。
FreeBSDでもNetBSDと同じく素のkernelでgifが組み込まれているんですが、ifconfig -aしても存在しないように見えます。
4.4RELEASEのRELEASE NOTEには書いてありますが、gif(4)に変更が加えられてifconfigのcreateオプションを利用してインタフェースを作る必要があります。 gif0というインタフェースを作ってトンネルの設定をするには、
# ifconfig gif0 create tunnel <送信元IPv4アドレス> <送信先IPv4アドレス>
とします。gifconfigでも設定できますが、pseudo deviceの作成だけはifconfigでないとできません。その場合はこんな感じ。
# ifconfig gif0 create
# gifconfig inet <送信元IPv4アドレス> <送信先IPv4アドレス>
なお、作成したgifインタフェースを削除するときはifconfigのdestroyオプションを利用します。
# ifconfig gif0 destroy
トンネルの設定は起動時に自動的にやりたいので、rc.confに書いておきます。
gifの設定はrc.networkで行われます。なお、cloned_interfacesは設定しておかなくても、gif_interfacesが設定されていればinterfaceのcreateは行われるようです。
/etc/rc.confの書き方
cloned_interfaces="gif0"
gif_interfaces="gif0"
gifconfig_gif0="<送信元IPv4アドレス> <送信先IPv4アドレス>"
トンネル設定の確認
(注:ここは、NetBSDのと一緒。)
せっかくIPv6には機能豊富なICMPが実装されてるので、これを利用してトンネル設定を確認しましょう。RFC2375ではFF02:0:0:0:0:0:0:1 All Nodes Addressというアドレスが提唱されています。トンネル上にこのアドレス宛てのパケットを投げれば、自分とトンネル先のホストが反応してくれる事が期待できます。
$ ping6 -I gif0 ff02::1
PING6(56=40+8+8 bytes) fe80::220:afff:fe70:1af6%gif0 --> ff02::1
16 bytes from fe80::220:afff:fe70:1af6%lo0, icmp_seq=0 hlim=64 time=2.422 ms
16 bytes from fe80::250:8bff:fe0c:9ea5%gif0, icmp_seq=0 hlim=64 time=43.888 ms(DUP!)
2個所から応答があるので、(DUP!)が付いた応答があるのが正解です。
ルータアドバタイズの設定
ルータは自分がルータであることを主張する事ができます。
すると、エンドホストはルータから広告される情報を聞いて自動設定を行うことができるのです。設定は簡単。rc.confでの記述例。
rtadvd_enable="YES"
rtadvd_interfaces="ep0"
flagsのところには、自分のEtherインタフェースを書いておくと概ね思った挙動をしてくれます。詳しくはmanを参照のこと。設定ファイルはNetBSDと同じく、/etc/rtadvd.confです。特に弄らなくても支障はありません。

ルータの設定 - OpenBSD3.3の場合

まずはルータにする
/etc/sysctl.confで以下のように行をコメントアウト
net.inet6.ip6.forwarding=1      # 1=Permit forwarding (routing) of packets
これで、IPv6ルータになることを宣言します。
実際には/etc/rcのなかで呼ばれて、
sysctl -w net.inet6.ip6.forwarding=1
を実行します。/etc/rcの中で、この値を参照してrtadvd等を起動するかどうか判断してるので、忘れずに設定しておきましょう。
インタフェースの設定
ifconfigでアドレス設定してください。
OpenBSDでは、/etc/hostname.<インタフェース名>に設定内容を書いておくと、起動時に自動的に反映されます。
fxp0にアドレスを割当てるとすると、/etc/hostname.fxp0はこんな感じになります。
up
inet6 2001:240:ff:1::10 prefixlen 64 
inet6 2001:240:ff:1:: prefixlen 64 anycast alias 
inet6 3ffe:8020:10fd:1::10 prefixlen 64 alias 
inet6 3ffe:8020:10fd:1:: prefixlen 64 anycast alias 
ルータアドバタイズの設定
ルータは自分がルータであることを主張する事ができます。
すると、エンドホストはルータから広告される情報を聞いて自動設定を行うことができるのです。設定は簡単。/etc/rc.confでの記述例。
rtadvd_flags="fxp0"
/etc/sysctl.confでipv6 forwardingが1になっていれば、これで起動時にrtadvdが立ち上がってfxp0にルータアドバタイズを流してくれます。実際には、flagsとしてNO以外が書いてあれば良くて、何も指定しない("")でもrtadvdが起動します。rtadvd自体についてはmanを参照のこと。設定ファイルはNetBSDと同じく、/etc/rtadvd.confです。特に弄らなくても支障はありません。

ルータの設定 - route6dの使い方

route6dの設定
route6dはripngに対応しています。全てのオプションをコマンドラインで指定して起動します。特に設定ファイルはありません。詳しくはmanに譲るとして、主なオプションを紹介。
-A prefix/preflen,if1[,if2...]
集約経路を生成して、指定のインタフェースに広告します。集約経路に含まれる細かい経路は自動的にフィルタされて集約された経路のみが広告されます。
また、集約経路は静的にRTF_REJECT flag付きでkernelのルーティングテーブルに反映されます。これは、存在しないネットワーク宛てのパケットが来たときに、このルータがunreachのメッセージを返すことを意味しています。
-O prefix/preflen,if1[,if2...]
指定のインタフェースに指定の経路しか流さないようにします。変な経路を突っ込まれたときに、他へ伝搬させないために必須。
使用例はこんな感じ
route6d -A3ffe:8020:10fd::/48,gif0 -O3ffe:8020:10fd::/48,gif0 \
        -A2001:240:ff::/48,gif0 -O2001:240:ff::/48,gif0
NetBSD 1.6Rで起動時に自動的にこれを実行するには、/etc/rc.confに書けばOK。
我が家の/etc/rc.confに記述するとすると、こんな感じ
route6d=yes
route6d_flags="-A3ffe:8020:10fd::/48,gif0 -O3ffe:8020:10fd::/48,gif0 \
               -A2001:240:ff::/48,gif0 -O2001:240:ff::/48,gif0"
OpenBSD 3.3で起動時に自動的にこれを実行する時も、/etc/rc.confに書けばOK。
例えばこんな感じ
route6d_flags="-A3ffe:8020:10fd::/48,gif0 -O3ffe:8020:10fd::/48,gif0 \
               -A2001:240:ff::/48,gif0 -O2001:240:ff::/48,gif0"
OpenBSD 3.3では/etc/sysctl.confでipv6 forwardingが1になっていて、flagsにNO以外が書いてあればroute6dが起動します。もちろん何も指定しない("")でもroute6dが起動します。

ルータの設定 - zebraの使い方

zebraとは
GNU ZebraはRIP,OSPF,BGP,RIPngなどに対応したルーティングソフトウェアです。各ルーティングプロトコルが独立したプロセスで動作し、zebraというプロセスがルーティングを生成してkernelのルーティングテーブルに反映するという構成を採っています。
また、Ciscoライクな設定インタフェースを備えることでも有名です。
標準ではインストールされていない場合が多いので、ソースを持ってきてコンパイルして利用します。これを書いている時点での最新版は0.93aですが、IPv6で利用するならCVSのリポジトリから最新のsource treeを持ってくるぐらいの気概があっても良いです。
zebraのコンパイル
ふつー困りません。
$ ./configure
$ make
$ make check
$ su
# make install
zebraの設定
ここでは最低限ripngを動作させることを目指します。
まずはzebra本体の設定から。設定ファイルは標準で/usr/local/etc/zebra.confです。サンプルの設定ファイルがcopyされているはずです。
最初は、ファイルをある程度編集してからzebraを起動し、その後はzebraで提供されているユーザインタフェースを利用して設定するのが簡単です。 zebra本体は特に設定を要する項目は少ないです。
最初に起動する場合の設定例はこんな感じ。パスワード、ホスト名は各自適当に。
/usr/local/etc/zebra.conf
!
hostname zebra@router
password hoge
enable password hogehoge
log syslog
!
access-list localonly permit 127.0.0.1/32
!
ipv6 access-list localonly permit ::1/128
!
line vty
 access-class localonly
 exec-timeout 600 0
!
この後、zebraを起動します。
# /usr/local/sbin/zebra -d
-dはdaemonモードで起動させるオプションです。うまく行けばzebraが起動しているので早速ログインして、残りの設定をやってしまいましょう。
zebraにログインするには、telnetでポート2601にアクセスします。上記設定例ではlocalhostからのアクセスのみを許す設定になっているので、localhost指定でアクセスします。
$ telnet localhost 2601
Trying ::1...
Connected to localhost.
Escape character is '^]'.

Hello, this is zebra (version 0.93a).
Copyright 1996-2002 Kunihiro Ishiguro.


User Access Verification

Password:<設定したパスワード>
zebra@router> 
これでzebraにログインできました。さて、設定を変更するためにenableになりましょう。
zebra@router> en
Password: <設定したパスワード>
zebra@router# 
これで設定が変えたいホーダイです。特に設定変更が必要なところはないんですが、流石に設定ファイルにパスワードが平文で書かれてるのは精神安定上よろしくないので、簡単な暗号化を行うようにします。
zebra@router# conf t     
zebra@router(config)# service password-encryption
zebra@router(config)# end
zebra@router# wr mem
Configuration saved to /usr/local/etc/zebra.conf
zebra@router# exit
こんな感じで設定を変更して、wr memで設定ファイルを保存しておきます。
後で設定ファイルを直接見てみれば分かりますがインタフェースの設定などが自動的に入っています。が、ここでは特にインタフェースの設定は行わないのでそのままにしておきます。
ripngdの設定
ripngdの設定ファイルは標準で/usr/local/etc/ripngd.confです。
zebra本体と同じく、設定ファイルをある程度編集してからripngdを起動して、その後はripngdで提供されているユーザインタフェースを利用して設定するのが簡単です。 最初に起動する場合の設定例はzebraとほぼ同じ感じ。パスワード、ホスト名は各自適当に。
/usr/local/etc/ripngd.conf
!
hostname ripngd@router
password hoge
enable password hogehoge
log syslog
!
access-list localonly permit 127.0.0.1/32
!
ipv6 access-list localonly permit ::1/128
!
router ripng
!
line vty
 access-class localonly
 exec-timeout 600 0
!
この後、ripngdを起動します。
# /usr/local/sbin/ripngd -d
-dはdaemonモードで起動させるオプションです。早速ログインして、残りの設定をやってしまいましょう。
ripngdにログインするには、telnetでポート2603にアクセスします。上記設定例ではlocalhostからのアクセスのみを許す設定になっているので、localhost指定でアクセスします。
$ telnet localhost 2603
Trying ::1...
Connected to localhost.
Escape character is '^]'.

Hello, this is zebra (version 0.93a).
Copyright 1996-2002 Kunihiro Ishiguro.


User Access Verification

Password:<設定したパスワード>
ripngd@router> 
これでripngdにログインできました。さて、設定を変更するためにenableになりましょう。
ripngd@router> en
Password: <設定したパスワード>
ripngd@router# 
ここでも設定ファイルにパスワードが平文で書かれてるのは精神安定上よろしくないので、簡単な暗号化を行うようにします。
ripngd@router# conf t     
ripngd@router(config)# service password-encryption
ripngd@router(config)# end
ripngd@router# wr mem
Configuration saved to /usr/local/etc/ripngd.conf
ripngd@router# exit
こんな感じで設定を変更して、wr memで設定ファイルを保存しておきます。
さて、後はripng自体の設定です。ここでは前述のroute6dと同じような設定をしてみます。
ripngd@router# conf t     
ripngd@router(config)# ipv6 access-list FREAK permit 2001:240:ff::/48 exact-match
ripngd@router(config)# ipv6 access-list FREAK permit 3ffe:8020:10fd::/48 exact-match
ripngd@router(config)# router ripng
ripngd@router(config-router)# distribute-list FREAK out gif0
ripngd@router(config-router)# route 2001:240:ff::/48
ripngd@router(config-router)# route 3ffe:8020:10fd::/48
ripngd@router(config-router)# network ep0
ripngd@router(config-router)# network gif0
ripngd@router(config-router)# end
ripngd@router# wr mem
Configuration saved to /usr/local/etc/ripngd.conf
ripngd@router# exit
これで、ep0では全ての経路をやり取りし、gif0では全ての経路を受け取るけれども2001:240:ff::/48, 3ffe:8020:10fd::/48の経路のみを広報する設定になります。

ルータの設定 - CiscoIOS12.2(2)T以降の場合

CiscoでIPv6
IOS12.2(2)TからIPv6対応しました。ここではCiscoの設定にはある程度理解している人向けに設定例を紹介します。
まだまだ開発が続いてますので、なるべく新しいIOSを利用しましょう。最近だと12.0(25)Sとか12.2(14)S2とか12.2(15)T2等など。
IPv6ルータにする
設定に一行追加してください。
!
ipv6 unicast-routing
!
インタフェースの設定
ipv6 addressを使いましょう。アドレスを完全に記述しても良いし、下位64bitをeui-64で自動生成することもできます。
!
ipv6 address 2001:240:ff:1::445/64
ipv6 address 2001:240:ff:1::/64 eui-64
!
どちらでもOK。ただし完全に記述した方が後のトラブルが避けられて良いかも。
トンネルの設定
ふつーIPv6って生で通すよねって人は、読み飛ばしてください。
tunnelインタフェースにmode ipv6ipでトンネルを作ります。
設定例はこんな感じ
!
interface Tunnel6
 ipv6 enable
 tunnel source <送信元IPv4アドレスがついているインタフェース名>
 tunnel destination <送信先IPv4アドレス>
 tunnel mode ipv6ip
 tunnel path-mtu-discovery
!
sourceのインタフェース等は環境に応じて適当に設定して下さい。
ripngの設定
なんだか今までのCiscoのripとは大違いなので、ご注意。
ipv6 router rip <適当な名前>
interface < ripngを動かしたいところ >
 ipv6 rip <上で付けた適当な名前> enable
 ipv6 rip <上で付けた適当な名前> summary-address <サマリアドレス>
!
こんな感じ。 全体を通すと、例えばこんな感じ。
!
ipv6 unicast-routing
!
interface  Loopback0
 description FREAK loopback
 no ip address
 no ip redirects
 no ip proxy-arp
 ipv6 address 2001:240:FF::445/128
 ipv6 enable
 ipv6 rip FREAK enable
!
interface FastEthernet0/0
 description FREAK
 no ip address
 no ip redirects
 no ip proxy-arp
 duplex full
 ipv6 address 2001:240:FF:1::445/64
 ipv6 enable
 ipv6 rip FREAK enable
 no ipv6 redirects
!
ipv6 router rip FREAK
!
ipv6 access-list FREAK-ACL
 permit ipv6 2001:240:FF:1::/64 any
 deny ipv6 any any
!
line vty 0 4
 login
 password 7 
 ipv6 access-class FREAK-ACL in
!
end

ルータの設定 - 設定が終ったら疎通確認

ping6
ping6 < 宛先 > で疎通を確認します。我が家では、 2001:240:ff:1::110 辺りに打ってみて下さい。
逆引が遅いときは、-n オプションを設定すると良いです。
traceroute6
traceroute6 < 宛先 > で疎通を確認します。我が家では、 2001:240:ff:1::110 辺りに打ってみて下さい。
逆引が遅いときは、-n オプションを設定すると良いです。
looking glass
IPv6での疎通確認に利用できるlooking glassが幾つかあります。
DTI Looking Glass - http://neptune.dti.ad.jp
IMNET iNOC Looking Glass Service - http://www.inoc.imnet.ad.jp/lg/
我が家:) - http://query.freak.ne.jp/
とかとか。DTIのLooking Glassはリンク集としても便利です。

DNSの設定 - BIND9の場合

BINDとは
BINDは、ISCが開発、配布しているDNSソフトウェアで世界で広く利用されています。現在の主流はBIND version8ですが、IPv6に正式に対応しているのはBIND versin9からになります。現在の最新バージョンは、BIND9.2.2です。CERTのAdvisoryも出ているようなので、最新版を持ってきてコンパイルして利用しましょう。
BINDの設定
標準で/etc/named.confを読むのでこれを編集します。基本をすぱっと省いてIPv6に特化したところを抜粋します。
/etc/named.confの設定
options {
        listen-on-v6 { any; };
        query-source-v6 address <ソースアドレス>
};
ぐらい。listen-onはおまじない。query-sourceは他のDNSサーバにqueryを投げるときのアドレスを明示的に指定する場合に書きます。まあ、なくても動きます。
AAAAレコードとA6レコード
現在IPv6の正引きをDNSで表現するのに2種類のレコードがあります。
AAAAレコードはAレコードのIPv6版で、128bitのアドレスをそのアドレス表記のまま記述できます。A6レコードは少し構造を持ったレコードが記述できて、プロバイダから割当てられたアドレスのリナンバに対応できようになっています。
どちらが主流になるかわかりませんが、現状では各国のccTLDのNSレコードに指定されている各ネームサーバに書いてあるのもほとんどAAAAレコードみたいだし、恐らくAAAAレコードが生き残るのでは無いかと思います。

itojunさんに聞いたら、その後AAAAレコードで行こうと決ったとのことでした。
もうすぐA6を引かないBINDが出てくるとのこと。
ip6.intとip6.arpa
これまでIPv6の逆引き空間はip6.intが利用されてきましたが、rfc2874でip6.arpaを利用する結論に至りました。rfc3152等も参照のこと
以後はip6.arpaを利用するのが正しいと思います。ただほんとに今後変更がないか、少し自信無し。
ついでに、binaryなのかnibbleで逆順なのか気になるところですが、今のところIPv4の逆引きとの親和性からかnibbleが有望。 2002/08/01にAPNICからip6.arpaを利用する旨の発表がありました。ip6.intは今後利用されなくなるようですが、その予定や期日などはまだ発表されていません。

エンドホストの設定 - NetBSD 1.6Rの場合

/etc/rc.confの設定
ip6modeを記述すれば完成。残念ながら、resolv.confは手で書いてください。
/etc/rc.conf
ip6mode=autohost
我が家のresolv.confはこんな感じ
/etc/resolv.conf
nameserver 2001:240:ff:1::10
nameserver 2001:268:131::110

エンドホストの設定 - FreeBSD 4.8Rの場合

/etc/rc.confの設定
ipv6_enableを記述すれば完成。残念ながら、resolv.confは手で書いてください。
/etc/rc.conf
ipv6_enable="YES"
我が家のresolv.confはこんな感じ
/etc/resolv.conf
nameserver 2001:240:ff:1::10
nameserver 2001:268:131::110

エンドホストの設定 - WindowsXPの場合

ipv6 install
コマンドプロンプトで、ipv6 installを実行してください。IPv6トランスポートなDNSにはまだ対応してないそうですが、ipconfigでmulticast DNSが見える感じ。
C:\Documents and Settings\hoge>ipv6 install


2001-2004 Freak.ne.jp - Matsuzaki
snys@ss.iij4u.or.jp