no, ziggy just acts as a directory of public ip addresses. Once alice and bob know each other's public ip they can start communicating each other. Suppose alice is at A.A.A.A:1234 and bob is at B.B.B.B:5678. Alice sends
A.A.A.A:1234 -> B.B.B.B:5678
and bob simulataneously sends
B.B.B.B:5678 -> A.A.A.A:1234
When the packets arrive to the routers the NAT already has an opposite rule because of the sent packet. As this is UDP there is no SYN-ACK handshake or other state tracking information in the packets and they traverse the NAT.
A.A.A.A:1234 -> B.B.B.B:5678
and bob simulataneously sends
B.B.B.B:5678 -> A.A.A.A:1234
When the packets arrive to the routers the NAT already has an opposite rule because of the sent packet. As this is UDP there is no SYN-ACK handshake or other state tracking information in the packets and they traverse the NAT.