CentOS(Linux)のmiredo(teredo)でIPv6

Linuxで簡単にIPv6を遊ぶ miredo を使ってみた。 ちなみに miredo は teredo の Linux向け実装。 teredo は 6to4 のように IPv4にIPv6をトンネルさせるプロトコル。 これがあれば IPv4 しかない環境で IPv6 遊びができる。

[[$$amazon-search-result-large books-jp IPv6]]

miredo をひろってくる

最新版じゃないと NAT 越えできない場合があるので、最新がいい。 (Unsupported symmetric NAT detected. などと言われる)

  • symmetric NAT ってのは、よくあるポート番号まで付け換えるNAT (NAPT)
    • Cone NAT なら さくっと通るみたい。
        - miredo.spec 2007-01-10 14:13:55.000000000 +0900
+++ miredo-1.1.5.spec   2008-06-18 21:34:11.000000000 +0900
@@ -4,7 +4,7 @@

 Summary: Tunneling of Ipv6 over UDP through NATs
 Name: miredo
-Version: 1.0.6
+Version: 1.1.5
 Release: 1.rf
 License: GPL
 Group: Applications/Internet
@@ -40,7 +40,7 @@
 %setup

 %build
-%configure
+%configure  --without-Judy
 %{__make} %{?_smp_mflags}

 %install
@@ -67,7 +67,8 @@
 %doc %{_mandir}/man5/isatapd.conf*
 %doc %{_mandir}/man8/isatapd*
 #%config(noreplace) %{_sysconfdir}/miredo-server.conf-dist
-%config(noreplace) %{_sysconfdir}/miredo.conf
+%config(noreplace) %{_sysconfdir}/miredo/miredo.conf
+%config(noreplace) %{_sysconfdir}/miredo/client-hook
 #%config(noreplace) %{_sysconfdir}/miredo.conf-dist
 #%config(noreplace) %{_sysconfdir}/isatapd.conf-dist
 %{_sbindir}/miredo

miredo を実行する

  • 単にmiredoコマンドを実行するだけ。
  • ifconfig すると v6 アドレスがついてる
# ifconfig teredo
teredo    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
          inet6 addr: fe80::ffff:ffff:ffff/64 Scope:Link
          inet6 addr: 2001:0:53aa:64c:2093:ae13:3511:3feb/32 Scope:Global
          UP POINTOPOINT RUNNING NOARP  MTU:1280  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:16 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:10
          RX bytes:0 (0.0 b)  TX bytes:1296 (1.2 KiB)

kame.netにpingしてみる。

# dig www.kame.net aaaa
          :
orange.kame.net.     85804    IN       AAAA     2001:200:0:8000::42
# ping6 2001:200:0:8000::42
PING 2001:200:0:8000::42(2001:200:0:8000::42) 56 data bytes
64 bytes from 2001:200:0:8000::42: icmp_seq=3 ttl=48 time=1618 ms
64 bytes from 2001:200:0:8000::42: icmp_seq=2 ttl=48 time=2617 ms
64 bytes from 2001:200:0:8000::42: icmp_seq=1 ttl=48 time=3617 ms
64 bytes from 2001:200:0:8000::42: icmp_seq=0 ttl=48 time=4617 ms
64 bytes from 2001:200:0:8000::42: icmp_seq=4 ttl=48 time=635 ms

↑でパケットの順序がおかしいのは、最初のトンネルを掘るのに時間がかかってるため。

miredo (teredo) は何をしてるんだ?

RFC4380を読め、ですね。

IPv6 portal の絵を見た方がわかりやすい。

以下、調査メモ。

  • ローカルマシンで仮想IPv6インターフェイスを作る

    • IPv6で送られたパケットは、IPv4(UDP)にカプセル化され、 toredoサーバーに送られる
      • うちで試したら teredo-relay.funet.fi (128.214.231.107) に行ってる模様。それは遠いわ。
      • miredo.conf で指定できる模様
  • toredoサーバーは、送られて来たパケットを IPv6パケットに戻して、送信先に送る。

  • 戻りのパケットはもよりの? toredo 中継サーバーに吸い込まれる

    • そこで再度IPv4(UDP)にカプセル化されて、送信元に戻される。
  • 一度パケットが戻って来たら、そのパケットを見て次からは teredo 中継サーバー経由で通信する。

    • なのでteredo サーバーを使うのは最初の一発だけ。
  • Teredo: Tunneling IPv6 over UDP through NATs (無印吉澤@はてなダイアリー)に詳しい解説があります。

teredoサーバーはどこを指定したらいいんだ?

  • IPv6 portal にいくつか紹介されている。
  • 日本国内にはないのかもしれず...

セキュリティ問題

  • IPv6世界から見え見えになる..と思う。
    • iptables6 で絞る..しかないのかな。
  • IPv4側のインターフェイスを iptables 等でフィルタしてると カプセル化されたパケットが通過できないかも。
    • miredo.conf の BindPort/BindAddress で使うアドレス/ポートを固定して、そこはパケットを通すように指定する。

その他

  • [[$$handsout-jp 998]]

[[$$amazon-search-result-middle books-jp IPv6]]