最新更新日 2001.12.25.

route6d を使ってルータを作る。
 それにしても随分久々の新規ネタになります。会社を変わったり雑誌にいろいろ記事を書いていてドタバタしていたので web の更新が滞っていました(^^;。

 と、言う事で新規のネタですが、今回はありあまる IPv6 アドレスを利用します。通常、IPv6 アドレスは NLA と言う /48 の単位で上位の ISP などから貰うことが出来ますが、これだと、65535 個の SLA のネットワークを構築できます。これを toute6d を使って SLA のネットワークを構築してみましょう。

 例のごとくテキストベースのネットワーク構成図です;-)。上位はトンネル接続で IAMSYdtcp により接続しています。


   +-------+
---|  ISP  |---------------+---- InterNet
   +---+---+               |
       |IPv4     IPv6 +----+----+  
       |   +----------|  IMASY  |Router:casper.imasy.or.jp
       |   |          +---------+
       |   |
       |   | 3ffe:505:2019::/48
       |   |
    ep0|   |gif0
    +--+---+--+ GateWay:gate.running-dog.net
    | FreeBSD | IPv4:64.123.3.128
    +----+----+ IPv6:3ffe:505:2019:1::1
      ed1|gif1
         |
         |
         | 3ffe:505:2019:a000:/64
         |
     fxp0|gif0  
    +----+----+ LAN 内 Router:v6route.running-dog.net
    | FreeBSD | IPv4: 192.168.1.100
    +----+----+ IPv6:3ffe:505:2019:a000::1
     fxp1|
         |
     ----+--------+-----------------------------+--------------
               ed1|                          rl0|     
             +----+----+                   +----+----+
             | USERPC1 |                   | USERPC2 |
             +----+----+                   +----+----+
             IPv6:3ffe:505:2019:a000::2    IPv6:3ffe:505:2019:a000::3

 この図は説明しないと解らないですね(^^;;。

IMASY より 3ffe:505:2019::/48 の IPv6 アドレスをもらっています。
GateWay である gate.running-dog.net は、IPv6 アドレスが 3ffe:505:2019:1::1 です。gif0 を利用して IMASY にトンネルしています。
gate.running-dog.net の IPv4 アドレスは 64.123.3.128 で ISP から DHCP で付加されています。

LAN 内のルータである v6route.running-dog.net は、上位の gate.running-dog.net から gif1 経由の gif0 着で 3ffe:505:2019:a000:/64 の IPv6 アドレスのルーティングが任されることになります。
IPv4 アドレスは 192.168.1.100 であり、IPv6 アドレスは 3ffe:505:2019:a000::1 になります。
その奥のネットワークには、USERPC1 と USERPC2 がそれぞれぶら下がったネットワークになります。

gate.running-dog.net と v6route.running-dog.net の間は IPv6 over IPv4 トンネルによる接続とします。

 簡単に状況を説明するとこんな事がしたいと言う事になるのですが、要は、ありあまる IPv6 アドレス空間を利用してサブネットを構築し、gate.running-dog.net (今後はドメイン名を省きます:-)はそのネットワークの GateWay で、v6route.running-dog.net をルータにしたい、と言う事です。

 この状態では、gate に route6d を立ち上げて v6route に対して、「おんどれのルー手イング情報はわてに投げたらエーねん。」と広報する事にします。v6route の方は「おらの経路情報はどないしたらよかと?」的に悩んでいるので、やはり route6d を起動して上位(gate)に教えて上げます。

 と、言う事で、チョー簡単に言うと、gate、v6route の双方で route6d を起動しておしまいです;-)。あれま。もう終わってしまった;-P。と、言う事で簡単すぎるのでもう少し詳しく見ていきましょう;-)。

v6route.running-dog.net の設定
 まず、下側のネットワークセグメントのルータである v6gate.running-dog.net の設定から見ていきましょう。

 こちらは普通の IPv6 ネットワークを構築するのと同様の設定で OK です。今の所は特には問題はないと思うので比較的簡単に設定できるかと思います。以下は rc.conf の必要と思われる部分の設定です。

----------------
ipv6_enable="YES"
ipv6_network_interfaces="fxp1"
ipv6_prefix_fxp1="3ffe:505:2019:a000"
ipv6_ifconfig_fxp1="3ffe:505:2019:a000::1 prefixlen 64"

rtadvd_enable="YES"
rtadvd_interfaces="fxp1"
----------------
gif_interfaces="gif0"
gifconfig_gif0="192.168.1.100 64.123.3.128"

ipv6_gateway_enable="YES"
ipv6_router_enable="YES"
ipv6_router_flags=""
----------------

 下の五行は route6d の起動部分なのでちょっと置いておきます。上の六行の部分でネットワーク自体がクローズドですが IPv6 Ready な環境になったかと思います。USERPC1、USERPC2 が IPv6 Ready な OS であれば、IPv6 アドレスが付加されたと思います。

 さて、3ffe:505:2019:a000::/64 の経路情報は上位のルータに伝えて上げる必要がるのですが、この時に、下の五行の設定によりその準備を行います。

 まず初めに gate と v6route の間は、今回はトンネル接続を利用するので、v6route 側で gif0 を生成して上げる必要があり、静的トンネルを掘るために gifconfig コマンドを打つ設定をします。gifconfig のオプションは、第一フィールドが自分の IPv4 アドレス、第二フィールドがトンネル先の IPv4 アドレスになります。

 そして route6d を起動してあげます。route6d は RIPng でお喋りします。無事に起動できたでしょうか。ps(1) で見ると、/usr/sbin/route6d が起動されていると思います。/64 のネットワークアドレスを利用する場合、特にオプションは必要有りません。

 route6d がちゃんと広報しているかは tcpdump(1) で確認する事が可能です。tcpdump -i gif0 として以下のようになっていれば OK です。ff02::9 のアドレスですね。

----------------
23:20:27.492251 fe80::203:47ff:fe77:cbd.ripng > \
                ff02::9.ripng:  ripng-resp 1: 3ffe:505:2019:a000::/64 (1)
----------------

gate.running-dog.net の設定
 さて、サブネットワークの設定が終わったので今度は上位のルータの設定です。こちらの方は gif0 を使って IMASY に接続しているので、gif1 を利用して下位のネットワークとトンネル接続する事にします。

 上位への接続に付いては過去の「ネットワークする IPv6。」などを参考にしてください。

 では実際に設定を見ていきますが、以下が v6route と接続する為に必要な rc.conf の設定です。

----------------
gif_interfaces="gif1"
gifconfig_gif1="64.123.3.128 192.168.1.100"
ipv6_router_enable="YES"       
ipv6_router="/usr/sbin/route6d"
ipv6_router_flags="-s -N gif0"           
----------------

 新たにトンネルを掘るために gif1 を生成します。そして、gifconfig コマンドのオプションを指定します。第一フィールドは自分の IPv4 アドレス、第二フィールドがトンネル先の IPv4 アドレスになるのはさっきと一緒ですが、今度は実際の IPv4 アドレスの順番が逆になっている事に注意してください。

 そして、route6d を起動しますが、今度はオプションを指定しています。-s オプションは、jman によると以下の様になっています。

----------------
-s      route6d を起動された時にカーネルルーティングテーブル内に存在する
        静的に定義された経路を通知するようにします。通知は一般的な split
        horizon 規則に従います。
----------------

 -N gif0 オプションは、以下の様になっています。

----------------
-N if1[,if2...]
        if1,[if2...] で指定されたインタフェース上では、経路を待ち受けず、
        通知もしません。
----------------

 と、言う事で、-N は不必要な経路情報を流さないための指定です。gif0 は IMASY へのトンネル用なのでそこに対して経路情報を流さない様にするための指定です。

 さ、これで、上流の gate と 下流の v6route で route6d が起動したので、この間は RIPng のパケットががんがん流れ始めたかと思います。後は、ping6 ff02::1%gif1 などして、実際にパケットが流れているかなど確認してみましょう。また、USERPC1、USERPC2 などからも IPv6 のパケットが飛ぶかも併せて確認してみましょう。ダメだった場合、ifconfig(8) であるとか、ping6(8)、tcpdump(1) などで確認してみましょう。

 と、言う事で、こんな感じで IPv6 のありあまるアドレス空間を利用する事が可能となったかと思います。今回は /64 の内の一個だけを使いましたが、gate で gif インターフェースをべこべこ作ると沢山のネットワークの構築が可能です。皆さんも是非、ありあまる IPv6 アドレス空間で遊んでみてください;-)。



Copyright (c) 1997-2004 takachan@running-dog.net All Rights Reserved.