...oder einen dritten Rechner als Server, in etwa so wie Skype das auch macht (Stichwort Firewall Piercing):
1) Rechner A verbindet zu Server mit dem Wunsch nach Kontakt zu B.
2)Rechner B hat schon Kontakt zum Server: Rechner B bekommt die Kontaktinfos, Server meldet an A die Infos für B zurück.
ODER
Rechner B hat noch keinen Kontakt zum Server: Dann muss man halt auf B warten
3) Nun haben A und B die Infos über die Gegenseite
4) A nimmt zu B Kontakt auf, dies wird von der Firewall vor B verworfen
5) A meldet Server die Kontaktparameter (vor allem den verwendeten Port), der reicht sie an B weiter
6) B antwortet A auf dem durch den Server von A mitgeteilten Port auf den Request von A, dies wird von der Firewall vor A nun durchgelassen, da diese das für die Antwort auf 4) hält
7) ggf. Wiederholung von 4-6 mit vertauschten Rollen
8) Nun können A und B ohne Mithilfe des Server miteinander kommunizieren