~nabeken/diary/

Gentoo Linux(6年くらい)とFreeBSD(1年くらい)とOpenBSD(新参者)を使う日々。


IHANet BGP peering overview

OCN IPv6 の非固定prefixを配下のルータで使う

Posted on Sat Apr 18 17:57:50 +0900 2009 by nabeken

タイトルだけ見てもよくわからないと思いますが、Linuxルータで固定、非固定のpppを張り、固定はサーバで、そして非固定はクライアントのいるサブネットで使うように設定する方法のメモになります。

OCN IPv6 の問題点

prefixを2つ用意しているのは評価できるのですが、問題はその prefix のサイズです。OCN IPv6 では /64 を2つ配る仕様になっています。さらに、prefixを受けとるには L2TP に ppp を通す必要があります。つまり、所有している RT57i では、IPv6 をルーティングできる(かつ、pppもIPv6対応なのに)のに、このprefixは使用できないことになります。

解法

非固定prefixのpppからやってくる RA をRT57iに伝え、さらにそこからクライアントへ RA を出すことで解決できます。しかし、これだけでは Linux ルータは非固定prefixへの経路を持っていませんので、RIPngで経路を交換することにしました。

ネットワークは以下のようになっています。

                                                                                               
   +--- Linux ルータ---------------------                                                        
   |                                    |
   |            |ppp1(固定)|---------(eth1)-|S W|------ サーバ
 (eth0)---------+                       |                                                                               
   |            |ppp666(非固定)|-----(eth2)---+                                                      
   |                                    |     |                                              
   +------------------------------------+     |                                              
                                            |S W|                                              
                                              |                                               
                                              |                                               
                                           |RT57i|                                                 
                                              |                                              
                                              |                                              
                                        クライアント                                                    

RA は簡易ながら proxy させました。アイデアは以下の通りです。

  • Linux ルータで非固定prefix のpppでRSを投げ、prefixを取得する (ただし、IFにはアドレスを振らない)
  • 受け取った prefix を再度RAするために、動的に radvd の設定ファイルを生成し、起動する
  • RT57i では、radvdが出したRAのprefixを使って、クライアントに向けRAを出す
    • ここまでが RA の relay。さらに
  • RT57i では、そのprefixをRIPngでLinuxルータに通知する

以上で RT57i 配下のマシンでも IPv6 による通信が可能となりました。

実装

試験的な実装なため、まだエラー処理などは甘いですが、ひとまず動いているようです。以下のスクリプトを動かしています。

  • get-ra-prefix.sh: rdisc6 を使い、RSを投げ、RAを取得し、prefixを得るスクリプト
  • gen-radvd-conf.sh: そのprefixを反映した radvd.conf を生成するスクリプト
  • update-radvd-conf.sh: 上記2つのスクリプトを動かす cron job 用スクリプト

手元では10分毎に update-radvd-conf.sh を動かしています。prefixのlifetimeなどは非固定prefixのため、短かめに設定しています。

これらスクリプトは github 上で公開しています。

最近はRT57iの中古にも巡り合い辛い状態ですが、持っているひとはまだまだ(むしろ、これから)活用できると思いますよ。もってない人、中古を見つけたらすぐに買いましょう :-)。