Klienci Teredo zasadniczo pakują pakiet IPv6 w pakiet IPv4 UDP i przesyłają go na serwer Teredo.
- Serwer Teredo uruchamia publicznie dostępny adres IPv4.
- Serwer przesyła enkapsulowany pakiet IPv4 do miejsca docelowego.
- Klient Teredo używa ruchu “keep alive” z serwerem.
- W ten sposób odbywa się NAT mapowanie pomiędzy portem źródłowym klienta a publicznym adresem IP (“klienta” lub publicznego adresu IP routera).
- Istnieje interwał “odświeżania”, w którym klient sprawdza, czy port źródłowy jest nadal aktualny.
- Interwał ten jest losowo zmieniany przez usługę Teredo.
- Porty źródłowe mogą być podatne na zmiany i ważne jest, aby serwer Teredo wiedział, jak dotrzeć z powrotem do klienta.
- Śledzenie portu źródłowego i adresu IP pozwala serwerowi Teredo na bezpośrednie dotarcie do klienta, co zasadniczo omija NAT bez konieczności konfiguracji.
Teredo nie wydaje się zbyt ładnie grać z NAT-em symetrycznym.
- Symetryczny NAT zmienia losowo “zewnętrzny” port źródłowy na każdą sesję
- Najpierw zmienia się adres IP z adresu niepodlegającego zmianie na publiczny adres IP.
- Next port źródłowy zmienia się losowo, przy czym mapowanie istnieje tylko w pamięci routera.
- Po zakończeniu komunikacji port źródłowy nie jest już używany
- Na następną sesję wybierany jest nowy, losowy port źródłowy.
Jakoś Teredo w Windows Vista i nowszy przezwycięża to, ale nie znalazłem jeszcze jasnego wyjaśnienia jak.
Proszę przeczytać IETF RFC na Teredo po dalsze szczegóły.
Uwaga: Zdaję sobie sprawę, że ten temat jest dość stary, ale obecnie jest to główny hit w wewnętrznym wyszukiwaniu SuperUsera w “What is Teredo Tunneling”. Chciałem udzielić bardziej ogólnej odpowiedzi, ponieważ tego właśnie szukałem, kiedy tu przyjechałem.