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 をひろってくる
-
dag さんのところに ちょっと古いバージョンの miredo の src.rpm がある。
-
最新版は開発元にある
-
dagさんの spec をいじって最新をコンパイルする。
最新版じゃないと 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 で指定できる模様
- IPv6で送られたパケットは、IPv4(UDP)にカプセル化され、 toredoサーバーに送られる
-
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]]