Bad Ubuntu!

$ less /etc/hosts
127.0.0.1 localhost
127.0.1.1 nile.ics.uci.edu nile
# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Yesterday, I spent a lot of time harassing just about everyone in my University’s Networking Support department because I couldn’t get an OpenSim server to serve clients anywhere. We know that OpenSim networking is hard. But, damn it, I’m one of the core devs of OpenSim, and I have a pretty good idea of what’s involved in the protocols between the server and the client. I’ve had lots of OpenSim servers running successfully in all sorts of networks, including my University’s. Well, the problem turned out to be… Ubuntu!

The default installation of Ubuntu comes with a horrible hack in /etc/hosts:

127.0.1.1 nile.ics.uci.edu nile

Yes, this maps the domain name to an interface in localhost, for reasons explained here. As stated in the Debian Reference:

“This is really improper because system hostnames and domain names are two very different things; but there you have it.”

How does this impact OpenSim?

Upon client login (over TCP), OpenSim sends its UDP address to the client. In doing so, it needs to send the actual IP address, not the domain name — the client expects the IP address. Due to that entry in /etc/hosts, OpenSim was getting nile.ics.uci.edu translated into the localhost IP… Fail!

Fix: either remove/comment that line from /etc/hosts or replace it with the external IP address of that server, if it has one.

Conclusion: bad Ubuntu! (Debian may suffer from the same problem)