For at uddybe ewanm89’s indlæg, bruger TeamViewer UDP pinholeing.
UDP er en stateless protokol. Det betyder, at pakker affyres til deres mål uden nogen verifikation (på protokolniveau) af, at de blev modtaget eller endog nåede frem til destinationen. Firewalls er designet til at lede efter UDP-pakker og registrere kilden og destinationen samt tidsstemplet. Hvis de ser en indgående pakke, der matcher en udgående pakke, vil de som regel lade pakken passere, selv uden at der er placeret en specifik regel i firewallens adgangsliste. Dette kan låses på enheder af virksomhedskvalitet, men generelt vil 90 % af firewalls derude tillade returtrafik.
For at kunne lave pin hole har din maskine (viewer) en TCP-forbindelse tilbage til den primære TeamViewer-server. Målmaskinen (klienten) har også en TCP-forbindelse til den primære TeamViewer-server. Når du trykker på connect, fortæller din maskine hovedserveren sin hensigt. Hovedserveren giver dig derefter klientmaskinens IP-adresse. Din maskine begynder derefter at affyre UDP-pakker til klienten. Klienten får et signal om, at du har til hensigt at oprette forbindelse, og får din IP-adresse. Klienten begynder også at sende UDP-pakker til dig.
Hvis firewalls er “P2P-venlige”, får dette begge firewalls (din og klientens) til at tillade trafikken, hvorved der “slås huller” i firewall’en. Konkret kræver dette, at firewallerne ikke ændrer den offentlige port for en udgående pakke, blot fordi dens destination er ændret; firewallen skal genbruge den samme offentlige port, så længe pakkens kilde ikke er ændret. Hvis dine firewalls ikke opfører sig på en sådan venlig måde, vil dette ikke fungere. Mange firewalls opfører sig dog på denne måde.
Selvfølgelig tilføjer TeamViewer en vis sikkerhed ved at foretage en pinkode/adgangskodekontrol, før hovedserveren sender IP-informationerne til begge parter, men du forstår idéen.