IPv6 tunnel on Solaris

2004/11/07

sasaki@nobug.tukusi.ne.jp


Solaris 8 でIPv6 over IPv4 トンネルを設定してみましょう。


ここでは、Solaris8 ホストを、KDDI IPv6トンネルサービスに接続しています。


1. 設定後の状態

最初に設定後の状態を示しておきます。

インタフェース



lo0: flags=1000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
dmfe1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet 211.5.193.66 netmask fffffff0 broadcast 211.5.193.79
lo0: flags=2000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv6> mtu 8252 index 1
        inet6 ::1/128
dmfe1: flags=2100841<UP,RUNNING,MULTICAST,ROUTER,IPv6> mtu 1500 index 2
        inet6 fe80::203:baff:fe04:f5ce/10
dmfe1:1: flags=2100841<UP,RUNNING,MULTICAST,ROUTER,IPv6> mtu 1500 index 2
        inet6 2001:268:315::53:1/64
dmfe1:2: flags=2180841<UP,RUNNING,MULTICAST,ADDRCONF,ROUTER,IPv6> mtu 1500 index 2
        inet6 2001:268:315:0:203:baff:fe04:f5ce/64
ip.tun0: flags=2200851<UP,POINTOPOINT,RUNNING,MULTICAST,NONUD,IPv6> mtu 1280 index 3
        inet tunnel src 211.5.193.66    tunnel dst 61.200.163.69
        inet6 fe80::d305:c142/10 --> fe80::3dc8:a345
ip.tun0:1: flags=2202851<UP,POINTOPOINT,RUNNING,MULTICAST,UNNUMBERED,NONUD,IPv6> mtu 1280 index 3
        inet6 2001:268:315::53:1/128 --> ::

dmfe1は、Netra X1 のインタフェースです。
基本的には、次のアドレスが割り付けば完成です。

dmfe1: ローカルIPv4アドレス
dmfe1:1 ローカルIPv6アドレス(論理インタフェース番号はなんでも構わない)
ip.tun0: IPv4 トンネルのローカルと相手先アドレス
ip.tun0:1 ローカルIPv6アドレス

IPv6の経路



Routing Table: IPv6
  Destination/Mask            Gateway                   Flags Ref   Use   If 
--------------------------- --------------------------- ----- --- ------ -----
::                          casper.3bit.co.jp           UH      1      0 ip.tun0:1
fe80::3dc8:a345             fe80::d305:c142             UH      1      0 ip.tun0
2001:268:315::/64           casper.3bit.co.jp           U       1      0 dmfe1:1
fe80::/10                   fe80::203:baff:fe04:f5ce    U       1      6 dmfe1
ff00::/8                    fe80::203:baff:fe04:f5ce    U       1      0 dmfe1
default                     fe80::d305:c142             U       1    302 ip.tun0
localhost                   localhost                   UH      2      8 lo0 


2. 設定

2.1. /etc/inet/ndpd.conf

<>ndpd.conf は Router Advertise を行うための設定ファイルです。
ここで設定したSolarisホストはIPv6ルータとして利用するつもりなので、まわりのホストが自動でアドレスをもらえるように、RAを行うように設 定します。


ifdefault AdvReachableTime 30000 AdvRetransTimer 2000
if dmfe1 AdvSendAdvertisements on
prefix 2001:268:315::/64 dmfe1


<>

2.2. /etc/hostname6.dmfe1

hostname.${interface_name} は、interface_name に対してアドレスを設定するためのファイルです。IPv4の場合は hostname.${interface_name}ですが、IPv6の場合は hostname6.${interface_name}です。
RAを受け取るホストは内容を空にしておけばよいのですが、このホストはルータとして固定的に割り当てるため固定アドレスを記述します。論理アドレスの追 加になるので、addif であるところが IPv4 の設定の場合とは違っています。(IPv4であっても複数アドレスを持ちたい場合はaddifと記述します)


addif 2001:268:315::53:1/64 up



2.3. /etc/hostname6.ip.tun0

インタフェー ス名 ip.tunは、トンネルインタフェースの為の論理名です。このインタフェース名はトンネルのための記述を行います。
IPv6 over IPv4 トンネルを行うためには、
を記述するこ とになっています。相手先IPv6アドレスは省略してもかまいません。
ローカルIPv6アドレスを設定しなくても、
リンクローカルアドレス

また、こうして作成された IPv6のMTUは1480に設定されます。FreeBSD, NetBSDなど、KAMEベースのIPv6実装ではデフォルトが1280になっていますので、これに合わせる記述も追加しておきます。


tsrc 211.5.193.66 tdst 61.200.163.69 mtu 1280 up
addif 2001:268:315::53:1 mtu 1280 up



ローカルIPv6アドレスを設定しなくても、ip.tun0 にはIPv6リンクローカルアドレスが自動的に付与されます。但し、この時相手先のIPv6リンクローカルアドレスとして固定的に
が設定されま す。


ip.tun0: flags=2200851<UP,POINTOPOINT,RUNNING,MULTICAST,NONUD,IPv6> mtu 1280 index 3
        inet tunnel src 211.5.193.66    tunnel dst 61.200.163.69
        inet6 fe80::d305:c142/10 --> fe80::3dc8:a345



この場合、ト ンネル相手が61.200.163.69ですから、3d.c8.a3.45が割り振られています。

リンクローカルアドレスがあれば同一セグメント内ではなにもしなくてもping6が通る、はずなので すが、Solaris側ホストからのpingは通っても相手先からのpingが通るとは限りません。どうやら、Solaris側では相手先リンクローカル アドレスを固定してしまうが為に、このアドレス以外からのping要求に対して応答しないようです。そして、このリンクローカルアドレスを変更することが できません。ここはKAMEの実装と違った動作をしますので、KAMEのつもりで設定すると不可解に見えるかもしれません。(ってゆーか不可解でした)

ですから、addif を忘れないようにしましょう。

2.4. /etc/inet/ipnodes

ipnodes はトンネルとは直接関係ありません。dnsがIPv6問い合わせに答える設定をするだけです。
せっかくIPv6ホストになるのですから、dns問い合わせもIPv6でできるようにしましょう。

書式は /etc/hosts に準じます。


#
# Internet host table
#
::1             localhost
127.0.0.1       localhost
2001:268:315::53:1      casper.3bit.co.jp casper



2.5. /etc/nsswitch.conf

ipnodes の設定は、nsswitch.confを設定しなければ有効になりません。
ipnodesがdnsを見るように設定します。


hosts:      dns files
ipnodes:    dns files




2.6. /etc/init.d/inet6

インタフェー スの設定については2.3までで終りなのですが、実はIPv6デフォルトルートがどこにも向いていません。これを自動的に設定するようにスタートアップス クリプトを記述し、デフォルトルートの設定をします。
このとき、デフォルトルートはSolarisが仮定する相手先IPv6リンクローカルアドレスを記述 します。
アドレスの決定方法は例の
です。


#!/bin/sh

echo 'adding default route entry into IPv6 routing table'
/usr/sbin/route add -inet6 default fe80::3dc8:a345 -interface


作成したス タートアップスクリプトは、例えば
 ln -s /etc/init.d/inet6 /etc/rc2.d/S69inet6
などとしておきます。

ここまでで記述は終了です。リブート後、トンネルインタフェースが使えるようになります。
もちろん、相手がいればの話です :-)



3. その他の情報

NTT Comunications に接続する例は、http://www.optix.org/~dxy/solaris/ipv6/ にあります。





Copyright 2004 N.Sasaki <sasaki@nobug.tukusi.ne.jp>
この文章が最初に記述されたのは2004/11/07です