梅本 肇/Hajimu UMEMOTO
ume@mahoroba.org
IPv6接続する際、ネイティブに接続できれば幸せであるが、多くがIPv6 over IPv4トンネルを使用しているのが現状であろう。
IPv6 over IPv4トンネルは、特定ルータ間でIPv6パケットをIPv4でラップしてやりとりする技術である。
使い方は、トンネル両端のルータのIPv4アドレスを指定することで、トンネルを確立する。そして、RIPngなどの経路制御プロトコルでIPv6経路の交換をするなり静的に設定するなりして、経路制御を行うことにより、使用できるようになる。
tunnelonlyはトンネルの確立だけを行うもので、IPv6アドレスの割り当てや経路制御は行わない。コマンド的にはgifconfigだけを行うと言えばわかりやすいだろうか。IPv6アドレスの割り当てや経路制御は、別途手動で行うか経路制御デーモンなどで行う(図2)。
クライアント サーバー --------------------------------------------------------------- 接続要求 ---- ユーザ名, トンネルタイプ ---> <--- +OK, 割り当てIPv6アドレス --- | | v v トンネル設定 トンネル設定 | | v v IPv6アドレス設定 IPv6アドレス設定 | | v v デフォルト経路設定 | v keep-alive ---------------------------------> (60 秒おき) <------------ +OK --------------- | v 終了処理 -------------- quit -------------> 終了処理 <------------ +OK ---------------図1 hostトンネルタイプ時の処理の流れ
クライアント サーバー --------------------------------------------------------------- 接続要求 ---- ユーザ名, トンネルタイプ ---> <------------ +OK --------------- | | v v トンネル設定 トンネル設定 | | v v keep-alive ---------------------------------> (60 秒おき) <------------ +OK --------------- | v 終了処理 ------------- quit --------------> 終了処理 <------------ +OK ---------------図2 tunnelonlyトンネルタイプ時の処理の流れ
DTCPではIPv4コネクションが切れる、あるいはkeep-aliveメッセージが一定時間届かないと、トンネルの回収処理を行う。hostあるいはtunnelonlyであればこれで十分である。しかし、tunnelrouteでは動的にIPv4アドレスが変化するなどの要因でトンネルが使用できなくなった際に、タイムアウトを待つまで経路情報が残ってしまうため、すぐに再接続できない。
クライアント サーバー --------------------------------------------------------------- 接続要求 ---- ユーザ名, トンネルタイプ ---> <------------ +OK --------------- | | v v トンネル設定 トンネル設定 | | v v デフォルト経路設定 経路設定 | | v v keep-alive ---------------------------------> (60 秒おき) <------------ +OK --------------- | v 終了処理 -------------- quit -------------> 終了処理 <------------ +OK ---------------図3 tunnelrouteトンネルタイプ時の処理の流れ
dtcpsは空いているgifインターフェイスを探して使用する。これだと、静的なトンネルと混在する際に若干不便なので、われわれは、dtcpsが使用するgifインターフェイスの範囲を-iオプションで指定できるように改造して使用している。
リスト1 routetableの例 user1 3ffe:505:ff19::/48 user2 3ffe:505:ff22::/48 user3 3ffe:505:ff26::/48 user4 3ffe:505:ff02:8000::/64
リスト2 dtcps起動スクリプトの例 #!/bin/sh PATH=/usr/local/v6/sbin:/usr/local/v6/bin:$PATH if [ -x /usr/local/v6/sbin/dtcps ]; then echo -n ' dtcps' dtcps -i 'gif7[0-9]' 3ffe:505:ffff:8000:: fi
| ネイティブにIPv6をサポートしたPPPを使えば良いじゃないかという意見は、まだまだ普及していないので却下。:-) | |
| 当然である。だが、筆者が初めてIPv6接続した際、このことに気付かず、しばらく放置してしまった。翌月のNTTの請求書を見るのが恐かった。^^; | |
| http://www.imasy.or.jp/~ume/ipv6/dtcp/に置いてあります。 |