Om verder te gaan op ewanm89’s post, TeamViewer maakt gebruik van UDP pinholeing.
UDP is een stateless protocol. Dit betekent dat pakketten worden afgevuurd op hun doel zonder verificatie (op protocolniveau) dat ze zijn ontvangen of zelfs de bestemming hebben bereikt. Firewalls zijn ontworpen om UDP pakketten te zoeken en de bron en bestemming op te slaan, alsmede de tijdstempel. Als ze een inkomend pakket zien dat overeenkomt met een uitgaand pakket, zullen ze het pakket over het algemeen doorlaten, zelfs zonder dat er een specifieke regel in de toegangslijst van de firewall is geplaatst. Dit kan worden geblokkeerd op enterprise-apparatuur, maar in het algemeen zal 90% van de firewalls die er zijn, het retourverkeer toestaan.
Om een pinhole te maken, heeft uw machine (viewer) een TCP-verbinding terug naar de TeamViewer hoofdserver. De doelmachine (client) heeft ook een TCP-verbinding met de TeamViewer-server. Wanneer u op verbinden drukt, vertelt uw computer de hoofdserver wat zijn bedoeling is. De hoofdserver geeft u vervolgens het IP-adres van de clientmachine. Uw computer begint dan UDP-pakketten naar de client te zenden. De client krijgt een signaal dat u van plan bent verbinding te maken en krijgt uw IP-adres. De client begint ook UDP-pakketten op u af te vuren.
Als de firewalls “P2P-vriendelijk” zijn, zorgt dit ervoor dat beide firewalls (de uwe en die van de client) het verkeer toestaan, waardoor “gaten” in de firewall worden geslagen. In het bijzonder vereist dit dat de firewalls de publieke poort van een uitgaand pakket niet veranderen alleen omdat de bestemming veranderd is; de firewall moet dezelfde publieke poort hergebruiken zolang de bron van het pakket niet veranderd is. Als uw firewalls zich niet op zo’n vriendelijke manier gedragen, dan zal dit niet werken. Veel firewalls gedragen zich echter wel zo.
Natuurlijk voegt TeamViewer wat veiligheid toe door een pin/wachtwoord controle uit te voeren voordat de hoofdserver de IP info naar beide partijen stuurt, maar je snapt het idee.