Aby rozwinąć post ewanm89, TeamViewer używa UDP pinholeing.
UDP jest protokołem bezstanowym. Oznacza to, że pakiety są wysyłane do celu bez żadnej weryfikacji (na poziomie protokołu), że zostały odebrane lub nawet dotarły do miejsca przeznaczenia. Firewalle są zaprojektowane tak, aby wyszukiwać pakiety UDP i rejestrować źródło i miejsce docelowe, jak również znacznik czasu. Jeśli widzą one pakiet przychodzący, który pasuje do pakietu wychodzącego, generalnie przepuszczają pakiet nawet bez konkretnej reguły umieszczonej na liście dostępu firewalla. Może to być zablokowane na urządzeniach klasy korporacyjnej, ale ogólnie rzecz biorąc 90% zapór sieciowych zezwoli na ruch zwrotny.
Aby połączyć się z serwerem TeamViewer, twoja maszyna (przeglądarka) musi mieć połączenie TCP z powrotem do głównego serwera TeamViewer. Maszyna docelowa (klient) również ma połączenie TCP z głównym serwerem TeamViewer. Po nawiązaniu połączenia Twój komputer informuje serwer główny o swoich zamiarach. Serwer główny przekazuje ci adres IP maszyny klienckiej. Twój komputer rozpoczyna wysyłanie pakietów UDP do klienta. Klient otrzymuje sygnał, że zamierzasz się połączyć i otrzymuje Twój adres IP. Klient również zaczyna wysyłać pakiety UDP do Ciebie.
Jeśli firewalle są „przyjazne P2P”, powoduje to, że oba firewalle (Twój i klienta) zezwalają na ruch, tym samym „dziurawiąc” firewall. Konkretnie, wymaga to od firewalli, aby nie zmieniały publicznego portu wychodzącego pakietu tylko dlatego, że zmienił się jego cel; firewall musi ponownie użyć tego samego publicznego portu tak długo, jak długo nie zmieniło się źródło pakietu. Jeśli wasze firewalle nie zachowują się w taki przyjazny sposób, to ten sposób nie zadziała. Wiele zapór jednak zachowuje się w ten sposób.
Oczywiście TeamViewer dodaje pewne zabezpieczenia, sprawdzając pin/hasło, zanim główny serwer wyśle informacje o IP do obu stron, ale załapałeś o co chodzi.