Two wandering Arduinos finding each other on the Internet

I'm working on a project where two Arduinos, WiFi connected, will always find each other and create a communications channel, no matter where they are on the Internet.

I've overcome two major obstacles: First, NAT hides my external IP. Using a Google STUN server, the devices are able to obtain their own external IPs. Second, firewalling blocks communications, but I've managed to use "UDP Hole Punching" (check it out on Wikipedia) to get around the firewalls on both ends and establish direct communication.

So now both devices know their external IPs, and firewalling has been dealt with. But they don't know each other's IP address. What I need is a public place where I can post these. A sort of virtual corkboard where I can post "Sorry I missed you, but call me at IP address x.x.y.z -Device#0001".

I've come up with a few options, but they all have major drawbacks:

  • Use a twitter account. I don't like this because connecting to Twitter with OAUTH is complex, and most people choose to use a proxy service to do so. Also, both devices would have to have the twitter account credentials, which would be a pain to update. I'd prefer a simpler solution.
  • Build some custom web service. I'd much rather use existing publicly-available infrastructure, rather than rely on some server running at my home.
  • Use email. This won't work easily: my Internet provider blocks outgoing connections on port 25 unless it's to their server, so that they can do the SMTP relay, and only if you authenticate.

Anyone else have an idea of where I could post and read some info publicly? A typical message (before being encrypted for public posting) would look like:

Device ID: 0001 IP: 50.60.70.80 Port: 23456

Thanks for reading this!
-Rich

Instead of having a server at your home, there are plenty of free hosting web sites. Would that work?

Shpaget:
Instead of having a server at your home, there are plenty of free hosting web sites. Would that work?

I'd rather avoid that, simply because it means one more component that I have to maintain to make this work. If it was working using something like a Twitter account, I'd know that it will always be up, and will always work, as long as Twitter doesn't make a major change to their API.

I recommend sparkfun data server. Check it out:

https://data.sparkfun.com/

It is incredibly easy to set up a stream and query the stream. One arduino can post on the stream name_of_unit and then external_IP, and the other also posts the same thing. Then each arduino queries for the latest entry with the other arduino's unit name on it and get that entry, get the external IP, boom!

You can have any arduino talk with any other arduino this way.

Possibly use a dynamic ip servoce like www.no-ip.com.

liudr:
I recommend sparkfun data server. Check it out:

https://data.sparkfun.com/

Wow, thanks a lot, this is exactly what I was looking for! Easy to post and read via basic HTTP, no complex authentication.

Easy to post and read via basic HTTP

I noticed "https" in the demo link on their page.

zoomkat:
I noticed "https" in the demo link on their page.

You can post with http.