is possible using the address and socket that the reply
                   packet used. */
 
-               n->status.udp_confirmed = true;
+               if(!n->status.udp_confirmed) {
+                       char *address, *port;
+                       sockaddr2str(&n->address, &address, &port);
+                       send_request(mesh, n->nexthop->connection, NULL, "%d %s %s . -1 -1 -1 0 %s %s", ANS_KEY, n->name, n->name, address, port);
+                       free(address);
+                       free(port);
+                       n->status.udp_confirmed = true;
+               }
 
                /* If we haven't established the PMTU yet, restart the discovery process. */
 
 
                        return true;
                }
 
+               if(from == to) {
+                       logger(mesh, MESHLINK_WARNING, "Got %s from %s from %s to %s",
+                              "ANS_KEY", c->name, from_name, to_name);
+                       return true;
+               }
+
                /* Append the known UDP address of the from node, if we have a confirmed one */
                if(!*address && from->status.udp_confirmed && from->address.sa.sa_family != AF_UNSPEC) {
                        char *address, *port;
                return send_request(mesh, to->nexthop->connection, NULL, "%s", request);
        }
 
+       /* Is this an ANS_KEY informing us of our own reflexive UDP address? */
+
+       if(from == mesh->self) {
+               if(*key == '.' && *address && *port) {
+                       logger(mesh, MESHLINK_DEBUG, "Learned our own reflexive UDP address from %s: %s port %s", c->name, address, port);
+
+                       /* Inform all other nodes we want to communicate with and which are reachable via this connection */
+                       for splay_each(node_t, n, mesh->nodes) {
+                               if(n->nexthop == c->node) {
+                                       continue;
+                               }
+
+                               if(n->status.udp_confirmed) {
+                                       continue;
+                               }
+
+                               if(!n->status.waitingforkey && !n->status.validkey) {
+                                       continue;
+                               }
+
+                               logger(mesh, MESHLINK_DEBUG, "Forwarding our own reflexive UDP address to %s", n->name);
+                               send_request(mesh, c, NULL, "%d %s %s . -1 -1 -1 0 %s %s", ANS_KEY, mesh->self->name, n->name, address, port);
+                       }
+               } else {
+                       logger(mesh, MESHLINK_WARNING, "Got %s from %s from %s to %s",
+                              "ANS_KEY", c->name, from_name, to_name);
+               }
+
+               return true;
+       }
+
        /* Process SPTPS data if present */
 
        if(*key != '.') {