Az ewanm89 hozzászólását kiegészítendő, a TeamViewer valóban UDP pinholeinget használ.
Az UDP egy állapot nélküli protokoll. Ez azt jelenti, hogy a csomagokat úgy lövik ki a célpontra, hogy nem ellenőrzik (protokollszinten), hogy megkapták-e, vagy egyáltalán elérték-e a célállomást. A tűzfalakat úgy tervezték, hogy keressék az UDP csomagokat, és rögzítsék a forrást és a célállomást, valamint az időbélyeget. Ha olyan bejövő csomagot látnak, amely megegyezik egy kimenő csomaggal, akkor általában átengedik a csomagot anélkül is, hogy a tűzfal hozzáférési listáján külön szabály szerepelne. Ezt le lehet zárni a vállalati szintű eszközökön, de általában a tűzfalak 90%-a engedélyezi a visszatérő forgalmat.
A pin hole-hoz a gép (viewer) TCP-kapcsolattal rendelkezik a fő TeamViewer-kiszolgálóhoz. A célgép (ügyfél) szintén rendelkezik TCP-kapcsolattal a fő TeamViewer-kiszolgálóhoz. Amikor megnyomja a connect gombot, a gépe közli a fő szerverrel a szándékát. A főszerver ezután megadja az ügyfélgép IP-címét. Ezután az Ön gépe elkezd UDP csomagokat küldeni az ügyfélnek. Az ügyfél jelzi, hogy Ön csatlakozni kíván, és megkapja az Ön IP-címét. Az ügyfél szintén elkezd UDP csomagokat küldeni neked.
Ha a tűzfalak “P2P-barátok”, akkor ez mindkét tűzfal (a tiéd és az ügyfélé is) engedélyezi a forgalmat, így “lyukat üt a tűzfalon”. Konkrétan ez megköveteli, hogy a tűzfalak ne változtassák meg a kimenő csomag nyilvános portját pusztán azért, mert a célállomás megváltozott; a tűzfalnak ugyanazt a nyilvános portot kell újra felhasználnia mindaddig, amíg a csomag forrása nem változott. Ha a tűzfalak nem viselkednek ilyen barátságosan, akkor ez nem fog működni. Sok tűzfal azonban így viselkedik.
A TeamViewer persze némi biztonságot ad a pin/jelszó ellenőrzéssel, mielőtt a főszerver elküldi az IP-információt mindkét félnek, de érted a lényeget.