VPN上でIPv6する

2012/06/25

FreeBSD ipv6 l2tp pptp vpn ネットワーク

t f B! P L
これだけIPv6と言われているにも関わらず、公衆無線LANサービスでは、IPv6 addressを配っていない。それどころか、private addressを配布してキャリアグレードNATなんてところもある。global addressが割り当てられないということは、6to4できないということだ。
文句を言っても解決しないので、なんとかする方法を考えてみる。

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で生活するには手間がかかるな。


楽天で探す
楽天市場
にほんブログ村 IT技術ブログへ

人気の投稿

ブログ アーカイブ

自己紹介

開発からSREにクラスチェンジしました。

アフィリエイト

  • 当ブログ「Hiroaki's blog」は、amazon.co.jpを宣伝しリンクすることによってサイトが紹介料を獲得できる手段を提供することを目的に設定されたアフィリエイト宣伝プログラムである、Amazonアソシエイト・プログラムの参加者です。
  • 当ブログでは、第三者配信による広告サービスを利用しています。このような広告配信事業者は、ユーザーの興味に応じた商品やサービスの広告を表示するため、当サイトや他サイトへのアクセスに関する情報 (氏名、住所、メール アドレス、電話番号は含まれません) を使用することがあります。このプロセスの詳細やこのような情報が広告配信事業者に使用されないようにする方法については、ここをクリックしてください。
  • アクセストレードアフィリエイトプログラムに参加しています。
  • A8.netアフィリエイトプログラムに参加しています。
  • バリューコマースアフィリエイトプログラムに参加しています。
  • もしもアフィリエイトプログラムに参加しています。

プライバシーポリシー

当サイトにアクセスされる場合、IPアドレスなどの情報または閲覧状況に関するデータが機械的に生成され、場合によっては個人情報と関連付けられる可能性があります。プライバシー保護に関する適用法に準じて、これらの通信および閲覧に関するデータを収集、処理、および利用することがあります。
当サイトにアクセスされる場合、非個人情報(ブラウザの種類、OSの種類、ドメイン名、訪問数、平均滞在時間、ページ・ビューなど個人を特定できない情報)が自動収集される場合があります。当サイトのパフォーマンスやコンテンツを改善する目的で、これらの情報を利用する場合があります。
アフィリエイトでは成果を把握するためにcookie等を利用しています。それ以外の目的で使用されることはありません。詳しくは各社のページにて確認してください。
本サイトに掲載する情報に関しては、正しいものを提供することを務めていますが、掲載内容から、いかなる損失や損害などの被害が発生しても、当ブログでは責任を追いかねます。

QooQ