Teredo トンネリング
コンピュータネットワークにおいて、Teredo とはIPv6移行技術の一つである。IPv4を用いてインターネットに接続可能であるが、通信経路のどこかに IPv6 を理解しない通信機器が存在するために IPv6 ネットワークと直接接続ができないホストに対し、完全な IPv6 接続を提供する。他の類似プロトコルとは異なり、家庭用ルーターなどのネットワークアドレス変換 (NAT) 機器を経由している環境でも機能する。
Teredo は IPv6 データグラムをIPv4 User Datagram Protocol (UDP) データグラム内にカプセル化することによりIPv6接続を提供するクロスプラットフォームトンネリングプロトコルである。Teredo はこれらのデータグラムをIPv4インターネット上で、NAT越しであろうとルーティングを行う。どこか別の、IPv6ネットワークに繋がっている Teredo ノード（Teredo リレーと呼ばれる）がデータグラムを受けとり、非カプセル化して渡す。
Teredo は一時的な処方であり、長期的には全ての IPv6 ホストが IPv4 に依存せず直接 IPv6 接続を利用できる状況になることが望ましい。したがって、直接 IPv6 接続が利用可能になった際には Teredo は無効化されるべきである。Teredo はマイクロソフトの により開発され、IETFによりRFC 4380として標準化された。Teredo サーバーは UDP ポート 3544 番への接続を待ち受ける。
最も一般的な IPv6 over IPv4 トンネリングプロトコルである6to4では、トンネルのエンドポイントがパブリックIPv4アドレスを持っている必要がある。 しかし現在、IPv4アドレス枯渇問題などのために、多くのホストが一つ以上のNAT機器越しにIPv4インターネットに接続しており、パブリックIPv4アドレスはNAT機器には付与されても個々のホストには付与されない。したがって、この環境で6to4プロトコルを使用するためにはNAT機器自体が6to4トンネルエンドポイントとなるよう実装する必要がある。しかし、現在稼働中のNAT機器に6to4を実装するアップグレードを提供することは、多くの場合で技術的もしくは経済的問題により困難である。
Teredo では、IPv6 データグラムをほとんどのNATで適切に処理される UDP/IPv4 データグラム内にカプセル化することによりこの問題を軽減する。したがって、NAT越しにインターネットに接続しておりパブリックIPv4アドレスを付与されていないとしても、内部的にはIPv6を利用できるホストであれば、Teredo トンネルのエンドポイントとして動作可能である。事実上、Teredo を実装されたホストはローカルネットワークに手を加えることなくIPv6接続が可能になる。
長期的には、全てのIPv6ホストがネイティブIPv6接続を使用すべきである。Teredo プロトコルは一時的な手段であり、将来的には "sunset procedure", すなわちIPv6が成熟し接続可能になった暁には Teredo による接続をやめ、より安定したメカニズムで接続することが予定されている。IETF89開催時現在、マイクロソフトは自社の Windows クライアント向け Teredo サーバーを2014年前半までで停止し、かつ公開運用されている Teredo リレーに対し停止を促す計画である。
Teredo プロトコルはいくつかの機能を実行する。
Teredo では、いくつかのノード種別が定義されている。
各 Teredo クライアントには、下記のルールに従って構築されるパブリックIPv6アドレスが付与される。
例えば、IPv6 アドレス 2001:0000:4136:e378:8000:63bf:3fff:fdd2 は、次のような Teredo クライアントを指す。
Teredo クライアントは Teredo サーバーを用いてNATが（あれば）どの種類であるかをSTUN類似の「認定手続」により自動検知する。また、Teredo クライアントはサーバー宛の UDP データグラムをNATに向けて一定間隔で送信することによりサーバーとの接続を維持する。これによりサーバーが各クライアントにいつでもコンタクトできる状態が維持され、UDPホールパンチングが適切に利用できる状態が保たれる。
Teredo リレー（もしくは別の Teredo クライアント）が Teredo クライアント宛の IPv6 データグラムを送信する際、まず "" を、そのクライアントが利用している Teredo サーバーに送信する。サーバーのアドレスは宛先クライアントの Teredo IPv6アドレスに埋め込まれているので取得できる。サーバーは "bubble" をクライアントに転送し、これによりクライアントはリレーに向けてホールパンチングを行うことができる。
Teredo サーバーは Teredo クライアントからの ICMPv6 データグラムをIPv6インターネットに向けて転送することもできる。実運用上、Teredo クライアントがネイティブIPv6ノードとコンタクトしたい場合、対応する Teredo リレー、すなわちクライアントの使用するパブリックIPv4アドレスおよびUDPポート番号に対して IPv6 データグラムを転送してくれるリレーを用意する必要がある。このために、クライアントは ICMPv6 ("ping") データグラムを作成し、設定済み Teredo サーバー向けに送信する。Teredo サーバーはこれを非カプセル化して IPv6 インターネットに ping を転送し、やがて ping は IPv6 ノードに到達する。そのノードは ICMPv6 Echo Reply をRFC 2460で必須とされている通り返信する。この返信データグラムは「最近傍」Teredo リレー経由でルーティングされ、リレーはクライアントにこれを転送を試みる。
Teredo サーバを維持するためにはほとんど帯域幅は必要ない。なぜなら、実際のIPv6トラフィックデータグラムの送受信には関与しないからである。また、インターネットルーティングプロトコルへアクセスすることもない。Teredo サーバーに要求されるのは以下の二点のみである。Teredo リレーは多大なネットワーク帯域を消費する可能性がある。また、他のIPv6ホストに対して Teredo IPv6プレフィクス (2001::/32) 向けのルートをエクスポート（アドバタイズ）する必要がある。これにより、Teredo リレーは他のIPv6ホストから Teredo クライアント宛のトラフィックを受けとることになり、UDP/IPv4越しに転送を行う。それとは逆に、Teredo クライアントからネイティブ IPv6 ホスト宛のデータグラムを UDP/IPv4 越しに受けとった場合は、IPv6 ネットワーク越しに転送を行う。
運用上、ネットワーク管理者は自社もしくはキャンパス内限定のプライベート Teredo リレーを設置することができる。この場合は、Teredo クライアントとIPv6ネットワークをそのまま結ぶことができる。対して、単一ネットワークを越えるスケールの Teredo リレーを設置するためには別の自律システム (AS) 向けにIPv6ルートをBGPによりエクスポートする能力が求められる。
接続の行きと帰りで違うリレーを使うことのできる6to4とは違い、ネイティブIPv6ホストと Teredo クライアントの通信は同じ Teredo リレー、実際上はネイティブIPv6ホストにネットワーク的に最も近いリレーが使われる。Teredo クライアントは自ら IPv6 データグラムを送信できないため、自分でリレーを指定することはできない。したがって、クライアントからネイティブIPv6ホスト宛の通信を開始したい場合は、Teredo サーバーにデータグラムを送信し、ネイティブIPv6ホスト宛にクライアントの Teredo IPv6 アドレスのついたデータグラムを送信してもらう必要がある。これを受けてネイティブIPv6ホストは通常通り Teredo IPv6アドレス宛に返信し、このデータグラムにより最終的には Teredo リレーへのルートが発見され、クライアントとの通信が開始される（NAT突破のために Teredo サーバーを使う場合もある）。こうして、Teredo クライアントとネイティブIPv6ホストは必要な期間だけリレーを使用して通信を行うことができる。この設計により、Teredo サーバーもクライアントも Teredo リレーのIPv4アドレスを知る必要がない。Teredo リレーはネットワーク 2001::/32 をアドバタイズしているため、グローバルIPv6ルーティングテーブル経由で自動的に適切なリレーが選ばれる。
2006年3月30日、イタリアのISP、ITGate はIPv6インターネットに向けて 2001::/32 宛のルートをアドバタイズした初の AS となり、RFC 4380準拠の Teredo 実装が完全に利用可能となった。2007年2月16日現在、これは既に機能していない。
2009年第1四半期、IPv6バックボーンの は14のエニーキャスト実装 Teredo リレーを稼動させ、2001::/32 をグローバルにアドバタイズした。リレーはシアトル、フレモント、ロサンゼルス、シカゴ、ダラス、トロント、ニューヨーク、アッシュバーン、マイアミ、ロンドン、パリ、フランクフルト、香港に設置された。
大規模ネットワーク管理者は Teredo リレーを維持することが期待されている。6to4と同様、インターネット上のホストの大部分がIPv4に加えて Teredo 経由でIPv6を使い始めたとき、Teredo サービスがスケールするかは不明瞭のままである。マイクロソフトは Windows XP で初めて Teredo 擬似トンネルをリリースして以来一群の Teredo サーバーを運用してきたが、IPv6インターネット全体向けの Teredo リレーを提供したことはない。
Teredo は全てのNAT機器と互換性を持つわけではない。RFC 3489の用語を使うと、完全コーンNAT機器、制限NAT機器、ポート制限NAT機器をサポートするが、対称NATはサポートしない。Shipworm 仕様の初期ドラフト段階では最終的に対称NATもサポートされる予定だったが、セキュリティ上の懸念からキャンセルされた。
台湾の国立交通大学の研究者は後にオリジナルの Teredo プロトコルを拡張し対称NATをサポートした SymTeredo を提案し、マイクロソフトと Miredo の実装は標準に準拠しない拡張により対称NATサポートを向上させた。しかし、対称NAT越しのTeredo クライアントと、対称NATおよびポート制限NATとの間の接続は依然不可能なようである。
Teredo は二つのクライアントがカプセル化された IPv6 データグラムを交換する際は、Teredo サーバーとの通信に用いるものと同じマップされた外部UDPポート番号を用いることを想定している。この想定が成り立たないと、二つのクライアント間の直接通信を確立することができず、より通信コストのかかるリレーを挟んだを行う必要が出てくる。Teredo 実装はNATの種別を起動時に検知することを試み、NATが対称NATであれば動作を拒否する（この限界はNAT機器のポートフォワードルールを手動で設定することにより乗り越えることができる場合もあるが、機器への管理者アクセスが必要となる）。
Teredo はトンネルエンドポイントごとに単一のIPv6アドレスしか提供できない。したがって、6to4やいくつかのポイント・ツー・ポイントIPv6トンネルとは異なり、一つの Teredo トンネルを用いて複数ホストと接続することはできない。全ての Teredo クライアントが利用可能なIPv6インターネット向けの帯域幅は Teredo リレーの利用可能性により制限される。この点は6to4と変わらない。
6to4はパブリックIPv4アドレスを必要とするが、各トンエルエンドポイント毎に大きな48ビットIPv6プレフィックスが提供され、カプセル化オーバーヘッドが比較的低い。ポイント・ツー・ポイント・トンネルは Teredo より信頼性も追跡性も高く、典型的にはトンネルエンドポイントのIPv4に依存しない永続的IPv6アドレスが提供される。いくつかのポイント・ツー・ポイント・はNATトラバースのためのUDPカプセル化をサポートする（たとえばプロトコルではこれが可能である）。一方で、ポイント・ツー・ポイント・トンネルの利用には通常、登録が必要である。ポイント・ツー・ポイント・トンネルの利用を簡便化するための自動化ツール（など）もある。
Teredo はインターネットから通常は到達できないNATの背後のネットワークホストに、ルーティング可能なIPv6アドレスを付与するので、IPv6を利用可能で外部にポートを開いているアプリケーションを露出させる可能性があり、を増加させる。Teredo トンネルのカプセル化によりパケット検査に対してIPv6データトラフィックがマスクされてしまい、IPv6 マルウェアや場合によっては IPv4 マルウェアの拡散の可能性が発生する。US CERT はIPv6トンネリングを利用するマルウェアのリスクについてのレポートを公開している。また、Teredo に不正に遠隔利用可能な脆弱性があると、IPv6スタックとトンネリングソフトウェアが攻撃者に対して露出してしまう。
マイクロソフトのIPv6スタックには「プロテクションレベル」ソケットオプションがある。これにより、アプリケーションが Teredo トンネル、Teredo トンネル以外の場所（デフォルト）、もしくはローカルイントラネットのみ、のいずれかからのトラフィックのみを許可することができる。
Teredo プロトコルはまた、トンネルのエンドポイントに関する詳細な情報をデータパケットにカプセル化している。
Teredo 擬似トンネルを適切に運用するには、外向き UDP データグラムに加えて、それに対する返信データグラム（応答トラフィック）に対するフィルタリングも切る必要がある。これは、典型的なNATの設定とステートフルなファイヤーウォール機能に適合する。Teredo トンネリングソフトウェアは致命的エラーを検知すると外向き IPv4 UDP トラフィックをブロックする。また、UDP ポート 3544 への外向きトラフィックのブロックは Teredo の動作と干渉する。
近年、Teredo トンネルを用いたルーティングループ経由のDoS攻撃を行う方法が発見された。これを防ぐのは比較的容易である。
マイクロソフト製OSの現行バージョンでは、Teredo を含むIPv6移行技術がデフォルトで有効になっている。これを無効化することはコマンドプロンプトおよびレジストリ編集により行うことができ、IPv6が実装されていなければ組織内ネットワークのグループポリシーで無効化することもできる。マイクロソフトによりデフォルトで有効化されているため、クリーンインストール直後のWindows OS においてIPv6を利用するマルウェアの脅威を増やさないためには、IPv6および関連する移行技術に関してはわかりづらい設定を行う必要が発生している。
Teredo の実装としては、複数のものが存在する。
Teredo トンネリングプロトコルの最初のニックネームは "shipworm"（フナクイムシ）だった。 プロトコルがNATに穴を空けるということから、フナクイムシが木にトンネルを穿つ様子を連想したものである。フナクイムシは非常に多くの木製船殻をダメにした元凶であるが、クリスチャン・ウイテマはオリジナルのドラフトに次のように書いている。「この動物は比較的清浄で汚染のない水にしか棲めない。彼らが北アメリカの港に近年戻ってきていることは、水が綺麗になっている証拠である。そのように、NATに穴を空けることによってこのサービスは新たなインターネットの透明性に寄与するだろう。」
クリスチャン・ウイテマは、コンピューターワームとの混同を避けるために名前を Teredo に変更した。もっとも一般的なフナクイムシ種の学名は である。