文句を言っても解決しないので、なんとかする方法を考えてみる。
LionだとOCN IPv6を使おうとしても、PPPが異常終了してしまう。IPv6 addressを持っているServerとVPNを張って、そこでIPv6 over IPv4すればよいのではないか?VPNが割り当てるIPv4のアドレスが固定ではないが、DTCP (Dynamic Tunnel Configuration Protocol)を使ってIPv6トンネルを掘ればよい。
というわけで、まずdtcpcへのLionパッチ。
--- dtcpc.rb-dist 2006-01-09 03:24:01.000000000 +0900
+++ dtcpc.rb 2012-02-26 19:34:35.000000000 +0900
@@ -96,7 +96,8 @@
TUNIF_CLONING = true
TUNNEL_CREATE = 'ifconfig %s tunnel %s %s'
TUNNEL_DELETE = 'ifconfig %s deletetunnel'
-ROUTE_METHOD = ROUTE_IFP
+#ROUTE_METHOD = ROUTE_IFP
+ROUTE_METHOD = ROUTE_INTERFACE
def usage()
$stderr.print "usage: #{File.basename($0)} [-cdDlnU] [-b udpport] [-i if] [-m mtu] [-p port] [-t tuntype] [-u username] [-A addr] [-R dest] [-P prefix-delegation] server\n"
これを当ててmake installする。
dtcpcは自動で動かすことにして、/usr/local/etc/dtcpc.auth を用意する。これはマニュアル通り。
launchdで自動起動させるため、/Library/LaunchDaemons にdtcpc.plistを作る。中身は
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>dtcpc</string>
<key>ProgramArguments</key>
<array>
<string>/usr/local/sbin/dtcpc</string>
<string>-t</string>
<string>host</string>
<string>-u</string>
<string>dtcpで使うユーザ名</string>
<string>dtcpsのアドレスまたはマシン名</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceDescription</key>
<string>Turmpet Dynamic Tunnel Configuration Protocol client</string>
</dict>
</plist>
sudo launchctl load /Library/LaunchDaemons/dtcpc.plist して起動させるが、サーバー側が用意できてからにする。
で、下のようなネットワーク構成で考える。
- 3つのサーバが同じネットワークに別々に存在している。
- 割り当てられているIPv6 addressは/64。
DTCP Serverはマニュアル通りにセットアップする。dtcpc.plist にあるように、dtcpcはhostモードで動かすので、prefixに/64のアドレスを設定する。
dtcpcのアドレスはdtcpsが自動で割り当てる。このとき、IPv6 Gatewayから見ると、dtcpcにはDTCP Server経由となるのだが、割り当てているのは同一の/64のアドレスなので、proxy arpのように、DTCP Serverが代理で応答してくれないと、通信できない。
/64よりも大きいaddress blockが割り当てられているのであれば、別の/64アドレスを使うこともできるのだが、その手は使えない。
そこで、dtcpsが割り当てるaddressが/64の頭の方であることに注目し、IPv6 GatewayにDTCP Server経由の/96(/80でも可)のルートを追加して逃げる。routeはlongest matchなので、これでOK。DTCP ServerでRIP NGか何かを動かすのが正攻法なのだろうけど。3つがバラバラでなければもっと簡単になるんだろう。
まだまだ、IPv6で生活するには手間がかかるな。